[SpaceShooter] 기본 적의 플레이어 충돌시 적 explosion Effect
-EnemyA.cs에서 OnCollisionEnter를 사용해 충돌할때마다 Explosion 메서드를 호출한다.
-Explosion 메서드는 onExplosion 대리자를 호출하는데, 이 때 충돌한 게임오브젝트를 매개변수로 전달한다.
=> 충돌한 게임오브젝트의 위치를 받아와 Main의 코루틴인 CoExplosion에서 사용하기 위해서이다.
-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);
});
}
}
'[VR] GroundZero 개발' 카테고리의 다른 글
[4Idle - Gazzlers] 플레이어 오른손 기능 구현(총 쏘기+ 데미지 텍스트 효과) (1) | 2023.11.21 |
---|---|
[4Idle-Gazzlers] 플레이어 왼손 구현 -2. 방패 부착 (1) | 2023.11.14 |
[4Idle-Gazzlers] 플레이어 왼손 구현 -1. 아이템 그랩/사용 (1) | 2023.11.13 |
[4Idle - Gazzlers] 1차 게임 씬 구현 계획 (0) | 2023.11.02 |
[SpaceShooter] 보조무기의 Player Follow 기능 구현 (0) | 2023.10.15 |