因此,我有一个玩家预制件(来自steamVR),并且ive连接了两只手,代替了旧手,其中一只手是枪支,可以按预期工作,另一只手则完全射击,我我花了最后2个小时的调试时间,但无济于事。我有一个脚本,该脚本使用控制器的播放器方向和指尖的方向移动,该脚本连接到左侧控制器,并且在工作时会破坏传送。
我可以使运动完美地进行,以牺牲我的传送系统(传送工作,除了高度,不能传送到我当前所在的位置以外,只是让我处于其下方。我还应该注意也使用Steamvr的瞬移预制件。
当控制器不工作时,这是工作的设置:
玩家预制:https://gyazo.com/0d52edf219b4a16c1f842818dbafc89a
手:https://gyazo.com/5089b750520dcf6f6b8fe5bd899ef1cb
这是传送无法正常工作时的设置 播放器预制:(与以前相同) 手: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);
}
}
}
}
我为为什么它不起作用而感到困惑,感谢您的帮助。
答案 0 :(得分:0)
在您的Update
方法中,如果输入为“ touchpad”并且相机不为空,则将相机的y值设置为0。
camera.position = new Vector3(camera.position.x, 0, camera.position.z);