Таким образом, игрок может двигаться в четырех направлениях - вперед, назад, вправо и влево.Но прямое направление должно быть от того, куда он поворачивает свой VR-контроллер.
Я попробовал приведенный ниже код, но когда я указываю контроллер вверх, игрок движется вверх.Я тоже попробовал someQuaternion.y
, но это не сработало, как ожидалось.Что мне делать?
Quaternion someQuaternion = OVRInput.GetLocalControllerRotation(OVRInput.Controller.RTrackedRemote);
Vector2 dir = GetDirection(OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad, OVRInput.Controller.RTrackedRemote));
if(dir == Vector2.right)
{
transform.Translate(someQuaternion * Vector3.right * currentSpeed * Time.deltaTime);
}
else if(dir == Vector2.left)
{
transform.Translate(someQuaternion * -Vector3.right * currentSpeed * Time.deltaTime);
}
else if (dir == Vector2.up)
{
transform.Translate(someQuaternion * Vector3.forward * currentSpeed * Time.deltaTime);
}
else if (dir == Vector2.down)
{
transform.Translate(someQuaternion * -Vector3.forward * currentSpeed * Time.deltaTime);
}
public Vector2 GetDirection(Vector2 input)
{
Vector2[] directions = new Vector2[] {
Vector2.up,
Vector2.right,
Vector2.down,
Vector2.left
};
Vector2 direction = Vector2.zero;
float max = Mathf.NegativeInfinity;
foreach (Vector2 vec in directions)
{
float dot = Vector2.Dot(vec, input.normalized);
if (dot > max)
{
direction = vec;
max = dot;
}
}
return direction;
}