为什么带旋转的动画会破坏我的 in-game object 旋转?

Why animation with rotation can break my in-game object rotations?

我是 Unity 新手。我正在尝试创建一个带有一些随机植物的行星模型。我使用空游戏 object 作为 parent 在游戏开始时生成带有随机精灵的植物。我还添加了一个 scipt 来在玩家与植物碰撞时播放一些动画。但我注意到,每次播放动画时,我的植物角度都会减小一定程度。我使用此代码制作植物生成器:

public class Tree : MonoBehaviour
 {
     
     public Transform customPivot;
     public float angle;
     public GameObject plant;
     
     void Start()
     {
         
        transform.RotateAround(customPivot.position,Vector3.forward,angle);
        Vector3 pos=this.transform.position;
        GameObject myPlant= Instantiate(plant,pos,Quaternion.identity) as GameObject;
        myPlant.transform.SetParent(this.transform);
        myPlant.transform.Translate(0,0,0);
        myPlant.transform.localEulerAngles = new Vector3(0,0,-90);
     }
 }

我用这段代码播放植物动画:

 public class TreeBehaviour : MonoBehaviour
 {
    
     private int rand;
     Animator animator;
     public Sprite[] Sprite_pic;
     void Change(){
         rand=Random.Range(0,Sprite_pic.Length);
         GetComponent<SpriteRenderer>().sprite=Sprite_pic[rand];
     }
 
     private void Start() {
         Change();
         animator=GetComponent<Animator>();
         
     }
     private void OnTriggerEnter2D(Collider2D other) {
         if(other.CompareTag("Player")){
             animator.SetTrigger("Trigger");
         }
     }
 }

如果玩家与植物发生碰撞,会触发植物动画。动画只是简单地将植物旋转到一定程度,然后将其旋转回零度。当我播放它时,它显示:

每次玩家与植物碰撞时,植物动画都会旋转植物一点然后旋转回来,但是当我的玩家旋转几次并触发植物动画时,它是这样的:

好像每次播放动画,动画停止后,我的植物旋转都会有轻微的变化。我很困惑,因为我已将动画设置为回滚到零度。有谁知道我做错了什么?

编辑: 所以按照建议,我尝试取消勾选根运动,但我得到了这个:

看起来所有的角度都变成了零度。我尝试在游戏进行时更改“变换”部分中的角度,但角度仍为零度。我尝试添加:

void Update()
    {
        this.transform.localEulerAngles = new Vector3(0,0,-90);
    }

但是角度还是0度

如果我没看错,可能是将更改应用于变换的 Root Motion 有问题(了解更多信息 here

Unticking Apply Root Motion in Animator Component

尝试取消勾选它并告诉我它是否已修复。

通过将此添加到我的代码中,我可以将我的动画保持在 RootMotion 模式并对其应用旋转或更新我的 IK 装备。

private Animator animator;

void Awake()
{
    animator = GetComponent<Animator>();
}

private void OnAnimatorMove() 
{
    if (animator != null)
    {
        transform.SetPositionAndRotation(animator.targetPosition, animator.targetRotation);
    }
}

void LateUpdate()
{
    // Rotations
    // IK stuff
}