본문 바로가기

유니티/버그일지7

[Unity] Collider의 Trigger 관련 버그 오브젝트 구조 루트 오브젝트( 여기에 처리관련 클래스 부착 ) └ 스프라이트 └ 트리거를 위한 collider 이런 구조에서 클래스 안에 OnTriggerEnter2D, OnTriggerExit2D 등 트리거 관련 이벤트함수를 열심히 작성해도 동작도 안되고 중단점도 안들어오고 도대체 뭐가 문제지? 하고 있었다. Rigidbody도 정확히 있었다. 문제는 collider가 달려있는 오브젝트에 위에 적은 충돌관련 함수들이 동작하는데 루트 오브젝트에는 collider가 없으니 당연히 동작을 할리가 없다. 해결방안 1. collider가 달려있는 오브젝트에 별도의 클래스를 추가해 루트 클래스 함수를 호출 2. 루트 오브젝트로 collider 옮기기 1은 더 번거롭고 보기도 안좋아서 2번으로 해결. 2020. 5. 18.
[Unity] OnDestroy에 처리할 내용은 다른 함수에 몬스터 오브젝트를 게임 내에서 제거하면(Destroy함수) 일련의 처리가 필요해서 OnDestroy 안에 코드를 작성했는데 이미 없어진 객체에 액세스 또는 참조하는 에러를 경험했다. 또 에디터의 PlayMode가 종료될 때 역시 Scene이 닫히면서 OnDestroy가 호출되는데, 씬 내에서 오브젝트가 제거되는 순서 역시 정해져있지 않기 때문에 에디터 내에서도 에러를 볼 수 있었다. 후자의 경우 오브젝트들이 제거되는 순서를 따로 명시해주는 걸로 해결할 수 있다. 전자의 경우 OnDestroy 안에 처리 내용을 작성하지 않고, 별도의 함수를 만들어 Destroy함수를 호출하기 전에 일련의 처리를 하고 Destroy를 호출했다. //캐릭터를 죽인다. void Kill() { //처리할 내용.... Destr.. 2020. 5. 18.
[C#][Unity]List에서 원소 제거시 주의할 점 특정 조건에 맞는 LIst 안의 원소를 제거할 때, 별 생각없이 이렇게 할 때가 있다. for(int i = 0; i = 0; i--) { if(조건이 참이면) myList.Remove(myList[i]); } 거꾸로 순회하면서 제거하면 안전하게 작업을 수행할 수 있다. 2020. 4. 7.
Trigger가 발동되지 않는 경우 1. Rigidbody가 어느 한쪽에라도 있어야 한다. 언젠지 모르겠는데 삭제해버려서 안되는데 이유도 모르고 있었다. 2. 게임 시작시 두개의 collider가 겹쳐있는 경우 2020. 3. 27.