如何将您的 Unity 项目输入更新到 SteamVR 2.0?

2023-11-24

我有一些 Unity 场景与以前版本的 SteamVR 插件配合得很好,因为有新版本的插件“SteamVR Unity Plugin 2.0”,我的代码不再有效。

https://steamcommunity.com/games/250820/announcements/detail/1696059027982397407

正如文档所述,在导入新文件夹之前,我删除了“SteamVR”文件夹。

但我收到这个错误:

error CS0246: The type or namespace name `SteamVR_Controller' could not be found. Are you missing an assembly reference?
error CS0246: The type or namespace name `SteamVR_TrackedController' could not be found. Are you missing an assembly reference?

所以我可以看到此类已被弃用:

private SteamVR_Controller.Device device;
private SteamVR_TrackedController controller;
controller = GetComponent<SteamVR_TrackedController>();

使用 SteamVR 2.0 插件通过代码获取输入的新方法是什么?


要迁移到 SteamVR 2.0,我按照以下步骤操作:

1)删除“SteamVR”文件夹,然后从 Unity Asset Store 导入“SteamVR”插件。

2)从场景中删除之前的“[CameraRig]”对象,然后拖动位于“SteamVR/Prefabs”上的新对象

3) Check for the script "Steam VR_Behaviour_Pose" on the "Controller (left)", and "Controller (right)" objects enter image description here enter image description here

在“姿势动作”字段和“输入源”上应该是:

控制器(左)

姿势动作: 骷髅左手

输入源: 左手

控制器(右)

姿势动作: 骷髅右手

输入源: 右手

4)将手写脚本添加到“控制器(左)”和“控制器(右)”对象中:

enter image description here

5)将您自己的自定义脚本添加到“控制器(左)”和“控制器(右)”对象中,在我的例子中为“HTC Vivie 输入”脚本。

enter image description here

6) Make sure you do not have any compilation errors, in that case you should be able to see the "SteamVR Input" and "SteamVR Input Live View" on window menu from Unity, enter image description here

7)默认情况下,例如菜单按钮不包含任何关联的操作或触摸板位置,因此打开“SteamVR 输入”菜单,然后添加操作:

  • touchPad

  • touchPos

  • 菜单按钮

enter image description here\ enter image description here enter image description here enter image description here

8)在 SteamVR 服务运行时单击“打开绑定 UI”按钮, 并编辑当前绑定

将“菜单”与“菜单按钮”操作相关联。

enter image description here

将“触摸”与“触摸板”操作相关联。

将“位置”与“触摸板”操作相关联。

enter image description here

然后按“SteamVR 输入”菜单中的“保存并生成”按钮

enter image description here

9)打开您的自定义脚本(在我的例子中为“HTC Vive Input”)并添加您的代码,例如:

using UnityEngine;
using Valve.VR;
using Valve.VR.InteractionSystem;

public class HTCVivieInput : MonoBehaviour {

    private Hand hand;

    // Use this for initialization
    void Start () {
        hand = gameObject.GetComponent<Hand>();
    }

    public Vector2 getTrackPadPos()
    {
        SteamVR_Action_Vector2 trackpadPos = SteamVR_Input._default.inActions.touchPos;
        return trackpadPos.GetAxis(hand.handType);
    }

    public bool getPinch()
    {
        return SteamVR_Input._default.inActions.GrabPinch.GetState(hand.handType);
    }

    public bool getPinchDown()
    {
        return SteamVR_Input._default.inActions.GrabPinch.GetStateDown(hand.handType);
    }

    public bool getPinchUp()
    {
        return SteamVR_Input._default.inActions.GrabPinch.GetStateUp(hand.handType);
    }

    public bool getGrip()
    {
        return SteamVR_Input._default.inActions.GrabGrip.GetState(hand.handType);
    }

    public bool getGrip_Down()
    {
        return SteamVR_Input._default.inActions.GrabGrip.GetStateDown(hand.handType);
    }

    public bool getGrip_Up()
    {
        return SteamVR_Input._default.inActions.GrabGrip.GetStateUp(hand.handType);
    }

    public bool getMenu()
    {
        return SteamVR_Input._default.inActions.MenuButton.GetState(hand.handType);
    }

    public bool getMenu_Down()
    {
        return SteamVR_Input._default.inActions.MenuButton.GetStateDown(hand.handType);
    }

    public bool getMenu_Up()
    {
        return SteamVR_Input._default.inActions.MenuButton.GetStateUp(hand.handType);
    }

    public bool getTouchPad()
    {
        return SteamVR_Input._default.inActions.Teleport.GetState(hand.handType);
    }

    public bool getTouchPad_Down()
    {
        return SteamVR_Input._default.inActions.Teleport.GetStateDown(hand.handType);
    }

    public bool getTouchPad_Up()
    {
        return SteamVR_Input._default.inActions.Teleport.GetStateUp(hand.handType);
    }

    public Vector3 getControllerPosition()
    {
        SteamVR_Action_Pose[] poseActions = SteamVR_Input._default.poseActions;
        if (poseActions.Length > 0)
        {
            return poseActions[0].GetLocalPosition(hand.handType);
        }
        return new Vector3(0, 0, 0);
    }

    public Quaternion getControllerRotation()
    {
        SteamVR_Action_Pose[] poseActions = SteamVR_Input._default.poseActions;
        if (poseActions.Length > 0)
        {
            return poseActions[0].GetLocalRotation(hand.handType);
        }
        return Quaternion.identity;
    }
}

10)制作发布版本时,替换“绑定 UI”菜单中的默认绑定

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将您的 Unity 项目输入更新到 SteamVR 2.0? 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2

随机推荐

  • mq_open() - 打开的文件太多

    我正在尝试编写一个客户端和服务器 它们将使用 POSIX 消息队列交换数据 我尝试通过查看在互联网上看到的示例和课程文档来做到这一点 但是 我陷入困境 当我运行它时 我收到 打开文件太多 错误 这是我的代码 Client int main
  • 将整数值范围映射到Python中的颜色

    我有从 0 到 10000 的整数 我想为每个整数映射一种颜色 然后根据整数值 我想检索与整数值对应的颜色的 RGB 等效值 基本上我想在两种或多种颜色之间有插值效果 例如如果颜色是绿色和红色 则绿色具有最小权重 0 红色具有最高权重 10
  • 使用 AJAX 通过 Flask-WTForms 将条目附加到 FieldList

    我使用 Flask WTForms 在 Flask 中制作了一个简单的表单 家长可以在其中注册自己和他的孩子 家长可以通过单击 添加孩子 按钮来注册任意数量的孩子 WTForms 通过使用 FieldList 功能使这变得非常容易实现 但是
  • LOAD DATA INFILE 轻松将 YYYYMMDD 转换为 YYYY-MM-DD?

    您好 我想导入一个 INFILE 但日期的形式为 AADR 20120403 31 43 31 43 31 4 31 4 1100 AAU 20120403 2 64 2 65 2 56 2 65 85700 AAVX 20120403 1
  • 将 mutate_at 有条件地应用于 R 中数据帧中的特定行

    我在 R 中有一个数据框 如下所示 a b c condition 1 4 2 acap 2 3 1 acap 2 4 3 acap 5 6 8 ncap 5 7 6 ncap 8 7 6 ncap 我正在尝试重新编码条件 ncap 的 a
  • C++:在二叉树中插入节点的指针与指针的指针

    我正在创建一个函数来在二叉树中插入一个元素 首先 我在 Visual Studio 2012 上执行了以下操作 void Insert Nodo root int x if root NULL Nodo n new Nodo n gt va
  • 使用 redux useDispatch 时 useEffect 缺少依赖项

    每当使用反应钩子安装我的组件时 我想获取我的类别useEffect而不是在每次重新渲染时 但我不断收到此警告React Hook useEffect has a missing dependency dispatch 这是我的代码 cons
  • Worksheet 类的 ShowAllData 方法失败

    我注意到当自动过滤器已打开时我的 VBA 脚本不起作用 知道这是为什么吗 wbk Activate Set Criteria Sheets Sheet1 Cells i 1 Set rng Sheets Sheet1 Range Cells
  • 如何在上传目录时删除 Chrome 中的警告消息

    使用上传目录时webkitdirectory在 Chrome 中 会出现一条丑陋的警告消息 该消息内容如下 将 数量 个文件上传到此站点 这将上传 目录名称 中的所有文件 仅当您信任该站点时才执行此操作 这是最近在 Chrome 版本 66
  • MSI 不在 C# 中运行

    我正在尝试运行一个MSI使用 Process Start 方法从 C 文件 MSI 文件很好 因为我可以正常运行它 但是当我尝试在某些 C 代码中运行 MSI 文件时 我收到以下错误 这个安装包无法 被打开 验证该包 存在 并且您可以访问它
  • java.lang.NumberFormatException用于将字符串转换为long [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我正在尝试将字符串转换为长字符串 它会抛出NumberFormatException 我不认为这超出了范围long at all 这是要转换的代码 其中count strng
  • 在 PYSPARK 中运行收集时出错

    我正在尝试将网站名称与 URL 分开 例如 如果 URL 是 www google com 则输出应为 google 我尝试了下面的代码 除了最后一行 websites collect 之外 一切正常 我使用数据框来存储网站名称 然后将其转
  • Java 泛型问题:类型参数 E 不在其范围内

    我有一个关于泛型的问题 我有这个方法 根本无法编译 编译器告诉我 type parameter E is not within its bound 我通常在理解编译器错误方面没有问题 但这一个非常棘手 也许我对泛型的了解需要提高 谁能告诉我
  • Javascript将数据保存到文件系统(有用户提示)

    在最新的浏览器 支持 html5 中实现以下目标的最佳方法是什么 我主要针对的是 Google Chrome 在我的应用程序中 数据是通过 JavaScript 操作的 并且需要使用浏览器提示 另存为对话框 将输出写入文件系统 我不确定写入
  • JNI:从C代码到Java和JNI

    背景 我正在 Eclipse 中开发 Android 应用程序 现在遇到问题 需要您的帮助 所以我必须调用写成的函数C来自JAVA应用程序 但在我编写代码的方式上我有一些问题您可以在下面看到 我正在等待您的答案和想法 C Code typd
  • 如何在 C# 驱动程序中设置 MongoDB Change Stream 'OperationType'?

    当运行新的 MongDB 服务器版本 3 6 并尝试将更改流监视添加到集合以获取新插入和文档更新的通知时 我只收到更新通知 而不收到插入通知 这是我尝试添加手表的默认方式 IMongoDatabase mongoDatabase mongo
  • 通过 Javascript 检测图像的 mime 类型

    我正在使用 javascript document images 函数检测网页上的图像 该函数返回图像数组 由于我没有在正在加载的图像上使用任何扩展名 有什么方法可以从中获取图像的 mime 类型吗 除了在 jQuery 中再次请求图像并尝
  • 在 Visual Studio 2010 中调试时忽略跨 AppDomain 的异常

    我在调试调用另一个 AppDomain 的应用程序时遇到问题 因为如果其他 AppDomain 正在执行的任何操作中发生异常 则异常会冒泡并导致 Visual Studio 2010 无论如何都崩溃 我已经正确包装了抛出的方法调用try c
  • 在 Django TEMPLATE DIRS 中使用外部 URL

    Settings py 中的 Django TEMPLATE DIRS 调用 unix 样式斜杠 因此 当我打电话时 get template some template html 在视图中 结果始终从根开始 并导致调用 home user
  • 如何将您的 Unity 项目输入更新到 SteamVR 2.0?

    我有一些 Unity 场景与以前版本的 SteamVR 插件配合得很好 因为有新版本的插件 SteamVR Unity Plugin 2 0 我的代码不再有效 https steamcommunity com games 250820 an