我正在创建一个vr项目,我在一个场景中有一个简单的多维数据集,上面有一个盒子碰撞器,并选中了触发器,现在我想要的是,当我的vr手进入该多维数据集的触发器时,我的vr的抓取动画应该玩一下手,但是当我将手插入多维数据集的触发器中时,什么也没发生,则出于测试目的,我调试了一条日志,记录了它的检测与否的关系,这很好,它可以检测到何时输入了我的手以及何时离开但动画是我的代码不在这里玩
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
公共类VRHandsController:MonoBehaviour {
public VRTK.VRTK_ControllerEvents vrcontroller;
public VRTK.VRTK_InteractGrab vrtkgrab;
Animator anim;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
//
anim.SetBool("indicate", false);
anim.SetBool("grab", false);
anim.SetBool("idle", true);
//anim.SetBool("isGrabbing", false);
}
// Update is called once per frame
void Update()
{
if (vrcontroller.touchpadPressed)
{
anim.SetBool("indicate", true);
anim.SetBool("grab", false);
anim.SetBool("idle", false);
//anim.SetBool("isGrabbing", true);
}
else if (vrtkgrab.IsGrabButtonPressed())
{
anim.SetBool("indicate", false);
anim.SetBool("grab", true);
anim.SetBool("idle", false);
}
else if (vrcontroller.triggerClicked)
{
anim.SetBool("indicate", true);
anim.SetBool("grab", false);
anim.SetBool("idle", false);
}
else
{
anim.SetBool("indicate", false);
anim.SetBool("grab", false);
anim.SetBool("idle", true);
//a///nim.SetBool("isGrabbing", false);
}
}
private void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag == "object")
{
anim.SetBool("indicate", false);
anim.SetBool("grab", true);
anim.SetBool("idle", false);
Debug.Log("colliding>>>>>");
}
}
private void OnTriggerStay(Collider other)
{
if (other.gameObject.tag == "object")
{
anim.SetBool("indicate", false);
anim.SetBool("grab", true);
anim.SetBool("idle", false);
Debug.Log("colliding>>>>>");
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "object")
{
anim.SetBool("indicate", false);
anim.SetBool("grab", false);
anim.SetBool("idle", true);
Debug.Log("leaving trigger");
}
}
}
答案 0 :(得分:0)
在其他部分,您将把grab设置为false:
else if (vrcontroller.triggerClicked)
...
} else {
anim.SetBool("grab", false);
...
在每个Update()
电话中!
因此,只要您不要按一下触发器,抓取就会设置为false。输入触发器会将其设置为true,仅在同一帧中将其重置。 (Collisions run before Update)
vrcontroller.triggerReleased
,则应将其设置为false(如果有这种情况)
如果没有“ triggerReleased”,则需要一个布尔布尔值。