Я столкнулся со странным поведением в Unity, когда я программно запускаю тактику на своей Vive Wand в Unity со SteamVR 2.0.
Мне удалось записать это, чтобы вы лучше поняли: 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
здесь корректно вызывает тактильные ощущения, но похоже, что что-то сбивает с толку тактильные иногда по некоторым причинам. У кого-то есть идея, почему он это делает?