通过动画正确使用更新和固定更新动作

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);
    

【讨论】:

以上是关于通过动画正确使用更新和固定更新动作的主要内容,如果未能解决你的问题,请参考以下文章

通过更新约束滑入 UIView

在通过动作调度进行状态更新后,在 React 中使用 Redux 执行函数?

具有 CSS 变量和 @keyframes 的 CSS 动画未在 Safari 上更新

SwiftUI:通过更新变量来动画波浪不起作用

UITableView 通过 JSON 更新,动画行插入

使用输入更新 redux 状态