Почему анимация с вращением может нарушить вращение моих игровых объектов?

#unity3d #animation #animator

Вопрос:

Я новичок в Unity. Я пытаюсь создать модель планеты с несколькими случайными растениями в ней. Я использую пустой игровой объект в качестве родителя для создания растения со случайным спрайтом при запуске игры. Я также добавил 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 градусов

Ответ №1:

Если я вас правильно понял, это может быть проблема с корневым движением, которое применяет изменения к преобразованию (подробнее об этом здесь).

Снятие флажка Применить корневое движение в компоненте Аниматора

Попробуйте снять галочку с этого и скажите мне, исправил ли он это.

Комментарии:

1. Поэтому я попытался это сделать, но я думаю, что это движение корней, которое удерживает растения прямо, я уже добавил картинку к своему вопросу

2. Тогда я упускаю некоторые важные детали… Вы говорите, что чем больше вы сталкиваетесь, тем сильнее искривляются деревья, верно? Может быть, есть еще аниматоры, которые применяют ротацию? Потому что я не могу воспроизвести этот результат со своей стороны без применения корневого движения

3. итак, я решил эту проблему. Похоже, проблема заключается в том, чтобы применить перемещение корней, когда я отключаю эту опцию, все работает нормально, за исключением того факта, что поворот культур составляет все 0 градусов и его нельзя изменить. Поэтому я в итоге выбрал простой способ решить эту проблему, придерживаясь RootMotion и добавляя код для исправления севооборота каждый раз, когда он достигает определенной точки. Но я думаю, что правильный способ-это отклеить корневое перемещение и как-то исправить вращение