## 게임을 제작할 때는 항상 타임 테이블이나 스케쥴 표를 사용해서 어떤 것을 몇시까지 하는지 정하고 하자
습관을 들일 필요가 있음
-----
0.보스를 만들어줘서, 전에 했던 몬스터와 같은 구조를 넣어준다.
체력을 가지고, 공격을 입으면, 데미지를 입는다
-> 나중에는 상속 구조로 해야할 것 (체력을 가진 것들, 죽을 수 있는 것들 등등 )
1. 먼저 보스가 데미지를 입고 체력이 0이 되면 죽는 애니메이션을 만들어준다.
이건 Animator로 되어있기 때문에, Trigger 를 달아준다.
void Update()
{
if (this.bossHp <= 0 && this.bossDie == false) {
StartCoroutine(Die());
}
}
사망 시 (체력이 0 && 죽음bool 값이 false 일때)
사망 코르틴 시작.
IEnumerator Die() {
this.anim.SetTrigger("die");
this.bossDie = true;
this.DropItem();
yield return new WaitForSeconds(6f);
Destroy(gameObject);
this.onDie();
}
코르틴 시작시, 애니메이터에서 "die" 애니 플레이
bossDie를 true로
6초 후 (애니메이션 끝나는 시작)
게임 오브젝트 사라지게하기
2. 보스가 죽으면 아이템을 인스턴스한다(인스턴스 할 때는 아이템 setActive(false)로 가져와서 숨기기
그리고 사라진 후에 이벤트 델리게이트 소환해서, 죽은 후 이벤트 달아줘서, setActive(true)로 만들어준다.
onDie; (죽는 걸 알려줄 ★이벤트 댈리게이트 // 조금씩 쓰는 법을 알겠음)
this.DropItem();
DropItem 메서드를 오브젝트가 사라지기전에 달아줘서, 아이템을 만들어준다.
Destroy(gameObject);
this.onDie();
사라지고 난 다음에 onDie() 이벤트를 실시해준다.
public void DropItem()
{
var itemGo = Instantiate<GameObject>(this.itemPrefab);
itemGo.transform.position = this.gameObject.transform.position;
itemGo.SetActive(false);
this.onDie = () =>
{
itemGo.SetActive(true);
};
}
var itemGo = Instantiate<GameObject>(this.itemPrefab);
아이템 프리팹을 하이라키에 만들어준다.
itemGo.transform.position = this.gameObject.transform.position;
생성된 아이템의 포지션을 현재 보스의 위치로 바꿔준다.
itemGo.SetActive(false);
아이템을 false해준다 (안 보이게 하기 위해서)
this.onDie = () =>
{
itemGo.SetActive(true);
};
이벤트에서 보스가 사라진 걸 알려주게 되면, true로 바꿔주면 아이템이 보이게 된다.
아이템이 잘 뜨는 걸 확인 할 수 있다.
3. 아이템과 플레이어 충돌 체크해서, 닿으면 아이템 사라지게하기
히어로의 콜라이더 충돌에서 other 태그가 아이템이면 로그를 띄워주고, other의 게임 오브젝트를 사라지게 만듭니다.
else if (other.tag == "item") {
Debug.Log("아이템을 먹었습니다.");
Destroy(other.gameObject);
}
'유니티 챌린지 > 서브프로젝트' 카테고리의 다른 글
0430 _ 데이타 가져와서, 몬스터 죽을 시 데이타로 불러오기 (0) | 2021.04.30 |
---|---|
0430_캐릭터 성장 시스템, 렙업 시 능력치 증가 (0) | 2021.04.30 |
0429 _ 서브프로젝트 R&D 캐릭터 조이스틱으로 움직이기 (1) | 2021.04.29 |