2015-03-31 9 views
0

Я работаю над новой схемой управления для Oculus Rift, которая использует наклон гарнитуры для перемещения плеера. Смысл, вы наклоняете голову назад и вперед, чтобы идти вперед и назад, и из стороны в сторону, чтобы обстреливать. Камера привязана к катящейся сфере, так как это дало ей приятное ощущение ускорения и немного похоже на то, как летать. Пока что он работает достаточно хорошо, но только на глобальной оси. Поэтому, если вы повернете налево и наклоните голову вперед, вы все равно идите вперед в соответствии с исходной позицией (Которая, если вы смотрите влево, означает, что вы пойдете вправо). Я пытаюсь исправить это, чтобы вы могли идти вперед и стрейч относительно направления, с которым сталкивается камера, но не повезло. У меня есть сильное чувство, что это что-то смехотворно просто, но я просто не могу найти его. Любая помощь очень ценится!Перемещение сферы относительно поворота камеры

Вот что я имею на катящейся сфере прямо сейчас:

public GameObject RightCamera; 


void FixedUpdate(){ 
    float angleX = RightCamera.transform.eulerAngles.x; 
    angleX = (angleX > 180) ? angleX - 360 : angleX; 

    float angleZ = RightCamera.transform.eulerAngles.z; 
    angleZ = (angleZ > 180) ? angleZ - 360 : angleZ; 

    Vector3 movement = new Vector3 (-angleZ, 0, angleX); 

    GetComponent<Rigidbody>().AddForce (movement); 

} 
+0

Я предполагаю, что вы просто применяете это движение непосредственно к каким-то игрокам? вам нужно настроить вектор вперед вместо этого. – Sayse

+0

Я применяю его к катящейся сфере, потому что мне понравилось, как он катится. Это означает, что я не могу использовать локальное вращение сферы, потому что, когда шары идут, он катится. – syverlauritz

ответ

0

Существует простой способ сделать это. Учитывая ориентацию, выраженную как кватернион (или матрица 3x3), составляют ее с единичным вектором оси Y.

В результате значения X и Z vec3 являются вашими силами. Не нужно привлекать углы Эйлера, которые почти наверняка начнут причинять вам боль, поскольку ваш подход под углом 90 градусов от вертикали.

+0

Да, я понял, что 90-градусный угол эффективно отменит или начнет отменять предполагаемую силу. Но, чтобы быть полностью честным, я только начал использовать C# неделю назад, и ваш ответ прошел мой уровень знаний. У меня есть немного опыта программирования для Arduino, но это все. Я мог бы заглянуть в некоторые из ваших ключевых слов позже, но пока я немного втиснусь и нуждаюсь в том, чтобы согласиться на «достаточно хорошее». Я действительно ценю, что вы нашли время. Благодаря! – syverlauritz

0

Наконец решил его! Я использовал

GetComponent<Rigidbody>().AddForce (RightCamera.transform.forward * angleX); 
    GetComponent<Rigidbody>().AddForce (-RightCamera.transform.right * angleZ); 

И теперь шар поворачивается относительно камеры.