进入触发器时动画不播放?
Animations are Not Playing When Entering In Trigger?
我正在创建一个虚拟现实项目 我在一个场景中有一个简单的立方体,上面有一个盒子对撞机并选中了触发器现在我想要的是当我的虚拟现实手进入那个立方体的触发器时抓取动画我的 vr 手应该可以玩,但是当我将我的手伸入立方体的触发器时,没有任何反应,然后出于测试目的,我 debug.log 一条消息表明无论是否检测到它都很好,它正在检测我的手何时进入以及何时进入离开了,但动画没有播放这里是我的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class 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");
}
}
}
您将 grab 设置为 false,在 else 部分:
else if (vrcontroller.triggerClicked)
...
} else {
anim.SetBool("grab", false);
...
在每个 Update()
电话中!
因此,只要您不按下扳机,抓取就会设置为 false。输入触发器会将其设置为真,只会在同一帧中重置。 (Collisions run before Update)
- 您不应该那样将其设置为 false。如果
vrcontroller.triggerReleased
(如果有这样的事情),你应该将它设置为 false
如果没有 "triggerReleased" 你需要一个辅助布尔值。
我正在创建一个虚拟现实项目 我在一个场景中有一个简单的立方体,上面有一个盒子对撞机并选中了触发器现在我想要的是当我的虚拟现实手进入那个立方体的触发器时抓取动画我的 vr 手应该可以玩,但是当我将我的手伸入立方体的触发器时,没有任何反应,然后出于测试目的,我 debug.log 一条消息表明无论是否检测到它都很好,它正在检测我的手何时进入以及何时进入离开了,但动画没有播放这里是我的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class 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");
}
}
}
您将 grab 设置为 false,在 else 部分:
else if (vrcontroller.triggerClicked)
...
} else {
anim.SetBool("grab", false);
...
在每个 Update()
电话中!
因此,只要您不按下扳机,抓取就会设置为 false。输入触发器会将其设置为真,只会在同一帧中重置。 (Collisions run before Update)
- 您不应该那样将其设置为 false。如果
vrcontroller.triggerReleased
(如果有这样的事情),你应该将它设置为 false 如果没有 "triggerReleased" 你需要一个辅助布尔值。