내 게임 장면에 큐브 (플레이어)가 있습니다. 큐브의 움직임을 제한하기 위해 C# 스크립트를 작성하여 화면을 벗어나지 않도록했습니다.Unity의 Mathf.clamp() 함수
는 아래 x_min
가 x_max
가 z_min
가 z_max
-3, 3, -2, 8은 각각 단일 관리자를 통해 입력된다의 스크립트
private void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.velocity = movement * speed;
rb.position = new Vector3(
Mathf.Clamp (rb.position.x, x_min, x_max),
0.5f,
Mathf.Clamp(rb.position.z, z_min, z_max)
);
}
값으로부터 제 FixedUpdate()
방법이다.
문제
스크립트는 잘 작동하지만 (내가 왼쪽 화살표 버튼을 누르면 계속하는 경우) 내 플레이어 (큐브)는 부정적인 X-AXIS
에서 0.1 단위 이상이다 부정적인 X-AXIS
에서 -3.1 대까지 이동할 수 있습니다 (이 동작은 다른 축에도 마찬가지입니다). 버튼을 누르지 않으면 분명히 -3.1을 -3으로 고정시킵니다.
- 왜 이런 일이 무엇입니까? 왜 그것이 (
Mathf.Clamp()
) 큐브를 처음 -3 단위로 제한하지 않습니까? - 추가 0.1 단위가 필요한 이유는 무엇입니까?
- 그리고 왜이 값은 0.1 단위입니까? 왜 그다지 많지 않습니까?
내가 틀릴 수도 있지만, 나는 당신이 속도를 설정하고 있기 때문에 생각하고 위치를 설정 :
이 문제를 해결하기 위해, 당신은 당신의 경계 외부 갈 수있는 큐브를 방지하기 위해이 코드를 사용할 수 있습니다 , 다음 프레임 이전에 다시 추측하겠습니다. 화합은 객체의 속도를 사용하여 다음 위치를 계산합니다. 그것은 그러한 입장에 서게된다. 위치가 경계를 벗어나는 경우 속도를 0으로 재설정해야한다고 생각합니다. – Alox
@Alox 당신은 답으로 써야합니다. 나는 그것이 너무 문제가 될 것 같아요.Rigidbody 구성 요소를 완전히 제거하거나 'Rigidbody.MovePosition' 기능을 사용하는 것 이외의 다른 문제를 해결할 수 있다고 생각지 않습니다. – Programmer
그렇다면 왜 항상 0.1 단위입니까? – rayan