当前位置: 首页 > news >正文

网站后台路径洛可可设计公司企业文化

网站后台路径,洛可可设计公司企业文化,手机wap购物网站模板,互动营销名词解释一、VR交互的类型 Hover#xff08;悬停#xff09; 定义#xff1a;发起交互的对象停留在可交互对象的交互区域。例如#xff0c;当手触摸到物品表面#xff08;可交互区域#xff09;时#xff0c;视为触发了Hover。 Grab#xff08;抓取#xff09; 概念#xff…一、VR交互的类型 Hover悬停 定义发起交互的对象停留在可交互对象的交互区域。例如当手触摸到物品表面可交互区域时视为触发了Hover。 Grab抓取 概念把物品抓起来。 Use使用 基于“抓取”。例如抓取一把枪后按下枪的扳机发射子弹则视为Use。 三、发起交互的对象Interactor XR Direct Interactor脚本 为了让双手成为发起交互的对象在LeftHand Controller和RightHand Controller下分别创建Direct Interactor子物体并添加XR Direct Interactor脚本。 添加可交互区域 XR Direct Interactor需要一个Trigger类型的碰撞体作为可交互区域且需和它挂载在同一游戏物体上。如在左手和右手的Direct Interactor上分别添加Sphere Collider调整Radius并勾选Is Trigger。当可交互对象进入该区域后可进行交互。 并设置合适的参数。 四、可交互的对象Interactable创建一个3d对象比如立方体 添加刚体 因为手与物品的交互基于物理效果所以要为可交互物体添加刚体。 XR Simple Interactable脚本 为方块添加XR Simple Interactable脚本但是它没有自带抓取的功能。物体有刚体后该脚本才生效且挂载脚本的物体还需一个碰撞体。如果是创建的3d对象不需要额外加如果是自定义模型的话别忘了手动添加碰撞体 2.1、可交互事件 实现功能 手触碰到方块时方块颜色改变模拟Hover即悬停在可交互区域。触碰方块后按下手柄Grip键方块颜色变成蓝色。触碰方块后按住Grip键再按Trigger键方块颜色变回红色。 实现方法 使用XR Simple Interactable脚本中的Interactable Events其中Hover Entered对应开始悬停在可交互区域触发的事件可手动设置更改方块材质。Select Entered和Activated事件分别对应上述第二、三个功能。在Inspector面板中手动绑定事件Select动作绑定“按下Grip键抓取键”Activate动作绑定“按下Trigger键扳机键”。 Activate动作以Select动作为前提Interactable Events中的所有事件以“与可交互对象发生交互”为前提。 XR Grab Interactable脚本、和XR Simple Interactable脚本脚本类似但是有抓取效果所以需要移除刚刚的XR Simple Interactable脚本 Movement Type 移动类型 Instantaneous物体移动位置和姿态完全跟随手的移动无延迟但无物理刚体效果物体可穿过碰撞体且碰撞效果非物理。Kinematic通过Kinematic Rigidbody移动有延迟移动中不受力和碰撞作用但可对其他刚体施加物理效果。Velocity Tracking通过设置刚体速度和角速度移动有延迟有刚体物理效果可与碰撞体碰撞并对其他刚体产生力的效果。 Attach Transform 抓取点 XR Grab Interactable脚本中有Attach Transform变量可赋值作为抓取点若未赋值默认以物体position为抓取点。如抓取枪时抓取点应在枪柄实现功能可创建枪的子物体Attach Point并赋值给Attach Transform然后调整其Position位置和Rotation以优化抓取效果。但仅设置Attach Transform会有穿模现象若要实现精细抓取可参考相关教程。 代码实现Use功能制作简易手枪 核心脚本 创建GunController脚本挂载到枪的游戏物体上。获取XRGrabInteractable中的activated事件通过AddListener绑定FireBullet函数。 制作子弹预制体 创建子弹Prefab需刚体和碰撞体并将子弹Rigidbody的Collision Detection设为Continous Dynamic防止高速运动时检测不到碰撞。 制作子弹发射位置 创建枪的子物体Spawn Point作为子弹生成位置其z轴箭头方向对应子弹发射方向将子弹和Spawn Point赋给Gun Controller。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.Interaction.Toolkit;// 枪支控制器类 public class GunController : MonoBehaviour {// 子弹预制体public GameObject bullet;// 子弹发射位置的变换组件public Transform spawnPoint;// 子弹发射速度public float fireSpeed 40;void Start(){// 获取当前物体上的 XRGrabInteractable 组件XRGrabInteractable grabbable GetComponentXRGrabInteractable();// 为 grabbable 的 activated 事件添加监听器当该事件触发时调用 FireBullet 方法grabbable.activated.AddListener(FireBullet);}private void FireBullet(ActivateEventArgs arg){// 在 spawnPoint 的位置和旋转处实例化子弹预制体GameObject spawnBullet Instantiate(bullet, spawnPoint.position, spawnPoint.rotation);// 设置实例化出的子弹的刚体速度使其沿着 spawnPoint 的前方以 fireSpeed 的速度飞行spawnBullet.GetComponentRigidbody().velocity spawnPoint.forward * fireSpeed;// 在 5 秒后销毁这个子弹对象Destroy(spawnBullet, 5);} }优化一左右手抓取判断哪只手与物体交互 方法一不推荐 在GunController脚本中给XRGrabInteractable的SelectEntered事件绑定ChangeAttachTransform函数通过判断Interactor是左手还是右手控制器来切换Attach Transform。 也就是创建两个抓取点并进行监听ChangeAttachTransform判断左右手、来重新设置抓取点 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.Interaction.Toolkit;// 枪支控制器类 public class GunController : MonoBehaviour {// 子弹游戏对象public GameObject bullet;// 子弹发射位置的变换组件public Transform spawnPoint;// 子弹发射速度public float fireSpeed 40;// 左手抓取点的变换组件private Transform leftHandAttachPoint;// 右手抓取点的变换组件private Transform rightHandAttachPoint;// 当前物体上的可抓取交互组件private XRGrabInteractable grabbable;void Start(){// 在当前物体下查找名为LeftHand Attach Point的子物体获取其变换组件leftHandAttachPoint transform.Find(LeftHand Attach Point);// 在当前物体下查找名为RightHand Attach Point的子物体获取其变换组件rightHandAttachPoint transform.Find(RightHand Attach Point);// 获取当前物体上的 XRGrabInteractable 组件grabbable GetComponentXRGrabInteractable();// 为可抓取交互组件的 selectEntered 事件添加监听器当该事件触发时调用 ChangeAttachTransform 方法grabbable.selectEntered.AddListener(ChangeAttachTransform);// 为可抓取交互组件的 activated 事件添加监听器当该事件触发时调用 FireBullet 方法grabbable.activated.AddListener(FireBullet);}private void ChangeAttachTransform(SelectEnterEventArgs arg){// 获取触发 selectEntered 事件的交互器的变换组件Transform interactor arg.interactorObject.transform;// 如果交互器的父物体名称为Left Controller表示是左手控制器if (interactor.transform.parent.name Left Controller){// 将当前物体的抓取点设置为左手抓取点grabbable.attachTransform leftHandAttachPoint;}else if (interactor.transform.parent.name Right Controller){// 如果交互器的父物体名称为Right Controller表示是右手控制器// 将当前物体的抓取点设置为右手抓取点grabbable.attachTransform rightHandAttachPoint;}}private void FireBullet(ActivateEventArgs arg){// 在 spawnPoint 的位置和旋转处实例化子弹游戏对象GameObject spawnBullet Instantiate(bullet, spawnPoint.position, spawnPoint.rotation);// 获取实例化出的子弹的刚体组件Rigidbody bulletRigidbody spawnBullet.GetComponentRigidbody();// 设置子弹的速度使其沿着 spawnPoint 的前方以 fireSpeed 的速度飞行bulletRigidbody.velocity spawnPoint.forward * fireSpeed;// 在 5 秒后销毁这个子弹对象Destroy(spawnBullet, 5);} }方法二减少耦合性新建脚本XRGrabInteractableTwoAttach继承XRGrabInteractable重写OnSelectEntered方法根据Interactor的Tag判断是左手还是右手切换相应的Attach Transform。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.Interaction.Toolkit;// 自定义的可抓取交互类继承自 XRGrabInteractable public class XRGrabInteractableTwoAttach : XRGrabInteractable {// 左手的抓取点变换public Transform leftAttachTransform;// 右手的抓取点变换public Transform rightAttachTransform;// 重写 OnSelectEntered 方法在选择进入时触发protected override void OnSelectEntered(SelectEnterEventArgs args){// 如果交互对象的标签是“Left Hand”左手if (args.interactorObject.transform.CompareTag(Left Hand)){// 将当前物体的抓取点设置为左手抓取点attachTransform leftAttachTransform;}// 如果交互对象的标签是“Right Hand”右手else if (args.interactorObject.transform.CompareTag(Right Hand)){// 将当前物体的抓取点设置为右手抓取点attachTransform rightAttachTransform;}// 调用基类的 OnSelectEntered 方法base.OnSelectEntered(args);} }将枪上的XRGrabInteractable抓取脚本替换为XRGrabInteractableTwoAttach并在编辑器中为左右手Attach Transform赋值并给Direct Interactor添加Tag。 第一次抓取或第一次切换抓取位置错误解决方法 - 方法一 - 在可抓取物体Gun被抓取物体上添加XRSingleGrabFreeTransformer脚本游戏运行时会自动添加到XRGrabInteractableTwoAttach脚本。 方法二 - 重写刚刚新建的XRGrabInteractableTwoAttach脚本的GetAttachTransform方法而不是OnSelectEntered方法。根据Interactor的Tag返回相应的Attach Transform若Tag不匹配则返回基类的GetAttachTransform结果。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.Interaction.Toolkit;public class XRGrabInteractableTwoAttach : XRGrabInteractable {public Transform leftAttachTransform;public Transform rightAttachTransform;public override Transform GetAttachTransform(IXRInteractor interactor){Transform i_attachTransform null;if (interactor.transform.CompareTag(Left Hand)){i_attachTransform leftAttachTransform;}if (interactor.transform.CompareTag(Right Hand)){i_attachTransform rightAttachTransform;}return i_attachTransform ! null ? i_attachTransform : base.GetAttachTransform(interactor);} }因为之前学的射线交互层级是Everything层级比较高和物体交互层级有重复所以也能实现射线抓取然后将与传送有关的 XR Ray Interactor 和 Teleport Area 的 Interaction Layer Mask 改成 Teleport就可以避免出现这类问题 其他功能一将与物体接触的地方作为抓取点Dynamic Attach也就是碰哪里抓哪里没有固定抓取点 创建细长Cube作为测试物体添加碰撞体、刚体和XR Grab Interactable脚本勾选Use Dynamic Attach后可根据需求设置Match Position、Match Rotation、Snap To Collider等选项实现手抓在物体接触部位的效果。 Match Position匹配位置当启用相关功能时确保被抓取物体的位置与抓取点的位置相匹配。例如在使用特定的抓取方式时可使被抓取物体在被抓取瞬间其位置与抓取点重合以实现更真实的抓取效果。 Match Rotation匹配旋转类似 “匹配位置”当启用此选项时被抓取物体的旋转会与抓取点的旋转相匹配。这样可以确保被抓取物体在抓取过程中以合适的角度呈现增强真实感和交互性。 Snap To Collider吸附到碰撞体当开启这个功能后抓取操作会使被抓取物体吸附到抓取点所在的碰撞体上。这可以使抓取更加精准并且在抓取过程中物体与抓取点的连接更加紧密避免出现不合理的位置偏差。 五、XR Tint Interactable Visual脚本 功能可挂载到可交互对象上当Interactor悬停Hover或选中Select动作触发可交互对象时能暂时改变其颜色。 .2. 设置调整Tint Color设置颜色勾选Tint On Hover在Hover时改变颜色勾选Tint On Selection在Select时改变颜色。注意要把使用的XR Grab Interactable放置到最上层。 六、取消身体和可抓取物体的物理碰撞 设置Layer将XR Origin的Layer设为Player仅设置Character Controller所在物体Layer子物体选No将所有可抓取物体Layer设为Interactable。 配置Physics打开Unity编辑器上方菜单栏的Edit编辑 - Project Settings项目设置- Physics物理找到Layer Collision Matrix图层碰撞器将Player和Interactable的交叉点取消勾选避免身体与可抓取物体发生物理碰撞。 七、XR Interaction Group 功能XR Interaction Toolkit 2.3新组件可管理多个Interactor。当其中一个Interactor生效时Group内其他Interactor会暂时失效。 应用示例如在Left/RightHand Controller物体上添加XR Interaction Group组件将Direct Interactor物体和UI Ray Interactor物体拖到Group中可实现在抓取物体时让UI射线暂时失效。 八、XR Direct Interactor脚本中的Select Action Trigger 参数说明 Toggle以抓取为例选择Toggle后靠近物体按下手柄抓取键物体会被抓在手上松开抓取键物体仍在手上下次按下抓取键才会释放。Sticky按下手柄抓取键物体被抓手上松开抓取键物体仍在手上下次按下并松开抓取键物体才会释放。State和State Change的区别在可抓取物体Select Mode选择Single时 State可能出现一只手无法接管另一只手抓取权的情况只有先松开当前抓取手的抓取键才会进行切换抓取。State Change可以随意切换抓取推荐在抓取功能上使用State Change。
http://www.zqtcl.cn/news/701166/

相关文章:

  • 莱芜网站建设电话瓦房店网站建设
  • 视频网站app怎么做的天津seo标准
  • 建立音乐网站wordpress 安装文件名
  • 龙华营销型网站制作企业网站模板源代码下载
  • 山东城乡建设厅网站哪有做网站公司
  • 建设网站是否等于开展网络营销用wordPress搭建图片库
  • 泗阳做网站的外贸公司网站搭建
  • 做汽车保养的网站上商业招商网站
  • 如何进网站帝国cms调用网站名称
  • 瑞金网站建设推广合肥瑶海区地图
  • 静态网站建设国内免费域名
  • 网站建设设计公司电子商务网站开发与管理
  • 手机网站制作设计做国际网站有什么需要注意的
  • 机构网站源码如何分析一个网站
  • 免费营销软件网站网站建设与规划实训总结
  • 网站深度功能建筑人才网市场
  • 学校网站建设的意义和应用服务平台管理系统
  • 网站内容规划要包括什么内容wordpress5.2 php版本
  • 山西建设部网站超值的镇江网站建设
  • 做淘宝要网站网站推广外链怎么做
  • 深圳做网站推广哪家好自建网站优缺点
  • 网站建设询价函什么网站可以做会计题目
  • 电脑网站视频怎么下载珠海免费网站制作
  • wordpress menu icon咸阳seo
  • php制作网站网站开发与客户沟通
  • 百度网站建设平台微盟微商城官网
  • 三明网站seo上海中学分数线
  • 青岛谷歌网站建设网站建站公司排名
  • 成都旅游网站建设规划windows优化大师官方
  • 福永网站建设公司哪家好财务公司承兑汇票