当我使用SteamVR 2.0在Unity上以编程方式在Vive Wand上触发触觉时,在Unity上遇到了奇怪的行为。
我设法记录了它,以使您更好地理解它:https://www.youtube.com/watch?v=wq4OJUFghNI
基本上,我所做的只是一个简单的射击游戏,当您扣动扳机时,它每秒会发射3枚子弹并触发触觉。问题是,如果您在触觉代码触发后立即释放触发器,听起来控制器触觉仍停留在原处并且您会听到烦人的声音。触发触觉会停止发出声音。
我已经尝试过使用Google,但由于没有找到任何东西,因此似乎没人体验过。我试图更改功能的频率,持续时间或强度,但是它什么都没有改变(持续时间越短,出现这种行为的机会就越大,但这不是解决方法)
ShootingBehaviour.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR;
namespace RG
{
namespace VR
{
public class ShootingBehaviour : MonoBehaviour
{
private bool _IsShooting = false;
private bool _GrabPinchPressed = false;
public GameObject BulletPrefab;
public SteamVR_Action_Vibration HapticAction;
public SteamVR_Action_Boolean GrabPinch;
public SteamVR_Input_Sources InputSource;
private void Start()
{
if (InputSource == SteamVR_Input_Sources.Any)
{
if (CompareTag("LeftController"))
InputSource = SteamVR_Input_Sources.LeftHand;
else if (CompareTag("RightController"))
InputSource = SteamVR_Input_Sources.RightHand;
else
Debug.LogError("Tag on the controller GameObject is incorrect, check again if 'LeftController' or 'RightController' has been assigned.");
}
}
private void Update()
{
if (_GrabPinchPressed)
{
Debug.Log("Trigger is currently pressed");
if (!_IsShooting && GetComponent<InteractableBehaviour>().CurrentlyEquipped)
{
HapticAction.Execute(0, 0.1f, 80, 150, InputSource);
StartCoroutine(_Shoot());
}
}
}
private void OnEnable()
{
if (GrabPinch != null)
GrabPinch.AddOnChangeListener(_OnTriggerPressedOrReleased, InputSource);
}
private void OnDisable()
{
if (GrabPinch != null)
GrabPinch.RemoveOnChangeListener(_OnTriggerPressedOrReleased, InputSource);
}
private void _OnTriggerPressedOrReleased(SteamVR_Action_In action_In)
{
if (GrabPinch.GetStateDown(InputSource))
_GrabPinchPressed = true;
else if (GrabPinch.GetStateUp(InputSource))
_GrabPinchPressed = false;
}
private IEnumerator _Shoot()
{
_IsShooting = true;
GameObject weapon = GetComponent<InteractableBehaviour>().CurrentlyEquipped;
GameObject bullet = Instantiate(BulletPrefab, weapon.transform.Find("BulletStartPos"));
bullet.transform.SetParent(null);
bullet.GetComponent<Rigidbody>().AddForce(bullet.transform.forward * 300);
yield return new WaitForSeconds(0.3f);
_IsShooting = false;
}
}
}
}
InteractableBehaviour
只是将武器存储在手中,表明那里并没有真正的帮助。
此处的HapticAction.Execute
正确地触发了触觉,但由于某些原因,看起来有些东西在有时引起了触觉的干扰。有人知道为什么要这么做吗?
答案 0 :(得分:0)
类似于Shoko84所述,振幅参数没有区别。 实际上,在调用HapticAction.Execute
时,这些参数似乎都没有任何区别。答案 1 :(得分:0)
我相信参数有奇怪的局限性。 持续时间:0至.79 频率是0到320 幅度是0到.25
如果您超过这些值中的任何一个,它们只是最大值。这就是为什么您看不到振幅0.2和1之间几乎没有差异(强度差异为.o5)的原因