Как остановить запущенную анимацию в Unity?

#c# #unity3d #game-physics #2d-games

#c# #unity3d #игра-физика #2d-игры

Вопрос:

На самом деле я пытаюсь создать игру, в которой по умолчанию для игрока установлена анимация ожидания, поэтому при срабатывании, когда крючок захватывает драгоценный камень, запускается анимация переноса веревки, но, похоже, я не могу остановить анимацию переноса веревки и вернуться в режим ожидания. Хук также захватывает более одного элемента, кто-нибудь может мне помочь в этом? Вот наглядная иллюстрация анимации

Анимация в режиме ожидания

Обмотка веревки — игрок начинает лебедку в драгоценном камне

Вот код для скрипта перехвата:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HookScripts : MonoBehaviour {

[SerializeField]
private Transform itemHolder;

private bool itemAttached;

private HookMovement hookMovement;

private PlayerAnimation playerAnim;

void Awake() {
    hookMovement = GetComponentInParent<HookMovement>();
    playerAnim = GetComponentInParent<PlayerAnimation>();
}

void OnTriggerEnter2D(Collider2D target) {

    if (target.tag == Tags.PINK_GEM || target.tag == Tags.GREEN_GEM || target.tag == Tags.BLUE_GEM 
        || target.tag == Tags.ORANGE_GEM || target.tag == Tags.PURPLE_GEM 
        || target.tag == Tags.LIGHT_BLUE_GEM || target.tag == Tags.PINK_GEM_SMALL 
        || target.tag == Tags.LARGE_STONE || target.tag == Tags.SMALL_STONE){

        itemAttached = true;

        target.transform.parent = itemHolder;
        target.transform.position = itemHolder.position;
        // Set the position of the hook to the position of the item

        hookMovement.move_Speed = target.GetComponent<ItemScripts>().hook_Speed;

        hookMovement.HookAttachedItem();

        //animate player
        playerAnim.PullingItemAnimation();


        if (target.tag == Tags.PINK_GEM || target.tag == Tags.GREEN_GEM || target.tag == Tags.BLUE_GEM
            || target.tag == Tags.ORANGE_GEM || target.tag == Tags.PURPLE_GEM
            || target.tag == Tags.LIGHT_BLUE_GEM || target.tag == Tags.PINK_GEM_SMALL)
        {

            SoundManager.instance.HookGrab_Jewel();
        }
        else if (target.tag == Tags.LARGE_STONE || target.tag == Tags.SMALL_STONE){

            SoundManager.instance.HookGrab_Stone();
        }

            SoundManager.instance.WinchCrank(true);

    } // If the target is an item

    if (target.tag == Tags.DELIVER_ITEM){

        if(itemAttached){

            itemAttached = false;
            Transform objChild = itemHolder.GetChild(0);
            objChild.parent = null;
            objChild.gameObject.SetActive(false);

            playerAnim.IdleAnimation();
            SoundManager.instance.WinchCrank(false);

        }
    }// Remove items after winching

}// On trigger enter
  

}

А вот код для сценария анимации проигрывателя

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAnimation : MonoBehaviour
{
    private Animator anim;

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

    public void IdleAnimation()
    {
        anim.SetTrigger("Idle");
    }

    public void PullingItemAnimation()
    {
        anim.SetTrigger("ropeWrap");
    }

}
  

Ответ №1:

Я никогда не был хорош с анимацией в Unity, но я могу помочь с проблемой нескольких элементов. В настоящее время, когда перехват попадает на элемент, все, что вы проверяете, это то, что это за элемент; переменная itemAttached установлена, но на самом деле никогда не используется. Вам нужно добавить некоторую проверку, которая гласит: «Если у меня уже есть элемент, не берите другой. На практике это просто добавило бы и к условию коллекции элементов:

 if (!itemAttached amp;amp; (target.tag == Tags.PINK_GEM || target.tag == Tags.GREEN_GEM || target.tag == Tags.BLUE_GEM 
        || target.tag == Tags.ORANGE_GEM || target.tag == Tags.PURPLE_GEM 
        || target.tag == Tags.LIGHT_BLUE_GEM || target.tag == Tags.PINK_GEM_SMALL 
        || target.tag == Tags.LARGE_STONE || target.tag == Tags.SMALL_STONE)){
    //attach the item
}
  

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

1. Большое вам спасибо, определенно решил проблему с крючком!