2016-09-14 3 views
0

Я добавляю CharacterController к Player.But, когда я тестирую функцию перехода, я обнаружил, что Игрок немедленно переместится вверх.Как плавно переходить в Unity3D

if (Player.isGrounded) 
    { 
     if (jump) 
     { 
      Move.y = JumpSpeed; 
      jump = false; 
      Player.Move (Move * Time.deltaTime); 
     } 
    } 
    Move += Physics.gravity * Time.deltaTime * 4f; 
    Player.Move (Move * Time.fixedDeltaTime);` 
+0

Более широкий образец кода был бы полезен. Этот фрагмент находится в файле FixedUpdate()? Есть ли RigidBody, прикрепленный к игровому объекту игрока? – Augure

ответ

0
  1. Вы звоните Player.Move() дважды в одном кадре. Это может быть проблемой.
  2. Вы являетесь , добавив gravity to Move vector, что означает, что он всегда будет двигаться вверх, когда вы позвоните по этому коду.
  3. Именование переменной типа Move не является хорошим соглашением. Это создает путаницу во время чтения, потому что уже существует метод с тем же именем. измените его на moveDirection.

Вот пример кода:

public class ExampleClass : MonoBehaviour { 
    public float speed = 6.0F; 
    public float jumpSpeed = 8.0F; 
    public float gravity = 20.0F; 
    private Vector3 moveDirection = Vector3.zero; 
    CharacterController controller; 
    void Start() 
    { 
     controller = GetComponent<CharacterController>(); 
    } 

    void Update() { 
     if (controller.isGrounded) { 
      moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 
      moveDirection = transform.TransformDirection(moveDirection); 
      moveDirection *= speed; 
      if (Input.GetButton("Jump")) 
       moveDirection.y = jumpSpeed; 

     } 
     moveDirection.y -= gravity * Time.deltaTime; 
     controller.Move(moveDirection * Time.deltaTime); 
    } 
} 

надеюсь, что это помогает.

+0

Спасибо ^. ^, Это помогает много – Saber

+0

Пожалуйста, отметьте правильный ответ. –