// 게임개발 종합반 - 3주차(스파르타코딩클럽)
오류 상황
- 강의에서 배운 고양이가 체력이 꽉 차면 full 로 변경하는 코드는 아래와 같다.
- 문제는 아래 코드는 고양이 체력이 5일때 6대를 맞아야 full 이미지로 변경이 된다는 것
- 이 함수는 충돌시 함수이기 때문에, 그 다음 충돌이 일어나기 전까지는 else가 실행되지 않음
void OnTriggerEnter2D(Collider2D coll)
{
if (coll.gameObject.tag == "food")
{
if (energy < full)
{
energy += 1.0f;
Destroy(coll.gameObject);
gameObject.transform.Find("hungry/Canvas/front").transform.localScale = new Vector3(energy / full, 1.0f, 1.0f);
}
else
{
gameObject.transform.Find("hungry").gameObject.SetActive(false);
gameObject.transform.Find("full").gameObject.SetActive(true);
}
}
}
- 그런데 체력이 5가 되어서 사라지는 이펙트는 Update에서 처리하므로 배부른 표정 없이, 체력이 5되자마자 고양이가 집에간다
해결 방법
- 이미지를 Full 로 변경하는 명령을 Update로 보낸다
void Update()
{
if (energy < full)
{
transform.position += new Vector3(0f, -0.05f, 0f);
if (transform.position.y < -22f)
{
gameManager.GM.gameOver();
}
}
else
{
gameObject.transform.Find("hungry").gameObject.SetActive(false);
gameObject.transform.Find("full").gameObject.SetActive(true);
if ( transform.position.x > 0)
{
transform.position += new Vector3(0.05f, 0f, 0f);
}
else
{
transform.position += new Vector3(-0.05f, 0f, 0f);
}
Destroy(gameObject, 3f);
}
}
- 이제 고양이가 체력이 5되자마자 배부른 표정을 짓고 집에간다