[SpaceShooter] 기본 적의 플레이어 충돌시 적 explosion Effect

EnemyA.cs

-EnemyA.cs에서 OnCollisionEnter를 사용해 충돌할때마다 Explosion 메서드를 호출한다.

-Explosion 메서드는 onExplosion 대리자를 호출하는데, 이 때 충돌한 게임오브젝트를 매개변수로 전달한다.

   => 충돌한 게임오브젝트의 위치를 받아와 Main의 코루틴인 CoExplosion에서 사용하기 위해서이다.

 

Main.cs

-CoExplosion은 매개변수로 받은 게임오브젝트의 위치로 효과 오브젝트를 옮기고, setActive(true)하는 동안 애니메이션을 실행하고 false된다.

적 이펙트의 충돌 효과

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

public class TestEnemyMain : MonoBehaviour
{
   
    [SerializeField] private Button btn;
    [SerializeField] private Transform generatePos;

    [SerializeField] private EnemyA enemyA;
    [SerializeField] private GameObject explosionGo;
    private Animator anim;
    private GameObject explosionEffect;
    void Start()
    {
        this.explosionEffect = Instantiate<GameObject>(this.explosionGo);
        this.explosionEffect.SetActive(false);
        this.anim = this.explosionEffect.GetComponent<Animator>();
        this.enemyA.onExplosion = (gameobject) => {
     
            StartCoroutine(this.CoExplosion(gameobject));
    

        };    
          
    }

    IEnumerator CoExplosion(GameObject gameObject)
    {
        Debug.LogFormat("Explosion position: {0}", gameObject.transform.position);
        Vector3 effectPos = new Vector3(gameObject.transform.position.x,gameObject.transform.position.y+0.5f,gameObject.transform.position.z);
        this.explosionEffect.transform.position = effectPos;
        this.explosionEffect.SetActive(true);        
        this.anim.SetInteger("State",1);
        yield return new WaitForSeconds(0.3f);
        this.anim.SetInteger("State",0);
        this.explosionEffect.SetActive(false);
    }


    // Update is called once per frame
    void Update()
    {
        //버튼 누르면 적 생성
        this.btn.onClick.AddListener(() =>
        {
            EnemyGenerator.Instance.GetEnemy(generatePos);
        });
    }
}
myoskin