分配动画后移动角色位置

时间:2014-02-13 06:52:30

标签: c# unity3d

在分配动画后移动我的角色位置。

角色GameObject分配有AnimationRigidBodyCapsule ColliderC# Script组件。

C#脚本(动画部分)如下:

public class MyCharacter : MonoBehaviour {
        // Animations
    public AnimationClip idleAnimation;
    public AnimationClip slideAnimation;
    public AnimationClip runAnimation;
    public AnimationClip jumpPoseAnimation;
    private Animation charAnimation;

    enum CharacterState {
        Idle = 0,
        Running = 1,
        Sliding = 2,
        Jumping = 3,
    }

    private CharacterState charState;

    void Start () {
        charState = CharacterState.Running;
        charAnimation = gameObject.GetComponent<Animation>();
        if(!charAnimation) {
            Debug.Log("No Animation Component.");
        } else {
            AnimationEvent syncRunEvent = new AnimationEvent();
            syncRunEvent.time = runAnimation.length;
            syncRunEvent.functionName = "SyncRunAnimation";
            runAnimation.AddEvent(syncRunEvent);
        }
    }

        void Update () {
                // Animations
        if(charAnimation) {
            if(charState == CharacterState.Jumping) {
                charAnimation.CrossFade(jumpPoseAnimation.name);
            } else if(charState == CharacterState.Sliding) {
                charAnimation.CrossFade(slideAnimation.name);
            } else {
                charAnimation.CrossFade(runAnimation.name);
            }
        }
    }

        void SyncRunAnimation() {
        Debug.Log("Sync Run");
        transform.position += new Vector3(0, 3, 0);
    }
}

在分配动画之前,角色站在(0, 0.6, 0)位置的地面上。分配后,角色淹没在地面,卡住;位置更改为(0, -0.75, -0.55),这是导入动画的位置。如何控制动画位置?

注意:我尝试使用SyncEvent向上移动(增加Y轴),但它根本没有效果。


仅当动画设置为旧版时才会发生这种情况。如果我将动画设置为 Generic ,则没有问题,但是控制台发出错误:

  

动画组件“MyCharacter”使用的AnimationClip“run”必须标记为Legacy。

并且无法播放动画。如何使用Legacy动画使用Generic动画/正确位置?

3 个答案:

答案 0 :(得分:1)

我发现FBX动画的位置关键帧会影响位置。删除动画面板中的属性后,问题就消失了。

Remove this Properties

但是,关键帧有时会重新出现。

答案 1 :(得分:0)

根据我的经验,最好将3D模型作为某个父游戏对象的子对象。父游戏对象具有控制器脚本和诸如此类的东西。我不知道这是否能解决这个问题。我猜测动画正在改变模型的位置和位置,这会影响游戏对象的变换。如果你把它变成其他游戏对象的孩子,那可能不会发生。

答案 2 :(得分:0)

有两种方法可以解决这个问题。首先在Animator面板中启用“Apply Root Motion”。在这种情况下,旋转和位置数据将是加性而非绝对的。但是重复动画后可能会发生原始旋转或位置丢失。在这种情况下,您可以创建一个空的gameObject。将它定位到你的gameObject(进入它的起源)动画的内容。在此之后将动画gameObject放入空游戏对象(在层次结构视图中)