몹이 죽을때 돈을 주는 함수인데
몹이 맞으면 -> 체력이 0아래인가? -> 돈을 주고 -> 몹 비활성화 (오브젝트풀)
이런 순서인데 코루틴 없이 모두 한 업데이트에서 일어나고있습니다.
근데 이상하게 돈을 너무 많이줘서 확인을 해보니 한 프레임에 동시에 여러명한테 맞으면
저 순서가 모두 중복으로 각각 실행되서 돈이 복사가 되는것이었습니다.
급한대로 bool 변수를 넣어서 이미 돈을 준놈은 돈을 안주게 하니 이건 해결되었는데
정확한 원인이 뭔지 볼려고 체력을 확인하기 전에 이미 오브젝트가 비활성화면(activeSelf) break를 걸었는데
실행해보니 A와 B가 동시에 C를 때려눕히면 A B둘 다 C는 오브젝트는 활성화 상태라고 말합니다.
그럼 설마 A B 두개의 Update코드가 실행될때 A실행하다가 갑자기 B실행 왔따리~갔따리~ 하는건가요??
아니면 Update 다 순서대로 실행하고 SetActive는 좀 나중 순서에 실행되는건가요?
지금 방식대로면 오브젝트풀에 중복 오브젝트 오지게 추가되고있었겠네요..?
Queue 자료형에 같은 주소를 가진 GameObject가 두번 들어가면 어떻게되는걸까요..
유니티 문서에 SetActive가 특별히 다른 순서라는 말은 못찾겠는데.. 그냥 이 모든건 망상인걸까요?
저 정말 너무 무섭고 손이 벌벌 떨리고 있습니다.
이건 중요한건 아니지만 해당 코드입니ㄷㅏ.
hit이랑 dead 처리를 어떻게 했는진 모르겟는데 destroy는 Update 함수들이 모두 끝난뒤에 처리되기때문에 destroy만 하는게 아니라 GameObject를 끄던가 해서 활성화 체크를 해야될것임
그리고 소스코드에 SetActive가 안보이는데
SetActive자체는 Update안의 다른 코드랑 똑같은 순서로 작동되는거군요.. 모든건 제 망상이고... 좀 더 조사해보고 오겠습니다.
저 과정이 투사체라는 오브젝트, 체력 오브젝트, 오브젝트풀에 나뉘어서 진행되서 코드를 다 올릴수가 없었슴다..
함수를 어디다 넣어둔진 모르겠는데 몬스터 안에 코드를 (몹이 맞으면 -> 체력이 0아래인가? -> 돈을 주고 -> )이런판정을 판단하게하고 마지막에 죽었다는표시로 Die = true 이런식으로주고 몹들을 관리하는 매니저로 Die = true인 몹들은 비활성화 시키는방식으로하면 중복문제가 어느정도 해결되지않을까
Die= false일때만 killme 함수타게 막아놓고
그렇군요ㅛ. 믿을수있는 bool 하나가 있는게 편하군요