0cb3d92be4c631a960f1d1bc10f11a391998f77ce976f5c4a3c5


(임시로 막 넣은거니 마젠타는 무시하자)


이번에는 ECS의 충돌 시스템을 구현했다.

Physics 샘플 예제를 뜯어보면서, 열심히 구현해보았다.


플레이어가 쏘는 탄막은 파워, 관통 값을 고려해야 한다.

적과 충돌하는것까진 좋은데.. 매 프레임마다 충돌 판정을 하기 때문에,

적과 닿는 순간, 적의 체력이 순식간에 깎여나가버린다.

이를 위해 다이나믹 버퍼를 추가했다.


public struct PenetratedBuffer : IBufferElementData {public Entity alreadyEntity; }



24b0d121e09c28a8699fe8b115ef046c60f8294b99


각 탄막 관통수는, 각 탄막과 마주쳤던 엔티티의 수만큼과 비교하여 삭제할지를 고려하게 하였다.

여기서 카운트가 아닌 이유는.. 해당 엔티티와 충돌 했었는지를 모르기 때문에 엔티티 버퍼로 만들었다.

Update Attribute에서 볼 수 있듯이

적의 체력 판정을 한 후에 업데이트 할 수 있게 되어서 로직 꼬임을 방지했다.



24b0d121e09c28a8699fe8b115ef046b6b699234


해당 코드는 적의 체력 판정 시스템이다.

정확한 동작원리를 몰라 난해하였던 룩업 컴포넌트들...

원래 샘플 예제는 struct에 꽁꽁 싸매서 TriggerJob 이벤트로 보내고 있었는데

값 처리를 해야 하는 컴포넌트가 따로 있어서, 하나씩 넣어주는 방식으로 수정했다.





24b0d121e09c28a8699fe8b115ef046547aefa38


오늘의 주인공은, 바로 이 ITriggerEventsJob이다.

엔티티 충돌 처리는, 크로스 체크하여 적과 플레이어 탄막을 구분하고

구분한 엔티티들을 룩업 안에서 찾아서 처리하는 방식이다.

샘플 예제는 아주 지옥같이 만들어져있으니, 나처럼 대가리 깨진 사람이 있었을 것 같다..


적의 대미지 처리, 탄막의 관통 처리는 해당 Job에서 하는게 아니라

다른 시스템에서 처리하도록 해야한다. Dependancy 문제 때문에.. 죽었다 깨도 하나의 잡 안에서 해결 할 문제가 아니라는 것을 꺠달았다.


플레이어 충돌 처리도 비슷한 로직으로 하면 될 것 같은데..

이것저것 UI도 고려해서 짜야할 것 같다.


일지 꿋