Как сделать другую анимацию на третий клик? и Как сделать так чтобы префабы “выпадали” из объекта при разрушении? [закрыт]

125
25 мая 2019, 03:20

Сделал 2 анимации TreeDance.anim и Fall.anim. По моей задумке при первых двух кликах на дерево(мой объект) должна воспроизводиться анимация TreeDance.anim, а на третий Fall.anim.

Так вот, TreeDance.anim воспроизводится, а Fall.anim нет.

Объясните пожалуйста как сделать так чтобы при уничтожении дерева появлялись брёвна (ещё мои объекты).

Моя версия скрипта:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TreeDestroy : MonoBehaviour {
private int td;
public GameObject Log;
void Start () {
}
void Update () {
    if (td == 3) {
        Destroy (gameObject);
        Instantiate (Log);
        Instantiate (Log);
        Instantiate (Log);
    }
}
void OnMouseDown () {
    td = td + 1;
    if (td <= 2) {
        GetComponent<Animator> ().SetTrigger ("Dance");
    }
    else
        GetComponent<Animator> ().SetTrigger ("Fall");
    }
}

Заранее спасибо за ответ!

Answer 1

Попробуй это:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Destroyable : MonoBehaviour
{
    private int _td;
    public GameObject[] ObjectsToDrop;
    void OnMouseDown()
    {
        _td += 1;
        if (_td <= 2)
        {
            GetComponent<Animator>().SetTrigger("Dance");
        }
        else
        {
            GetComponent<Animator>().SetTrigger("Fall");
            StartCoroutine(WaitForAnimationEndDropItemsAndDestroy());
        }
    }
    IEnumerator WaitForAnimationEndDropItemsAndDestroy()
    {
        yield return new WaitForSeconds(1);//указать длинну анимации в секундах
        DropItems();
        Destroy(gameObject);
    }
    private void DropItems()
    {
        foreach (var item in ObjectsToDrop)
        {
            if (item != null)
            {
                var tmp = Instantiate(item);
                var zdvig = Random.Range(1,3);
                tmp.transform.location = new Vector3(tmp.transform.location.x + zdvig, tmp.transform.location.y+zdvig, tmp.transform.location.z);
            }
        }
    }
}
Answer 2

По коду вроде все правильно, вероятно ошибка в настройке анимации. Я бы посоветовал разумнее настроить AnimatorController. На сколько я понимаю у вас два состояния в нем и переходите вы в них устанавливая соответствующие переменные аниматора. Скорей всего дело в переходах. Я бы сделал параметр Stateтипа int и в него при клике передавал ваш td. А дальше настроил переходы в контроллере из AnyState в ваши анимации по требуемым условиям со State. Если ваша анимация не должна крутится без остановки, то не забудьте в настройках перехода отключить галочку с переходом если уже находитесь в этом состоянии Can Transition To Self.

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

READ ALSO
Локализация игрового меню

Локализация игрового меню

Всем привет, у меня сейчас игра на eng языке хочу добавить ru языкПодскажите хороший способ локализации игрового меню

99
Sqlite database to xml c#

Sqlite database to xml c#

Пишу програмку на юнити, есть база данных, по определенному запросу нужно сохранить данные в xml формате, запрос написан вышеВ итоге у меня...

130
Ошибка при вызове метода из службы

Ошибка при вызове метода из службы

Есть некая служба, которая лежит на сервисе Microsoft AzureНо при вызове её из кода в Visual Studio вылетает следующая ошибка:

109
SolidColorBrush перекрывает элементы

SolidColorBrush перекрывает элементы

Помогите разобраться с шаблоном

107