Анимации не воспроизводятся при вводе в триггер? - PullRequest
0 голосов
/ 05 февраля 2019

я создаю проект 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");
    }
}

}

1 Ответ

0 голосов
/ 05 февраля 2019

Вы устанавливаете захват на false, в остальной части:

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

при каждом Update() вызове!

Поэтому, когда вы не нажимаететриггер, захват устанавливается в ложь.Ввод триггера установит его в true, только для сброса в том же кадре.( Столкновения запускаются до обновления )

  • Не следует устанавливать значение false таким образом.Вам следует установить значение false, если vrcontroller.triggerReleased (если есть такая вещь). Если нет «triggerReleased», вам нужен вспомогательный логический тип.
...