在 htc Vive 中获取交互对象
Get interacted object in htc Vive
刚开始学习HTC vive app development with unity,想和Object交互,想把它作为controller与之交互。
尝试学习表格 StreamVR Unity Toolkit documentation。我在示例演示中发现了一个场景,其中 Gameobject 通过控制器进行交互,但涉及的脚本太多了。我很惊讶在立方体上附加了 VRTK_InteractalbeObject 并且它正在响应控制器。如何在 htc vive 中获取交互对象?
因此,这是 众多解决方案之一 与控制器交互的对象 - 我将在这里展示最简单的一个。
A. 从 SteamVR 文件夹 中找到 [CamerRig]
预制件并将其放置在层次结构中:
B. 在里面找到Controller (right)->Model
GameObject:
C. 使用 Rigidbody
和 SphereCollider
创建 GameObject
并将其作为 Controller (right)->Model
GameObject[=31 的子项=]
C.1. 确保此对象与 Model GameObject
处于同一位置
D. 现在玩游戏,移动你右边的 vive 控制器推动其他 GameObjects
有 Rigidbody
和任何 Collider
.
E. 要使用 vive 控制器按钮,请使用此脚本,并将其放置在 Controller (right)
游戏对象上。
public class VIVEController : MonoBehaviour
{
public SteamVR_TrackedObject trackedObj;
private SteamVR_Controller.Device controller;
void Start ()
{
controller = SteamVR_Controller.Input ((int)trackedObj.index);
}
void Update ()
{
if (controller.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger))
{
OnTriggerPressed ();
}
if (controller.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
{
OnTouchpadPressed ();
}
}
private void OnTriggerPressed()
{
Debug.Log("OnTriggerPresse");
}
private void OnTouchpadPressed()
{
Debug.Log("OnTouchpadPressed");
}
}
F. 从 inspector trackedObj
分配(它与这个脚本在同一个 GameObject
上)
G. 找到脚本SteamVR_RenderModel
注释掉方法LoadComponents
for (int i = 0; i < t.childCount; i++)
{
var child = t.GetChild(i);
child.gameObject.SetActive(false);
StripMesh(child.gameObject);
}
这是必要的,否则您自定义的 GameObject
碰撞器是控制器模型的子项,将变为非活动状态。
恢复 - 这很容易,但您需要做的步骤很少。
尝试使用控制器按钮,例如仅在按下触发器时才推动对象。
作为奖励,这是我用相同方法制作的小游戏:
https://www.youtube.com/watch?v=kzX7Iw6cHZ8
刚开始学习HTC vive app development with unity,想和Object交互,想把它作为controller与之交互。 尝试学习表格 StreamVR Unity Toolkit documentation。我在示例演示中发现了一个场景,其中 Gameobject 通过控制器进行交互,但涉及的脚本太多了。我很惊讶在立方体上附加了 VRTK_InteractalbeObject 并且它正在响应控制器。如何在 htc vive 中获取交互对象?
因此,这是 众多解决方案之一 与控制器交互的对象 - 我将在这里展示最简单的一个。
A. 从 SteamVR 文件夹 中找到 [CamerRig]
预制件并将其放置在层次结构中:
B. 在里面找到Controller (right)->Model
GameObject:
C. 使用 Rigidbody
和 SphereCollider
创建 GameObject
并将其作为 Controller (right)->Model
GameObject[=31 的子项=]
C.1. 确保此对象与 Model GameObject
D. 现在玩游戏,移动你右边的 vive 控制器推动其他 GameObjects
有 Rigidbody
和任何 Collider
.
E. 要使用 vive 控制器按钮,请使用此脚本,并将其放置在 Controller (right)
游戏对象上。
public class VIVEController : MonoBehaviour
{
public SteamVR_TrackedObject trackedObj;
private SteamVR_Controller.Device controller;
void Start ()
{
controller = SteamVR_Controller.Input ((int)trackedObj.index);
}
void Update ()
{
if (controller.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger))
{
OnTriggerPressed ();
}
if (controller.GetPressDown (Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
{
OnTouchpadPressed ();
}
}
private void OnTriggerPressed()
{
Debug.Log("OnTriggerPresse");
}
private void OnTouchpadPressed()
{
Debug.Log("OnTouchpadPressed");
}
}
F. 从 inspector trackedObj
分配(它与这个脚本在同一个 GameObject
上)
G. 找到脚本SteamVR_RenderModel
注释掉方法LoadComponents
for (int i = 0; i < t.childCount; i++)
{
var child = t.GetChild(i);
child.gameObject.SetActive(false);
StripMesh(child.gameObject);
}
这是必要的,否则您自定义的 GameObject
碰撞器是控制器模型的子项,将变为非活动状态。
恢复 - 这很容易,但您需要做的步骤很少。 尝试使用控制器按钮,例如仅在按下触发器时才推动对象。
作为奖励,这是我用相同方法制作的小游戏: https://www.youtube.com/watch?v=kzX7Iw6cHZ8