首页 > 解决方案 > 进入触发器时动画不播放?

问题描述

我正在创建一个 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");
    }
}

}

标签: c#unity3dvirtual-reality

解决方案


您在 else 部分将grab 设置为false:

else if (vrcontroller.triggerClicked)
...
} else {
anim.SetBool("grab", false);
...

在每次Update()通话中!

因此,只要您按下扳机,就会将抓取设置为 false。输入触发器会将其设置为true,只能在同一帧中重置。(碰撞在更新之前运行

  • 您不应该像那样将其设置为 false。如果vrcontroller.triggerReleased(如果有这样的事情)如果没有“triggerReleased”,则应该将其设置为 false,您需要一个 helper-boolean。

推荐阅读