Стрельба в Unity3D; пули летят не прямо и не в правильном направлении

#c# #unity3d

Вопрос:

Я делаю шутер сверху вниз, но у меня возникают проблемы с тем, чтобы стрелять именно так, как я хочу. В настоящее время у меня есть сценарий игрока, который обрабатывает движение и съемку.

 void Update() {  //Player face mouse  Plane playerPlane = new Plane(Vector3.up, transform.position);  Ray ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);  float hitDist = 0.0f;   if(playerPlane.Raycast(ray, out hitDist))  {  Vector3 targetPoint = ray.GetPoint(hitDist);  Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);  targetRotation.x = 0;  targetRotation.z = 0;  playerObj.transform.rotation = Quaternion.Slerp(playerObj.transform.rotation, targetRotation, 7f * Time.deltaTime);  }  //Player Movement  if (Input.GetKey(KeyCode.W))  {  transform.Translate(Vector3.forward * movementSpeed * Time.deltaTime);  }  if (Input.GetKey(KeyCode.A))  {  transform.Translate(Vector3.left * movementSpeed * Time.deltaTime);  }  if (Input.GetKey(KeyCode.S))  {  transform.Translate(Vector3.back * movementSpeed * Time.deltaTime);  }  if (Input.GetKey(KeyCode.D))  {  transform.Translate(Vector3.right * movementSpeed * Time.deltaTime);  }   //Shooting  if (Input.GetMouseButtonDown(0))  {  Shoot();      gunAudio.Play();  }  }  void Shoot() {  Instantiate(bullet.transform, bulletSpawnPoint.transform.position, playerObj.transform.rotation);  }  

На данный момент пули не всегда выходят по прямой линии. Когда игрок начинает двигаться, пули, кажется, отстают и не всегда выходят из точки появления пули, которую я установил на кончике оружия. Поэтому, если игрок смотрит влево или вправо, пули будут вылетать позади игрока слева или справа. Если игрок смотрит вперед, пуля всегда будет выходить спереди.

Я пытался увеличить скорость пули в инспекторе, но, похоже, это не решает проблему, связанную с тем, что пуля не всегда выходит прямо в правильном направлении. Мне дали подсказку, что использование прямого вектора может помочь в этом, но как бы я изменил то, что я должен включить в это?

Ответ №1:

Если я понял вашу проблему, вы устанавливаете вращение пули таким же, как у игрока, вместо этого вы должны установить его таким же, как у Bulletspawner. Кроме того, вместо преобразования пули вы должны создать экземпляр Пули в качестве игрового объекта

Поэтому ваш экземпляр должен выглядеть так.

 // Variables  Gameobject bullet;  Transform bulletSpawnPoint;    // Instantiate bullet at bulletSpawn  Instantiate(bullet, bulletSpawnPoint.position, bulletSpawnPoint.rotation);   

Ответ №2:

Вы могли бы использовать:

 playerObj.transform.forward   

Вместо

 playerObj.transform.rotation  

Комментарии:

1. Я попытался заменить это в Instantiate, но это не сработало