2014-09-09 8 views
0

Прежде всего, я сообщу вам, что я новичок в Unity и в кодировке в целом (я знаю очень простой код javascript). Мой вопрос: как я могу поворачивать 2D-объект (prefab) на 120 градусов на определенной оси (в моем случае ось z, так что он вращается, как будто вы смотрите на рулевое колесо) каждый раз, когда я касаюсь экрана. Сейчас у меня есть это так:Unity2D - Как повернуть 2D-объект при касании/нажмите/нажмите

function TouchOnScreen() 
{ 
    if (Input.touchCount > 0) 
    { 
     var touch = Input.touches[0]; 
     if (touch.position.x < Screen.width/2) 
     { 
      transform.rotation = Quaternion.Euler(0,0,120); 
      Debug.Log("RotateRight"); 
     } 
     else if (touch.position.x > Screen.width/2) 
     { 
      transform.rotation = Quaternion.Euler(0,0,-120); 
      Debug.Log("RotateLeft"); 
     } 
    } 
} 

Этот код поворачивает объект всякий раз, когда я нажимаю на определенной части экрана, но не так, как я хочу его. Я хочу, чтобы он вращался, поэтому вы видите объект, вращающийся от A до B, но не (как сейчас) в одном кадре от A до B. Кроме того, этот код позволяет мне только вращать один раз в каждом направлении.

Как это сделать, когда я нажимаю на определенную сторону экрана, что он добавляет или вычитает из/в предыдущий вращающийся угол, поэтому я могу продолжать вращаться.

ПРИМЕЧАНИЕ: Пожалуйста, используйте javascript, и если вы знаете более простой код, дайте мне знать!

Помощь приветствуется, спасибо заранее!

+0

то, что вы здесь делаете устанавливает вращение на преобразование ... то, что я рекомендовал бы исследуя это вместо установки 'transform.rotation ', установив« TARGET »и в вашей логической функции записи обновлений, чтобы анимировать объекты« transform.rotation »по отношению к этой цели. – Joe

+0

Спасибо, что ответили! Но может быть, вы могли бы дать мне пример сценария, хотя я понимаю, что вы мне объясняете, я все еще слишком неквалифицирован, чтобы изменить ваше объяснение на сценарий :( – Bartvb98

ответ

3

Вместо

 transform.rotation = Quaternion.Euler(0,0,-120); 

Вы используете:

 var lSpeed = 10.0f; // Set this to a value you like 
     transform.rotation = Quaterion.Lerp (transform.rotation, Quaternion.Euler(0,0,-120), Time.deltaTime*lSpeed); 
+0

Большое спасибо! Это устраняет проблему вращения от точки A до B в одном кадре, но теперь следующая проблема заключается в том, что я могу только поворачиваться влево или вправо только ** одно ** время. Например, если я касаюсь левой части экрана , он вращается влево (так, как я его хочу), но я не могу повернуть его снова влево. Это тот же случай для касания правой стороны. – Bartvb98

+0

Вы не можете вращаться, потому что вы вращаетесь до фиксированного угла (как вы хотели): 'Quaternion.Euler (0,0, -120)', если вы хотите повернуть дальше, просто используйте 'Quaternion.Euler (0,0, -240)', 'Quaternion.Euler (0,0 , -360) '... и т. Д. Возможно, теперь вы можете найти свое собственное решение – Rudolfwm

+0

Теперь я вижу проблему @Rudolfwm. Спасибо, что ответили, я начну искать aw ay добавлять/вычитать градусы каждый раз, когда соответствующая сторона нажата. – Bartvb98