制作一个球跳一个固定的距离

时间:2018-03-03 16:44:43

标签: c# unity3d game-physics

void Update ()
{
    Vector3 input = new Vector3 (0, 0, 1);
    Vector3 direction = input.normalized;
    Vector3 velocity = direction * speed;
    Vector3 moveAmount = velocity * Time.deltaTime;
    transform.position += moveAmount;

    if(Input.GetKeyDown(KeyCode.Space) && isGrounded)
    {
        player.AddForce (Vector3.up * jumpForce, ForceMode.Impulse);
    }
}

由于Time.deltaTime变化moveAmount因每次跳跃而异,因此跳跃距离会略有不同。

球是在由固定间隙隔开的区块之间跳跃,因此上述行为会导致问题。

有什么方法可以解决这个问题并进行固定长度的跳跃吗?

1 个答案:

答案 0 :(得分:2)

您可以使用CharacterController。确保你的游戏对象附有一个CharacterController和Collider。此外,如果您的游戏对象附有一个rigibody,可能会导致它出现意外行为,因此您可能不得不禁止它。

public CharacterController controller;

private float verticalVelocity;
private float gravity = 25.0f;
private float jumpForce = 15.0f;

void Awake () {
    controller = GetComponent<CharacterController>();
}

void Update () {

    if( controller == null )
        return;

    if( controller.isGrounded)
    {
        verticalVelocity = -gravity * Time.deltaTime;
        if( Input.GetKeyDown(KeyCode.Space) )
        {
            verticalVelocity = jumpForce;
        }
    }
    else
    {
        verticalVelocity -= gravity * Time.deltaTime;
    }   

    float moveHorizontal = Input.GetAxis ("Horizontal");
    float moveVertical = Input.GetAxis ("Vertical");    

    Vector3 moveVector = Vector3.zero;
    moveVector.x = moveHorizontal * 5.0f;
    moveVector.y = verticalVelocity;
    moveVector.z = moveVertical * 5.0f;
    controller.Move(moveVector * Time.deltaTime);
} 

查看本教程以获取参考:https://www.youtube.com/watch?v=miMCu5796KM