728x90
우선, 내가 듣는 수업에서는 CreatureController라는 스크립트를 통해 대부분 생명체의 관리를 통합적으로 하고 있다. 플레이어와 몬스터 등은 CreatureController를 상속받아 사용하면 된다.
몬스터가 죽을 때의 관리는 MonsterController에서 한다. 몬스터를 죽이게 되는 WeaponController 또는 PlayerController에서 몬스터의 죽음을 관리하게 되면 애매한 상황이 발생한다. 몬스터를 주먹으로 때렸을 때, 무기로 때렸을 때, 몬스터가 잘못된 지역에 가서 스스로 죽었을 때 등등 각기 다른 Controller에서 몬스터의 죽음을 관리하기는 무리다.
우선 CreatureController에서 OnDamaged라는 함수를 새로 파준다. 특별한 내용을 넣지는 않고 MonsterController에서 그 함수를 override하여 내용을 만들어준다.
public override void OnDamaged()
{
GameObject effect = Managers.Resource.Instantiate("Effect/DieEffect");
effect.transform.position = transform.position;
effect.GetComponent<Animator>().Play("START");
GameObject.Destroy(effect, 0.5f);
Managers.Object.Remove(gameObject);
Managers.Resource.Destroy(gameObject);
}
미리 만들었던 Object, Resource에 있는 함수도 몇몇 사용했다. 이름만 봐도 어떤 내용인지는 알 수 있으리라 생각한다. MonsterController에 만들어진 OnDamaged는 WeaponController, PlayerController 등에서 바로 사용하면 된다.
CreatureController cc = go.GetComponent<CreatureController>();
if (cc != null)
cc.OnDamaged();
이런 식으로 이제는 어느 곳에서든 몬스터가 죽게 되면 OnDamaged를 꺼내쓰기만 하면 몬스터의 죽음을 만들 수 있다.
728x90
'공부 > Unity' 카테고리의 다른 글
[Unity] player가 갈 수 없는 영역 표시하기 (0) | 2022.08.15 |
---|---|
[Unity] 게임 실행 작은 화면으로 하기 (0) | 2022.07.29 |
[Unity] player의 움직임 제어시 Time.deltaTime을 곱하는 이유 (0) | 2022.07.25 |
[Unity] 버튼 클릭하면 다음 스테이지로 넘어가기 / 씬전환 (0) | 2022.05.18 |
[Unity] 1인칭 FPS 총알 발사하기 (0) | 2022.05.17 |