场景
写游戏角色弹跳和下蹲的动作控制器时,发现了一个问题,就是按下空格有时能够触发角色弹跳,有时则不行!那么问题出在哪里?
private void FixedUpdate()
{
if (characterController.isGrounded)
{
var tmpHorizontalAxis = Input.GetAxis("Horizontal");
var tmpVerticalAxis = Input.GetAxis("Vertical");
currentTransformDirection = transform.TransformDirection(tmpHorizontalAxis, 0, tmpVerticalAxis);
if (Input.GetKeyDown(KeyCode.Space))
{
currentTransformDirection.y = 2f;
}
if (Input.GetKey(KeyCode.LeftControl))
{
float currentVelocity = 0;
characterController.height =
Mathf.SmoothDamp(characterController.height, 0.5f,
ref currentVelocity, Time.deltaTime * 4);
}
else
{
float currentVelocity = 0;
characterController.height =
Mathf.SmoothDamp(characterController.height, 2f,
ref currentVelocity, Time.deltaTime * 2);
}
}
currentTransformDirection.y -= 9.8f * Time.deltaTime;
characterController.Move(currentTransformDirection * moveSpeed * Time.deltaTime);
}
- 查阅资料发现:问题出在我将Input.GetKeyDown的代码写在了FixedUpdate中!
- 因为FixUpdate默认的固定帧数是60帧,而Update是实时渲染,FixUpdate的60帧可能会穿插在Update的帧里面,因此出现有时不触发的现象!
解决办法:
将FixUpdate改成Update
总结:
FixedUpdate主要是处理一些需要固定帧数的代码
而类似于操作代码,需要实时监控的,则需要放在Update中。
|