SteamVR-InteractionSystem-实现配套物体同时拿取(弓和箭)

配套物体同时拿取,实际操作中,当一只手拿起弓的时候,另一只手自动拿起箭;又或者当拿起无人机遥控时,无人机自动启动。
弓箭拿取效果:
(未拿取)


(拿取时)


无人机拿取效果
(未拿取)


(拿取时)

 
实现该功能主要用到以下脚本
ItemPackage :
类似列表的东西,告诉生成机制在哪一个阶段用到了哪一个Object。
交互过程:当手柄跟碰撞体发生碰撞时,激活生成机制,生成我们需要拿取的物体,然后显示拿起物体的轮廓,当放下时跟这个轮廓碰撞时,会自动脱落手柄。
ItemPackageSpawner:
实现交互的逻辑,基于生成机制。
生成机制: 当碰撞发生时,Spawner会生成一个物体放在手里,同时生成一个轮廓,当手里物体跟轮廓碰撞再次发生的时候,就手中的预制体脱离手柄,然后在原来的地方生成一个物体的预览。
ItemPackageReference:
因为在拿取时,需要同时抓取两个物体,物体需要知道自己都是跟谁连接在一起的,它的ItemPackage是谁。
ItemPackage应用
第一步:首先创建一个场景
新建一个Scene,然后从SteamVR的Interactive System中找到Player预制体,放到场景中,然后在场景中简单构造一个应用环境(放一个地面,一个cube当作桌子来放置我们的弓等)。


 
第二步:创建一个拿取弓的碰撞区域
我们这里新建一个Sphere来作为碰撞区域,这里的Sphere只用来做碰撞区域,它的MeshRender的enable去掉选中,然后添加ItemPackageSpawner组件。在ItemPackageSpawner的组件下有属性ItemPackage是要指定的,我们还没有接下来就是要创建这个Item Package。

Item Package Spawner 设置:


 
ItemPackageSpawner组件的属性:
ItemPackage    需要指定,这里指定了每个阶段该显示的object
Require Trigger Press To Take 需要按下Trigger键拿起
Require Trigger Press To Return 需要按下Trigger键放回
Show Trigger Hint 显示提示,当发生碰撞时显示
Attachment Flags 吸附
Attachment Point 自定义吸附
Take Back Item 该物体可放回
还有两个事件
PickupEvent() 拿起触发事件
DropEvent() 放下触发事件
第三步:创建ItemPackage
因为它不是一个有形可见的预制体,用来指定不同阶段显示不同物体的。新建一个empty然后命名为“ItemPackage”,然后给它添加一个脚本ItemPackage。


 
ItemPackage组件的属性:
Name 名称
Package Type 设置双手持握、单手持握
Item Prefab 按下Trigger键生成的物体
Other Hand Item Prefab (双手模式下)另一只手生成的物体
Preview Prefab 放回原处时,预览的物体
Faded Preview Prefab (轮廓)拿起时,原处有的轮廓物体
第四步:制作不同阶段的物体
根据ItenPackage需求,我们要创建4个物体(弓、箭、弓Preview、弓outline)。
找来弓、箭的模型,然后用弓的模型做出弓Preview和弓outline。
要对弓和箭挂载ItemPackageReference脚本、DestoryOnDetachedFromHand脚本。
弓Preview不需要做修改,他没有交互只用来预览;弓outline要给弓换shader显示成轮廓,在Project下搜索“outline",通过预览找到outline材质换上。
效果如下:

 





 

猜你喜欢

转载自blog.csdn.net/u013774978/article/details/130022785