Я столкнулся со странным поведением в 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
здесь корректно запускает тактильные ощущения, но похоже, что по каким-то причинам иногда что-то дает сбои. У кого-нибудь есть идея, почему это делается?
_Shoot()
сопрограмме? / Где установлен_IsShooting
? Также обратите внимание, что вызовGetComponent<InteractableBehaviour>()
довольно неэффективен, и вам лучше сделать это, например. вAwake
и сохранить результат на потом - person derHugo   schedule 04.01.2019HapticAction
в SteamVr sdk, поэтому, если это то, что вы реализовали... Вы также добавляете это, пожалуйста? - person derHugo   schedule 04.01.2019"amplitude">How intense the haptic action should be (0 - 1)
вы вызываете его с помощью150
... ? - person derHugo   schedule 04.01.2019ShootingBehaviour.cs
, чтобы убедиться, что ничего не пропало, но я не думаю, что это поможет, поскольку режим стрельбы работает, а не тактильный. Не буду ссылаться наInteractableBehaviour.cs
примерно по тем же причинам, о которых я упоминал.HapticAction.Execute
не является моей функцией и, кстати, является частью SteamVR 2.0 (РЕДАКТИРОВАТЬ: упс, да, потому что это былSteamVR_Action_Vibration
) - person Shoko84   schedule 04.01.2019amplitude
, и он ничего не меняет (пробовал 1, 0.2f и 0). Это немного странно, потому что я не вижу никакой разницы между 1 и 0,2f. 0 не активирует тактильные ощущения, что нормально - person Shoko84   schedule 04.01.2019