(포스트를 날려 버려서 재작성..😥)
캐릭터가 특정 몬스터와 닿였을 때 지속적으로 데미지를 주기 위해 OnTriggerStay로 구현을 진행했다.
하지만 다음과 같이 캐릭터가 collider box 범위 내에 있음에도 불구하고 23번 이후에는 더 이상 함수가 호출되지 않는 모습을 보였다.
private void OnTriggerStay2D()
{
Debug.Log("test");
}

Rigidbody의 Sleeping Mode를 Never Sleep으로 변경해 해결할 수 있다.

게임 오브젝트가 휴식 상태일 때 CPU 리소스 절약을 위해 수면 모드에 들어가는 방법에 대한 정의
1) Never Sleep: 수면모드를 사용하지 않는 설정으로 CPU 리소스가 많이 사용되기 때문에 지양되는 방법이다.
2) Start Awake: 처음 시작할 때 오브젝트를 깨워놓는 방법이다.
3) Start Asleep: 처음에는 수면 상태이다가 충돌할 때 오브젝트를 깨우는 방법이다.
또는 코루틴을 사용해서 트리거 범위에 들어올 때 특정 액션 동작을 지속적으로 할 수 있도록 하고 Exit에서 꺼주는 식으로도 의도한 대로 동작하게 할 수 있다.
private void OnTriggerEnter2D(Collider2D other)
{
if (collisionStayCoroutine == null)
{
collisionStayCoroutine = StartCoroutine(AttackTargetInCollisionRegion());
}
}
private IEnumerator AttackTargetInCollisionRegion()
{
while (true)
{
// 실행할 내용 작성
yield return null;
}
}
private void OnTriggerExit2D(Collider2D other)
{
StopCoroutine(collisionStayCoroutine);
collisionStayCoroutine = null;
}
오브젝트가 충돌 범위 내에 들어오면 (Trigger Enter) Stay와 같이 동작하도록 하기 위해 코루틴을 이용해 원하는 액션을 실행시키고, 충돌 범위를 나가면 Stay의 수면 모드처럼 더 이상 확인을 하지 않도록 하고자 코루틴을 중지시킨다.
+) Rigidbody가 수면 모드에 대해 정확히 확인해야 코루틴을 사용해서 구현하는 것이 더 좋은지 확인할 수 있을 것 같다.. (아직 게임 오브젝트가 휴식 상태로 간다는 것에 대해 다 이해하지 못한 것 같다)
유니티 라이프 사이클을 살펴보면 FixedUpdate 부분에서 OnTrigger 관련 함수들이 확인되는 것을 확인할 수 있다.
https://docs.unity3d.com/ScriptReference/Rigidbody2D-sleepMode.html
https://docs.unity3d.com/Manual/rigidbody-physics-section.html