DynamicBone은 부착한 순서에 따라 거동이 바뀔 수 있음

2463 단어 VRChatUnity
↓의 기사로 검증했습니다만, 같은 클래스의 컴퍼넌트의 실행 순서는 어태치한 순서의 역순이 됩니다.
【Unity】 같은 클래스의 컴퍼넌트의 실행 순서는 첨부한 순서의 역순으로 되는 설

그만큼 들으면, 그러니까 무엇이라도 느껴집니다만, 실은 이것이 DynamicBone의 거동에 영향을 주는 경우가 있습니다.
다음과 같은 경우입니다.

DynamicBone에서 흔들리는 객체에 DynamicBoneCollider를 연결



DynamicBone "A"와 "B"가 있고, "A"에 DynamicBoneCollider "C"가 부착되어 있고, "B"는 "C"와 충돌하도록 설정되어 있습니다.
그리고 "A"에 어떠한 힘이 가해져 오른쪽으로 흔들린 경우를 생각해 봅니다.



"A"가 먼저 실행되면



먼저 "A"가 먼저 실행되고 오른쪽으로 흔들립니다.


그런 다음 "B"가 콜라이더에 밀려 오른쪽으로 이동합니다.

이것은 예상대로의 움직임이군요.

"B"가 먼저 실행되면



문제는 여기에서입니다.

먼저 "B"가 먼저 실행됩니다. 아무런 힘도 가해지지 않았기 때문에 "B"는 움직이지 않습니다.


그런 다음 "A"가 오른쪽으로 흔들립니다.

이때 이미 "B"의 계산이 끝나기 때문에 "B"는 움직이지 않습니다.
DynamicBone은 매 프레임 DynamicBone의 영향을 받지 않는 상태에서 계산하므로, 이 경우에는 "B"가 "A"의 움직임에 영향을 받고 움직이지 않습니다.
DynamicBone의 자식 개체에 다른 DynamicBone을 연결하는 경우에도 이러한 동작이 발생합니다.

이것으로 곤란하네요.

대책



같은 클래스의 컴퍼넌트는 마지막에 첨부한 것부터 순서대로 실행되므로, 컴퍼넌트를 카피하고 나서 삭제해 다시 붙이는 것으로 실행 순서를 바꿀 수가 있습니다.
먼저 실행하고 싶은 컴퍼넌트를 다시 접속해 봅시다.

이 거동의 원인을 모르고 2시간 정도 돌았으므로, 이 정보가 누군가의 도움이 되면 다행입니다…

좋은 웹페이지 즐겨찾기