我有一個簡單的操縱桿移動腳本。我用 Mathf.Clamp 限制了它在 x 和 z 軸上的移動。我想要實作的是在球體半徑內使用該函式。
如果游戲物件位置在半徑之外,我需要游戲物件移動限制其移動。
void UpdateMoveJoystick()
{
horizontale = moveJoystick.Horizontal;
float ver = moveJoystick.Vertical;
Vector2 convertedXY = ConvertWithCamera(Camera.main.transform.position, horizontale, ver);
Vector3 direction = new Vector3(convertedXY.x, 0, convertedXY.y).normalized;
transform.Translate(direction * 0.02f * speed, Space.World);
Quaternion targetRotation = Quaternion.LookRotation(direction);
RestrictMovement();
}
void RestrictMovement()
{
var position1 = transformPos.transform.position.x;
var position2 = transformPos.transform.position.x;
var position3 = transformPos.transform.position.z;
var position4 = transformPos.transform.position.z;
float xMovementClamp = Mathf.Clamp(transform.position.x, position1 = leftBoundry, position2 = rightBoundry);
float zMovementClamp = Mathf.Clamp(transform.position.z, position3 = DownBoundry, position4 = UpBoundry);
transform.position = new Vector3(xMovementClamp, transform.position.y, zMovementClamp);
}
無論如何感謝您的幫助:)
uj5u.com熱心網友回復:
您正在尋找的功能是Vector2.ClampMagnitude. 此方法采用 aVector2并允許您確保magnitude(或向量長度)不超過所需長度(或圓的半徑)。
考慮到這一點,RestrictMovement您的代碼中的方法將如下所示:
public float boundryRadius = 20.0f;
void RestrictMovement()
{
var positionXY = new Vector2(transform.position.x, transform.position.y);
positionXY = Vector2.ClampMagnitude(positionXY, boundryRadius);
transform.position = new Vector3(positionXY.x, positionXY.y, transform.position.z);
}
這會將 夾GameObject在 的boundryRadius指定周圍世界位置0, 0, 0。額外的數學運算可用于更改圓形邊界的中心。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/395715.html
下一篇:如何通過腳本更改音頻?統一
