Unity 3D에서 슬라이딩 볼을 롤링 볼로 수동으로 변경하려면 어떻게해야합니까?
나는 이것에 조금 익숙하므로 어떤 도움을 주시면 감사하겠습니다.
컨텍스트 : 시뮬레이션 된 VR 당구 게임을 만들고 가능한 한 사실적인 물리를 얻으려고 노력하고 있습니다. 실제 실험에서 계산 된 정확한 마찰 값으로 표면을 가로 질러 큐로 큐볼을 맞았습니다.
문제점 : 큐볼이 실제 세계에서 미끄러지는 것보다 오래 미끄러집니다. 현실적으로 속도가 초기 속도의 5/7 (~ 71 %)에 도달하면 공이 슬라이딩에서 롤링으로 전환됩니다. 그러나 Unity에서 전환은 초기 속도의 약 20-10 %에서 훨씬 나중에 발생합니다. (이것은 Unity가 접촉 영역이 아닌 접촉 지점으로 상호 작용의 물리학을 계산하는 방식 때문입니다)
질문 : 큐볼이 초기 속도 (71 % * 초기 속도)의 5/7을 잃을 때 슬라이딩 속도가 0으로 설정되고 큐볼이 각속도에서 계속 굴러 가도록 하드 코딩하고 싶습니다. 이론적으로 이것이 가능합니까? 아니면 속도 / 속도를 0으로 변경하면 즉시 공이 제자리에서 움직이지 못합니까? 그리고 어떻게해야합니까? 미리 감사드립니다.
답변
1 Kevin
나는 그것을 시도한 적이 없지만 가능해야 할 것처럼 들린다. 다음 코드를 통해 대부분의 정보를 얻을 수 있습니다. 그런 다음 원하는 효과를 얻기 위해 속도 및 각속도를 조정하는 방법을 실험을 통해 결정할 수 있습니다.
private Rigidbody body;
void Start() {
body = GetComponent<Rigidbody>();
}
void OnCollisionEnter(Collision collision) {
StartCoroutine(SlideThenRoll());
}
IEnumerator SlideThenRoll() {
yield return null; //wait a frame to make sure our velocity updates
float initialSpeed = body.velocity.magnitude;
float targetSpeed = .71 * initialSpeed;
yield return new WaitUntil(() => body.velocity.magnitude <= targetSpeed);
//you'll need to fill in this part
body.velocity = //??
body.angularVelocity = //??
}
```