快手秒刷自助网站,向百度提交网站,上海公司网站开发,模板网站怎么建设优化文章目录 手部设置物体交互物体抓取添加抓取抓取三种类型抓取点偏移抓取事件抓取时不让物体吸附到手部 射线抓取交互层级 手部设置
为手部#xff08;LeftHandController#xff09;添加XRDirInteractor脚本 并添加一个球形碰撞盒#xff0c;勾选isTrigger,调整大小为0.1 … 文章目录 手部设置物体交互物体抓取添加抓取抓取三种类型抓取点偏移抓取事件抓取时不让物体吸附到手部 射线抓取交互层级 手部设置
为手部LeftHandController添加XRDirInteractor脚本 并添加一个球形碰撞盒勾选isTrigger,调整大小为0.1
物体交互
创建一个cube当桌子再创建一个cube当交互物体交互cube建议大小为0.1 创建三个材质球将交互物体的材质改为红色 为交互物体添加刚体 为交互物体添加一个XRSimpleInteractable脚本注意不需要拖拽Colliders 然后如下设置交互事件在事件上右键可以复制粘贴 此时运行手碰到cube会变成绿色按下抓取键会变成换色手离开cube会重新变红
物体抓取
添加抓取
创建一个新cube添加刚体添加XR Grab Interactable组件不需要拖拽colliders属性
取消勾选retain Transform Parent这会让物体在结束抓取时重新返回原来的父物体下到那时如果父物体的缩放xyz值不同会导致模型顶点选择错误
此时运行即可抓取
抓取三种类型 VelocityTracking不能穿过桌子使用碰撞盒进行物理交互 Kinematic:可以穿过桌子使用碰撞盒进行物理交互 Instantaneous:可以穿过桌子使用碰撞盒进行物理交互但是会不精确
抓取点偏移
创建一个空物体作为抓取对象的子物体然后放在合适的抓取点上将空物体拖拽给XRGrabInteractable上的AttachTransform上
抓取事件
可以通过在XRGrabInteractor脚本直接拖拽的方式绑定事件 也可以使用脚本绑定例如
public class FireBulletOnActivate : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//被抓取物体的交互组件XRGrabInteractable grabable GetComponentXRGrabInteractable();grabable.activated.AddListener(FireBullet);}public void FireBullet(ActivateEventArgs arg){print(射击);}
}抓取时不让物体吸附到手部
对于interaction Toolkit2.1以上的版本可以直接勾选Use Dynamic Attach 对于旧版本我们可以自己重写抓取脚本将抓取点放到手上即可实现不吸附的效果
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;public class XROffsetGrabInteractable : XRGrabInteractable
{private void Start(){if (!attachTransform){GameObject attachPoint new GameObject(Offset Grab Pivot);attachPoint.transform.SetParent(transform,false);attachTransform attachPoint.transform;}}protected override void OnSelectEntered(SelectEnterEventArgs args){print(进入);attachTransform.position args.interactorObject.transform.position;attachTransform.rotation args.interactorObject.transform.rotation;base.OnSelectEntered(args);}
}直接挂载不需要其他操作
射线抓取
就是普通的射线默认就可以进行抓取操作 右键XR/RayInteractor(Action-base)然后设置好XRController组件的预制数据对准需要抓取的物体按下抓取键即可进行抓取
射线抓取和手部的XR Direct Interactor同时使用会造成可以抓两次的错误
如果将射线的XR Interactor Line Visual的颜色透明度改为0那么将只在只想可抓取物体时才会显示射线
如果取消勾选射线的XR Ray Interactor组件上的ForceGrab那么抓取时将保持射线的距离
抓取时可以用摇杆控制旋转和远近
交互层级
射线本身是多功能的既可以用来移动也可以用来抓取 但是我们希望有些射线只能用来移动有些只能用来抓取 可以使用分层功能
注意不是Unity本身的layer而是interaction toolkit自己的layer
使用方法 找到手上的XR Direct Interactor 或者射线的XR Ray Interactor选择层级点开添加新层级然后设置 为需要交互的物体找到各自的层级设置如地面可抓取物体等设置好要响应的层级此时他们将只响应对应层级的交互器