0

所以我有一个播放器预制件(来自 steamVR),并且我将两只手连接到它上面,代替旧手,其中一只手是枪,按预期完美工作,另一只手完全被击中,我已经花了最后 2 小时调试无济于事。我有一个脚本,它使用控制器的玩家方向和拇指杆移动的方向,它连接到左侧控制器,并且在它工作时会破坏传送。

我可以让运动完美地工作,牺牲我的传送系统(传送工作,除了高度,不能传送到我目前所在的地方,只是把我放在它下面。同样值得注意的是,我使用的是 steamvr 的传送也是预制的。

当控制器不工作时,这是它的工作设置:

播放器预制:https ://gyazo.com/0d52edf219b4a16c1f842818dbafc89a

手:https ://gyazo.com/5089b750520dcf6f6b8fe5bd899ef1cb

这是传送无法正常工作时的设置 Player 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);
        }
    }
    }

 }

我很困惑为什么它不起作用,感谢任何帮助。

4

1 回答 1

0

在您的Update方法中,如果输入是“触摸板”并且相机不为空,那么您将相机的 y 值设置为 0。

camera.position = new Vector3(camera.position.x, 0, camera.position.z);
于 2018-12-14T15:23:11.317 回答