Mathf.Clamp сбрасывает мой eulerangle в minValue в Unity 3D - PullRequest
0 голосов
/ 29 октября 2018

Mathf.Clamp сбрасывает мой eulerangle в minValue, когда он достигает maxValue, вместо того, чтобы ограничивать его в maxValue. Я пробовал это:

            rotateX = Input.GetAxis("Mouse X") * senseX;
        player.transform.Rotate(player.up, Mathf.Deg2Rad * rotateX, Space.World);

        playerXRotation = player.eulerAngles;

        while (playerXRotation.y > 180f)
            playerXRotation.y -= 360f;

        Debug.Log("Y Rotation: " + playerXRotation.y);
        playerXRotation.y = Mathf.Clamp(playerXRotation.y, lowLimitY, highLimitY);
        player.transform.eulerAngles = playerXRotation;

И это:

         rotate = Input.GetAxis("Mouse X") * senseX;
         rotation = player.transform.eulerAngles;
         rotation.y += rotate * RateOfRotate;

         while (rotation.y > 180)
         {
             rotation.y -= 360;
         }
         rotation.y = Mathf.Clamp(rotation.y, lowLimitY, highLimitY);
         player.transform.eulerAngles = rotation;

Здесь мои lowLimitY = 0 и highLimitY = 180 в обоих случаях; Я застрял в этом и понятия не имею, как обойти это. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Поскольку вращения - это кватернионы

И они преобразуются в углы Эйлера с диапазоном [0-360), поэтому while (rotation.y > 180) никогда не будет работать.

Вам необходимо отслеживать значение поворота отдельно, фиксировать до желаемых значений, , затем применять его к вращению объекта.

rotation = player.transform.eulerAngles;
float rotationY = rotation.y + rotate * RateOfRotate;
rotationY = Mathf.Clamp(rotationY, lowLimitY, highLimitY);
rotation.y = rotationY;
player.transform.eulerAngles = rotation;
0 голосов
/ 29 октября 2018

Если ваш

lowLimit = 0 и highLimit = 180, и вы запускаете:

while (rotation.y > 180)
{
  rotation.y -= 360; 
}

Если в случае вашего вращения установлено значение maxValue (180), то значение direction.y будет равно -180 (180 - 360 = -180).

Тогда ваш зажим Mathf.Clamp(-180, 0, 180) // 0

Если вы пытаетесь удерживать вращение y в этом диапазоне, то удаление while должно помочь. Если вы собираетесь добиться другого эффекта, нам понадобится дополнительная информация.

...