通过动画正确使用更新和固定更新动作
Posted
技术标签:
【中文标题】通过动画正确使用更新和固定更新动作【英文标题】:Proper Usage of Update and FixedUpdate Movements With Animations 【发布时间】:2015-09-02 22:51:14 【问题描述】:读了很多书,我有了一些想法,但不能 100% 确定处理游戏对象的运动及其动画的正确方法。在这种情况下,它是我的玩家移动脚本。
所以我想知道的是我应该将我的“运动”变量的逻辑放在我的 Update 或 FixedUpdate 中,我是否也应该改变我的动画放置在 Update 中还是将它放在 FixedUpdate 中?我已经尝试了这两种方法,并且看到了相似的结果,但我只是想在更大的项目出现时进行良好的实践。
void Update()
// IF we are allowed to move.
if(_PMS.canMove)
// Get a -1, 0 or 1.
moveHorizontal = Input.GetAxisRaw ("Horizontal");
moveVertical = Input.GetAxisRaw ("Vertical");
// Get Vector2 direction.
movement = new Vector2(moveHorizontal * _PMS.invertXDirection, moveVertical * _PMS.invertYDirection);
// Apply direction with speed.
movement *= speed;
// IF the user has an animation set.
if(anim != null)
// Play animations.
Helper_Manager.PlayerAnimation(moveHorizontal, moveVertical, anim, _PMS);
void FixedUpdate()
// IF we are allowed to move.
if(_PMS.canMove)
// Apply the force for movement.
rb.AddForce(movement);
【问题讨论】:
【参考方案1】:动画应与物理运动一起触发。我会将所有运动计算移至 FixedUpdate() 并在 Update() 中获取输入。这样,所有的运动和动画都会一起触发。
void Update()
// IF we are allowed to move.
if(_PMS.canMove)
// Get a -1, 0 or 1.
moveHorizontal = Input.GetAxisRaw ("Horizontal");
moveVertical = Input.GetAxisRaw ("Vertical");
void FixedUpdate()
// IF we are allowed to move.
if(_PMS.canMove)
// Get Vector2 direction.
movement = new Vector2(moveHorizontal * _PMS.invertXDirection, moveVertical * _PMS.invertYDirection);
// Apply direction with speed.
movement *= speed;
// IF the user has an animation set.
if(anim != null)
// Play animations.
Helper_Manager.PlayerAnimation(moveHorizontal, moveVertical, anim, _PMS); // always call this, assuming you play an idle animation if moveHorizontal and moveVertical are 0
// Apply the force for movement.
rb.AddForce(movement);
【讨论】:
以上是关于通过动画正确使用更新和固定更新动作的主要内容,如果未能解决你的问题,请参考以下文章
在通过动作调度进行状态更新后,在 React 中使用 Redux 执行函数?