【问题标题】:Animations are Not Playing When Entering In Trigger?进入触发器时动画不播放?
【发布时间】:2019-02-05 08:01:16
【问题描述】:

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

}

【问题讨论】:

  • 很难说没有设置你的 stateMachine 及其所有转换 ....

标签: c# unity3d virtual-reality


【解决方案1】:

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

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

在每个Update() 电话中!

因此,只要您按下扳机,就会将抓取设置为 false。输入触发器会将其设置为true,只能在同一帧中重置。 (Collisions run before Update)

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

【讨论】:

  • 当我按下控制器上的触发器或抓取按钮时动画正在工作,但是当我的手进入该立方体的触发器时,会生成 debug.log 消息但动画不播放
  • 嘿,我通过删除代码的更新功能解决了这个问题,感谢您的帮助
猜你喜欢
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 2019-01-23
  • 2017-10-12
  • 2022-06-29
  • 1970-01-01
相关资源
最近更新 更多