アニメーションを任意のタイミングで開始する【Unity】

今回は敵からプレイヤーに向かって火の玉を発射するものを作成してみました 火の玉がせいせいされたあとにプレイヤーに当たってからアニメーションを開始したかったのでメモついでに記録します

成果

f:id:ka1357amnbpdr:20200902184042g:plain

ゲーム公開

unityroom.com

実装方法

  1. 生成した後にAnimatorからアニメーションの開始をoffにします
gameobject.GetComponent<Animator>().enabled = false;

2.  任意のタイミングでアニメーションを開始します ここでは,プレイヤーに当たったときにアニメーションを開始しています

_animator.enabled = true;
_animator.Play("Base Layer.explosion",0,0);

Scripts

生成するscript(敵にアタッチ)

private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Player"))
        {
            Debug.Log("プレイヤーが範囲に入った");
            isInPlayer = true;
            // var t = Instantiate(explosionPrefab, explosionPrefab.transform.position,explosionPrefab.transform.rotation);
            Observable.Interval(TimeSpan.FromSeconds(1f)).Where(_ => isInPlayer).Subscribe(_ =>
            {
                var t = Instantiate(explosionPrefab, parent.transform.position,explosionPrefab.transform.rotation);
                // t.GetComponent<Animator>().enabled = false;
                t.GetComponent<Rigidbody2D>().velocity = other.gameObject.transform.position;
            }).AddTo(this);
        }
    }

火の玉にアタッチ

private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Player"))
        {
            Debug.Log("アニメーションスタート");
            _animator.enabled = true;
            _animator.Play("Base Layer.explosion",0,0);
        }
    }

参考サイト

docs.unity3d.com

qiita.com