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
因每次跳跃而异,因此跳跃距离会略有不同。
球是在由固定间隙隔开的区块之间跳跃,因此上述行为会导致问题。
有什么方法可以解决这个问题并进行固定长度的跳跃吗?
答案 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