Как ограничить Z вращение объекта - PullRequest
0 голосов
/ 08 апреля 2020

Я занимаюсь разработкой 2D-игры, и у меня есть объект, на который можно прыгнуть. в Hardbody2D я замораживаю x и y, но не z, и ограничиваю z в ​​скрипте следующим образом:

private void FixedUpdate() { 
 Vector3 euler = transform.eulerAngles; 
 if (euler.z > 180) euler.z = euler.z - 360; 
 { 
   euler.z = Mathf.Clamp(euler.z, -35, 35); 
   transform.eulerAngles = euler; 
  } 
}

это может ограничить z, когда игрок прыгает на него, но y и x меняются. он вылетает за пределы экрана. Знаете ли вы, почему он будет перемещаться по x и y, пока они выбраны, замерзнуть на инспекторе. Любые иды?

1 Ответ

0 голосов
/ 08 апреля 2020

Раньше я был слепым.
Казалось бы, проблема в структуре вашего кода l ie. Посмотрите на утверждение if.

 if (euler.z > 180) euler.z = euler.z - 360; 
 { 
   euler.z = Mathf.Clamp(euler.z, -35, 35); 
   transform.eulerAngles = euler; 
 } 

Это не то, что вы думаете. Давайте перепишем с другим форматом, но с тем же точным кодом:

 if (euler.z > 180)
   euler.z = euler.z - 360; 

 { 
   euler.z = Mathf.Clamp(euler.z, -35, 35); 
   transform.eulerAngles = euler; 
 } 

Здесь на самом деле происходит то, что из-за того, что строка после вашего оператора if не находится в фигурных скобках, этот код интерпретируется как:

 if (euler.z > 180) {
   euler.z = euler.z - 360;
 }
 euler.z = Mathf.Clamp(euler.z, -35, 35); 
 transform.eulerAngles = euler;  

Технически, последние две строки находятся в другой области видимости, но это не так уж важно.
Попробуйте переформатировать ваш код с предполагаемой структурой и, надеюсь, что это должно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...