【发布时间】:2018-09-19 23:15:14
【问题描述】:
(我已经按照 VRTK 的教程 002 在左右控制器上使用自定义触发事件。它确实有效,但不是我想要的。) 我确实有一个使用他自己的 Animatorcontroller 从预制件中实例化的角色。我将我自己的“动画师脚本”附加到他身上,当我按下按钮 0、1、2、3 时做手势......它正在工作,并且就像那样工作。
无效更新()
{
// LEFT HAND //
if (Input.GetKey(KeyCode.Keypad0))
m_Animator.SetInteger("HandGestureLeft", 0); // FIST
else if (Input.GetKey(KeyCode.Keypad1))
m_Animator.SetInteger("HandGestureLeft", 1); // PALM
else if (Input.GetKey(KeyCode.Keypad2))
m_Animator.SetInteger("HandGestureLeft", 2); // POINT
现在我想通过我的 VR 控制器按钮输入而不是 0.1.2.3 键盘来执行此操作。我了解到 VRTK 有一些功能可以做到这一点。因此,我从 002 示例场景进入“VRTK_ControllerEvents_ListenerExample 脚本”,并将脚本放在左右控制器上(位于 VRTK 游戏对象场景内)(不在我的预制化身上,因为如果我这样做就没有任何效果了,如教程所述,002 场景脚本必须在 VRTK 实例化的控制器上)。 我可以将动画放入其中并让它们工作。但它们仅适用于我的预制件,前提是我已经将它放在场景中,并且不实例化它。所以作为一个玩家,我不能让我的手势起作用,因为当我点击播放时,我必须让我的角色实例化我的游戏才能工作(我的默认脚本做得很好,当我按下 0,1,2,3...键,因为我不需要将它放在手控制器上,我可以将它放在我的预制件上)。
所以我有一个问题,从我看到的情况来看,它们可能是两个解决方案。 我可能会直接在我的旧“动画师脚本”中调用 VRTK 控制器功能。所以它可能看起来像:
if (Input.GetKey(KeyCode.Keypad0))
m_Animator.SetInteger("HandGestureLeft", 0); // FIST
进入 if (GetComponent().TriggerPressed)==true) (但它告诉我 TriggerPressed 不可用) m_Animator.SetInteger("HandGestureLeft", 0); // 拳头
(但我不知道如何从 VRTK 监听的地方获取 VR 控制器输入)
或者有一种方法可以从左右控制器调用“VRTK_ControllerEvents_ListenerExample”脚本中的预制 AnimatorController 组件。但是在这里,我也不知道如何调用预制组件,如果我的 Avatar Prefab 已经在场景中,我只能调用 AnimatorControllerComponent。
最后,我需要的只是从我的预制脚本中检查左控制器或右控制器是否按下触发器的方法。与“Input.GetKey(KeyCode.Keypad0)”类似,但使用 VRTK 方式获取触发输入。
我完全迷路了,有人可以帮助我吗? :D
这里有两张图片。现在我的工作代码看起来像这样: ![1]:https://vrtoolkit.slack.com/files/UA39CMQRF/FA3BD4YD6/code.png“代码0” ![2]:https://vrtoolkit.slack.com/files/UA39CMQRF/FA3BD6DR6/code1.png“代码1”
【问题讨论】:
标签: c# unity3d virtual-reality animator vrtk