Как проиграть определённую анимацю при касание объекта?

Чтобы проиграть определённую анимацию при касании объекта в Unity, вам понадобится использовать скрипт и обработку коллизий. Вот подробное описание шагов, необходимых для достижения этой цели:

1. Сначала у вас должен быть объект, на который вы хотите добавить анимацию. Убедитесь, что у него есть компонент Collider, чтобы он мог обнаруживать физические столкновения. Если у вас нет Collider, вы можете добавить его, выбрав объект и включив нужный тип тела в окне «Inspector».

2. Создайте анимацию, которую вы хотите воспроизвести при касании объекта. Для этого вам понадобится анимационный контроллер. Чтобы его создать, выберите папку «Assets» и нажмите правой кнопкой мыши, затем выберите «Create» -> «Animator Controller». Переименуйте его на ваше усмотрение, например "ObjectAnimationController".

3. Откройте созданный анимационный контроллер и создайте новую анимацию, нажав на кнопку «Create» в окне состояний. Назовите ее как угодно, например "ObjectTouchAnimation". Затем подключите эту анимацию к состоянию, добавив переход от состояния «Entry» к новому состоянию. Это можно сделать, просто соединив два состояния с помощью стрелки.

4. Создайте новый скрипт в Unity, щелкнув правой кнопкой мыши на папке «Scripts» и выбрав «Create» -> «C# Script». Назовите его, например, "ObjectTouchAnimationScript". Затем откройте файл скрипта и начните его редактирование.

5. В скрипте вам понадобятся две функции: OnCollisionEnter и Update. OnCollisionEnter вызывается, когда объект сталкивается с другим объектом. В этой функции вы будете запускать анимацию при касании. Update вызывается на каждом кадре и будет содержать проверку на то, проигрывается ли анимация.

6. В функции OnCollisionEnter добавьте следующий код для проигрывания анимации:

void OnCollisionEnter(Collision collision)
{
    Animator animator = GetComponent<Animator>();
    animator.Play("ObjectTouchAnimation");
}

В этом коде мы получаем компонент Animator из объекта, на который добавлен компонент скрипта, и проигрываем анимацию "ObjectTouchAnimation".

7. В функции Update добавьте следующий код для проверки, когда анимация закончена. Если анимация закончена, возвращаем ее в исходное состояние:

void Update()
{
    Animator animator = GetComponent<Animator>();
    AnimatorStateInfo info = animator.GetCurrentAnimatorStateInfo(0);
    if (info.normalizedTime >= 1.0f)
    {
        animator.Play("IdleState"); // имя исходного состояния
    }
}

В этом коде мы сначала получаем текущую информацию о состоянии аниматора, а затем проверяем нормализованное время анимации (от 0 до 1). Если оно больше или равно 1, то анимация закончена и мы проигрываем анимацию исходного состояния "IdleState". Замените "IdleState" на имя вашего исходного состояния анимации.

8. Теперь нужно присоединить скрипт к объекту, на который вы хотите добавить анимацию. Выделите объект и перетащите скрипт из папки «Scripts» в окно «Inspector» объекта.

9. Откройте анимационный контроллер, включите параметр Trigger и назовите его, например, "ObjectTouched". Затем создайте переход от состояния "ObjectTouchAnimation" к исходному состоянию "IdleState". Для этого создайте новое состояние (кликнув правой кнопкой мыши на контроллере анимации и выбрав "Create State" в контекстном меню) и добавьте переход от состояния "ObjectTouchAnimation" к новому состоянию.

10. Вернитесь к скрипту и в функции OnCollisionEnter добавьте следующий код для запуска анимации:

void OnCollisionEnter(Collision collision)
{
    Animator animator = GetComponent<Animator>();
    animator.SetTrigger("ObjectTouched");
}

Этот код устанавливает параметр "ObjectTouched" в аниматоре в состояние «вызвать» ("Triggered") и запускает переход к исходному состоянию "IdleState".

11. Теперь, когда объект касается другого объекта, анимация будет проигрываться. И когда анимация заканчивается, она переходит в исходное состояние "IdleState".

Конечно, этот ответ включает лишь общие шаги, и реализация может отличаться в зависимости от вашей конкретной ситуации. Надеюсь, эта информация поможет вам начать реализацию анимации при касании объекта в Unity.