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