0cb3d92be4c631a960f1d1bc10f11a391998f773e975f7cbaa


원래는 오늘 Trigger System을 만들려고 했어오

슈팅 게임하면 피탄 점과 아이템을 먹는 영역을 같이 두는 경우가 많은데




24b0d121e09c28a8699fe8b115ef046c68f12d46


대충 위와 같은 느낌으로!

작은 피탄 점을 가진 Trigger 영역과, 아이템을 먹을 수 있는 Trigger 영역이 있어야 한당

기존에는 어떻게 만들었냐?




24b0d121e09c28a8699fe8b115ef04699639f0ba

24b0d121e09c28a8699fe8b115ef0468e0aee2ba


위처럼 간단하게 콜라이더가 있는 자식 오브젝트를 붙이기만 하면 해결!!


이라고 생각했으나...


ECS에서는 이게 안된다.


ECS도 물론 부모-자식 계층 시스템이 있는데,

Physics 관련 오브젝트가 붙으면, 계층이 깨져버리는 상황이 발생한다


캐릭터는 움직여도, 피탄 점에 해당하는 영역은 꼼짝도 하지 않는 상황..

그냥 간단하게 부모를 따라가는 System을 만들어야 하나 싶었는데

매번 업데이트해야 하는 점이 마음에 안들었다.



24b0d121e09c28a8699fe8b115ef046c64f82c49



그러다가 Authoring 컴포넌트 중에 Linked Entity Group 이라는 컴포넌트가 존재하는걸 발견하였다.

해당 컴포넌트는 버퍼 형태로 자식들과 연결 되는 방식으로 제공되는 컴포넌트인데

위의 문제가 발생하여 서로 찢어져도 연결은 그대로 되어있다는 점을 발견하였다.



24b0d121e09c28a8699fe8b115ef046543acf53b


그리하여! 플레이어 생성 코드를 다음처럼 수정하였다.

Linked Entity Group 내에서 자식들을 찾아서, 강제로 부모-자식 관계로 만들어주었다.

근데.. 동작은 문제 없는데 계속 Structual Change 에러를 내뱉는거 때문에 스트레스를 엄청 받았다.


이거는.. 공부하고나서 기억속에서 완전히 잊고있던건데

Dynamic Buffer를 사용할 때, 내부를 조정하면 SystemState 의 Dependancy가 깨진다는 점이다.


해결법은 간단히 버퍼를 다시 초기화 시키는 거다.

linkedEntityGroup = state.EntityManager.GetBuffer<LinkedEntityGroup>(prefab);

한줄로 해당 문제까지 해결하였당


이 문제는 커맨드 버퍼로도 해결할 수 없어서 골치아팠는데..

그래도 해결 되었으니 만족



24b0d121e09c28a8699fe8b115ef046c62f22b48


정 상 화 



24b0d121e09c28a8699fe8b115ef046ecf48caf2


덤으로, 슬로우 모드에서만 피탄 점이 보일 수 있게

간단한 쉐이더를 추가했다.


일지 끝 

다음엔 꼭 트리거 시스템을 만들거다!