VR Unity 射线点击操作 您所在的位置:网站首页 unity点击切换场景 VR Unity 射线点击操作

VR Unity 射线点击操作

2023-08-10 14:32| 来源: 网络整理| 查看: 265

鉴于该文章点赞和收藏那么高,我推荐一款插件  VR Interaction Framework

该插件适配大部分的vr硬件,未来应该也超级兼容,而且UI事件这块兼容UGUI,单单这点就很亮眼。兼容UGUI,不用再下那么大功夫再搞按钮事件这块了。

* 我们只做VR内容时,如果要用到例如HTC手柄类的硬件的话,可能就需要一个射线点击的功能,如,点击某一个图标,按下手柄,触发点击按钮事件,那么这个类就是解决这类问题的一步  * 射线碰撞事件的类,可以移植到大多数VR SDK上,因为每个平台都封装有了自己的注视管理,但这个引擎自身的拓展开发,方便拓展和维护,下面会有一个Debug的注释代码,可以注释掉来测试效果,如果需要有碰撞效果,必须给物体加上碰撞体,并且标签要对应,碰撞层也要对应,其实这么麻烦的原因也是为了后期的拓展开发,基础层的条件触发牢固后,上层才会安稳,舒服。

   碰撞逻辑我是放在LateUpdate里的,因为Input类放在Update里处理,解决完输入后逻辑后再处理碰撞逻辑。

  这是个抽象类,你必须新建一个类来继承他,实现获取射线的方法

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace CameraFixationManager { public abstract class CameraFixationManager : MonoBehaviour { /// /// 射线是否撞到了有触发事件的碰撞体 /// public static bool IsImpactCollider = false; /// /// 撞击点的位置 /// public Vector3 HitPosition = Vector3.zero; /// /// 射线可以碰撞到的层 /// public int RayColliderLayer = 5; #region 事件回调 /// /// 射线进入回调 /// public Action RayEnter; /// /// 射线离开的回调 /// public Action RayLeave; /// /// 射线正在射中的回调 /// public Action RayEntering; #endregion /// /// 响应的标签层,所有的交互事件都需要放到该层 /// public string ResponseTag; /// /// 是否播放音乐特效 /// public bool IsPlayAudio = true; /// /// 射线缓冲,意思就是射线当前碰撞套的物体 /// private Transform _transform = null; /// /// 是否碰撞到 /// protected bool IsCollider = true; protected virtual void Awake() { } /// /// 放在延迟更新是因为,输入事件一般是在Update之前,所以,处理完输入逻辑后,在 Update里判断输入状态,再在延迟更新里判断碰撞状态,这样就不用手动 /// edit/ProjectSettings/ScriptExecutionOrder的编排脚本的方法执行顺序 /// void LateUpdate() { if (!IsCollider) return; RaycastHit hit; //只能向屏幕中点发射线 var ray = GetRay();//这里进一步抽象,因为有相机注视,还有手柄射线注视 if (Physics.Raycast(ray, out hit,2000f,1


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有