Система движения не работает, когда работает телепорт, телепорт не работает, когда работает движение

Итак, у меня есть префаб игрока (из 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);
Другие вопросы по тегам