Как заставить коллекционный объект изменить свою анимацию при столкновении с игроком?

#c# #unity3d

#c# #unity3d

Вопрос:

это мой первый вопрос здесь, и я полный новичок. Я создал предмет, который может быть подобран игроком при столкновении, и он просто сбрасывает анимацию игрока (не моя точка зрения здесь), и я просто хотел, чтобы спрайт пикапа изменился, прежде чем он уничтожит себя.

Я искал вокруг, но ничего не мог найти для этого.

Вот мой текущий код на пикапе:

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

 public class PickUpReCharge : MonoBehaviour {
   public Animator anim;
   public Animator animc;

   void Start() {
   }

   void Update() {
 }

 private void OnTriggerEnter2D(Collider2D other) {
   if (other.tag == "Player") {
     anim.Rebind();
     animc.Rebind();
     Destroy(gameObject);
    }
  } 
}
  

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

Это то, что я пытался сделать в первую очередь:

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

public class PickUpReCharge : MonoBehaviour {

  public Animator anim;
  public Animator animc;
  public Animator animp;

  void Start() {

  }

  void Update() {

  }

private void OnTriggerEnter2D(Collider2D other) {

   if (other.tag == "Player") {
     anim.Rebind();
     animc.Rebind();
     animp.Play("Pickup", 0, 0.0f);
     Destroy(gameObject);
    }
  } 
}
  

Но это вообще не сработало.

Я ищу эффект, похожий на то, когда, например, появляются блестки после того, как вы берете монету.

Есть ли какой-либо готовый ресурс, на который я могу ссылаться, возможно? Или код простой, и я просто так плохо кодирую lol?

Спасибо ^^

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

1. Есть много способов сделать это, вы могли бы использовать Destroy(gameObject,0.5f) для уничтожения gameObject через 0,5 секунды. Или вы могли бы использовать сопрограмму, которая ждет некоторое время, а затем уничтожает gameObject и делает все, что вы хотите, чтобы она делала. Вы также можете использовать анимационные события, что вам больше подходит

2. Это хорошо работает! Я не знал о функции времени в destroy.GameObject! Спасибо. Я хочу отметить вас как ответ, но я не знаю как. Спасибо!

Ответ №1:

Я разобрался с этим с помощью пользователя Ali Baba.

В принципе, я беру Destroy(gameObject); и добавляю к нему время. Destroy(gameObject, 0.3f);

Это добавляет задержку к уничтожению объекта.

Это заставило его работать на меня. Итак, я поместил туда свой сценарий анимации, и у него было достаточно времени для воспроизведения!

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

public class PickUpReCharge : MonoBehaviour
{
    public Animator anim;
    public Animator animc;
    public Animator anime;

    void Start()
    {
        anime.Play("Pickup", 0, 0f);
    }

    void Update()
    {

    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Player")
        {
            anim.Rebind();
            animc.Rebind();
            anime.Rebind();
            Destroy(gameObject, 0.3f);
        }
    }
}