使用动画正确使用更新和FixedUpdate移动

时间:2015-09-02 22:51:15

标签: c# unity3d

做了很多阅读,我有点想法,但不能100%确定处理GameObject的动作及其动画的正确方法。在这种情况下,它是我的播放器移动脚本。

所以我想知道的是我应该放置我的"运动的逻辑"在我的Update或FixedUpdate中的变量,我是否也应该更改任何内容,我的动画放置位于更新或将其置于FixedUpdate中?我已经尝试了两种方法,但我看到了类似的结果,但我只想在更大的项目出现时做好准备。

refreshUI: function () {
    var controlData = this._propertyEditor.get_control().Settings;
    jQuery(this.get_panelStyle()).val(controlData.PanelStyle);
},
applyChanges: function () {
    var controlData = this._propertyEditor.get_control().Settings;
    controlData.PanelStyle = jQuery(this.get_panelStyle()).val();
}

1 个答案:

答案 0 :(得分: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);
    }
}