Unityゲーム開発スタジオ スタジオしまづ

初心者向けUnity講座・ 統計・機械学習関係についてつらつらと

初心者のためのUnity講座! 敵を撃破したときに爆破アニメーションを表示する方法の巻 サイドビューアクションゲーム編

みなさんこんにちはスタジオしまづの嶋津です。

前回

simanezumi1989.hatenablog.com

今回

敵を踏んで倒したときに爆破アニメーションを表示する方法について紹介します。

youtu.be (役に立ったという方はチャンネル登録していただけると嬉しいです^^)

using UnityEngine;

public class EnemyManager : MonoBehaviour
{
    // [SerializeField] GameManager gameManager;
    [SerializeField] LayerMask blockLayer;
    [SerializeField] GameObject deathEffect;
    Rigidbody2D rigidbody2D;
    float speed = 0;


    public enum MOVE_DIRECTION
    {
        STOP,
        LEFT,
        RIGHT,
    }
    MOVE_DIRECTION moveDirection = MOVE_DIRECTION.RIGHT;

    void Start()
    {
        rigidbody2D = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (!IsGround())
        {
            // 向きを変える
            ChangeDirection();
        }
    }
    private void FixedUpdate()
    {
        switch (moveDirection)
        {
            case MOVE_DIRECTION.STOP:
                speed = 0;
                break;
            case MOVE_DIRECTION.LEFT:
                transform.localScale = new Vector3(-1, 1, 1);
                speed = -3;
                break;
            case MOVE_DIRECTION.RIGHT:
                transform.localScale = new Vector3(1, 1, 1);
                speed = 3;
                break;
        }
        rigidbody2D.velocity = new Vector2(speed, rigidbody2D.velocity.y);
    }
    bool IsGround()
    {
        Vector3 startVec = transform.position + transform.right * 0.5f* transform.localScale.x;
        Vector3 endVec = startVec - transform.up * 0.5f;
        Debug.DrawLine(startVec, endVec);
        return Physics2D.Linecast(startVec, endVec, blockLayer);    
    }

    void ChangeDirection()
    {
        if (moveDirection == MOVE_DIRECTION.RIGHT)
        {
            // 左に移動
            moveDirection = MOVE_DIRECTION.LEFT;
       }
        else
        {
            // 右に移動
            moveDirection = MOVE_DIRECTION.RIGHT;
        }
    }
    public void DestroyEnemy()
    {
        // 爆破アニメーション
        Instantiate(deathEffect, this.transform.position, this.transform.rotation);
        Destroy(this.gameObject);
    }
}

ただ今回は、アニメーションの終了を取得できていないので、次の動画で終了取得の方法を紹介します。

スタジオしまづから

ゲームをリリースしたい人向けのUnity講座を動画販売しています。c#の基礎からリリースまで体系的に学びたい方はぜひ。
https://www.udemy.com/studio_shimazu_nfrpg/?couponCode=FREE_FIRST
  また、一人でゲームを作るのは難しいという方はゲームリリースを目的とするオンラインサロンもやっているのでよければどうぞ!話だけでもという方はTwitterのDMだけでもOKです^^ camp-fire.jp