#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, но это не сработало