Ослабление движения Клавиатуры Unity?

#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);