Система движения не работает, когда работает телепорт, телепорт не работает, когда работает движение
Итак, у меня есть префаб игрока (из steamVR), и я прикрепил к нему две руки, вместо старых рук, одна из рук - пистолет и работает отлично, как и ожидалось, другая рука полностью расстреляна, и я провел последние 2 часа отлаживание безрезультатно. У меня есть сценарий, который использует направление игрока контроллера и направление движения большого пальца, он прикреплен к левому контроллеру и является тем, что ломает телепорт, когда он работает.
Я могу заставить движение работать идеально, жертвуя своей системой телепортации (Телепорт работает, за исключением высоты, не могу телепортироваться в места выше, где я сейчас нахожусь, просто ставит меня ниже его в корреляции. Стоит также отметить, что я использую телепорт steamvr сборный тоже.
Вот как это работает, когда контроллер не работает:
Префаб игрока: https://gyazo.com/0d52edf219b4a16c1f842818dbafc89a
Рука: https://gyazo.com/5089b750520dcf6f6b8fe5bd899ef1cb
Вот настройка, когда телепорт не работает должным образом. Игрок Prefab: (То же, что и раньше). Рука: https://gyazo.com/5cc125244e3ae3911ae14f23d2e187fd
А вот код для движения:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Vrtouchmove : MonoBehaviour {
[SerializeField]
private Transform camera;
private Valve.VR.EVRButtonId touchpad =
Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad;
private SteamVR_Controller.Device controller { get { return
SteamVR_Controller.Input((int)trackedObj.index); } }
private SteamVR_TrackedObject trackedObj;
private Vector2 axis = Vector2.zero;
void Start()
{
trackedObj = GetComponent <SteamVR_TrackedObject>();
}
void Update ()
{
if (controller == null)
{
Debug.Log("Controller not Set");
return;
}
var device = SteamVR_Controller.Input((int)trackedObj.index);
if (controller.GetTouch(touchpad))
{
axis = device.GetAxis(Valve.VR.EVRButtonId.k_EButton_Axis0);
if (camera != null)
{
camera.position += (transform.right * axis.x + transform.forward * axis.y)
* Time.deltaTime;
camera.position = new Vector3(camera.position.x, 0, camera.position.z);
}
}
}
}
Я озадачен тем, почему это не работает, любая помощь приветствуется.
1 ответ
В вашем Update
Метод, если вход "сенсорная панель" и камера не нулевая, тогда вы устанавливаете значение y камеры на 0.
camera.position = new Vector3(camera.position.x, 0, camera.position.z);