c# - 进入触发器时动画不播放?
问题描述
我正在创建一个 vr 项目我在一个场景中有一个简单的立方体,上面有一个盒子碰撞器,上面检查了触发器现在我想要的是当我的 vr 手进入那个立方体的触发器时,我的 vr 手的抓取动画应该播放但是当我将手伸入立方体的触发器时,什么也没有发生,然后出于测试目的,我调试.log 一条消息,无论它是否检测到它都很好,它正在检测我的手何时进入以及何时离开但动画没有在这里播放是我的代码
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");
}
}
}
解决方案
您在 else 部分将grab 设置为false:
else if (vrcontroller.triggerClicked)
...
} else {
anim.SetBool("grab", false);
...
在每次Update()
通话中!
因此,只要您不按下扳机,就会将抓取设置为 false。输入触发器会将其设置为true,只能在同一帧中重置。(碰撞在更新之前运行)
- 您不应该像那样将其设置为 false。如果
vrcontroller.triggerReleased
(如果有这样的事情)如果没有“triggerReleased”,则应该将其设置为 false,您需要一个 helper-boolean。
推荐阅读
- python - OpenCV:如何检查 roi 的颜色?
- docker - 我应该使用哪种架构来预初始化一台服务器中的 N 个 docker?
- xml - 使用命名空间转换 XML 属性的 ITS 规则
- c# - 我有 2 个相同类型的武器槽,但是当我点击武器类型的物品时,只有 1 个槽被占用
- ruby-on-rails - 从 react 前端 react-on-rails 中的 rails 服务访问数据
- java - OPENJPA 2.4.3 显然在互联网上寻找持久性命名空间
- reactjs - 除非在 React 中单击两次搜索,否则查询字符串不会添加到 api
- python - 在 MLP 的情况下,张量流如何使用填充和遮罩层?
- testing - 在赛普拉斯中,如何找到具有相同 ID 的选择并获取长度?
- three.js - 带有 WebGLRenderer 的 CSS2DRenderer 不工作