#unity3d #input #camera #controls
Вопрос:
Я пытаюсь воспроизвести камеру редактора для использования во время выполнения, и все работает так, как ожидалось, но я пытаюсь облегчить движение и не могу заставить его работать правильно. Вот мой код для этого движения. Это работает правильно, но не облегчается, как я хочу.
Vector3 move = Vector3.zero;
if (Input.GetKey(KeyCode.W))
move = Vector3.forward * currentSpeed;
if (Input.GetKey(KeyCode.S))
move -= Vector3.forward * currentSpeed;
if (Input.GetKey(KeyCode.D))
move = Vector3.right * currentSpeed;
if (Input.GetKey(KeyCode.A))
move -= Vector3.right * currentSpeed;
if (Input.GetKey(KeyCode.E))
move = Vector3.up * currentSpeed;
if (Input.GetKey(KeyCode.Q))
move -= Vector3.up * currentSpeed;
transform.Translate(move);
Я попробовал вектор назначения 3, установив move
его в значение , а затем изменив положение на destination
. Это действительно облегчает задачу, как и ожидалось, но тогда все направления нарушены. Левая движется вперед, правая движется назад и так далее.
Я пытался перейти на FixedUpdate, но все равно безуспешно.
Любая помощь будет очень признательна!
Ответ №1:
Попробуйте использовать контроллер символов. Это компонент из Единства. Он прост в использовании и плавен.
public CharacterController controler;
public void Start(){
controller = GetComponent<CharacterController>();}
public void Move(){
controller.Move(moveDirection * Time.deltaTime);}
На YouTube вы можете найти учебные пособия от CharacterController.
Комментарии:
1. Я действительно изучал это, но поскольку это не персонаж как таковой, а буквально просто камера, которую я пытаюсь переместить, я не думаю, что это было бы уместно. Я действительно просто ищу способ сгладить код, который у меня уже есть, потому что сейчас он отлично работает (кроме сглаживания).
2. Тогда попробуй вот это. Это простое 2d-движение, но вы можете использовать его и на камере.
public class CameraController : MonoBehaviour { private float moveSpeed = 0.5f; void Update () { if (Input.GetAxisRaw("Horizontal") != 0 || Input.GetAxisRaw("Vertical") != 0) { transform.position = moveSpeed * new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")); }
3. Я ценю ваш вклад, но, основываясь на существующем коде, который я предоставил, я не уверен, насколько он применим. Кроме того, кажется, что не применяется никакого сглаживания, в чем мне и нужна помощь. В любом случае, спасибо вам за потраченное время!
4. Я понимаю, что правильное слово — «Смягчение», а не сглаживание. Я приношу извинения за любую путаницу.
Ответ №2:
После долгих экспериментов смягчения/сглаживания можно добиться, выполнив следующие действия в цикле обновления:
float x, y, z;
x = Input.GetAxis("Horizontal") * currentSpeed * Time.deltaTime;
z = Input.GetAxis("Vertical") * currentSpeed * Time.deltaTime;
y = 0;
transform.Translate(x,y,z);