。
小提示:选中左侧目录,可快速找到所需内容
一、效果展示
拿起物品,桌面产生该物品轮廓。将手柄放到一定位置,可放下该物品
实现该效果用到的组件:
- ItemPackage:交互过程中用到,设定轮廓gameObject、预览ganmeObject、放在手里的预制体,类似物品的列表
- ItemPackageSpawner:实现交互过程的逻辑,基于生成机制。完成碰撞时生成物体放在手里,生成轮廓,再碰撞时放回
- ItemPackageReference:设定物体与组织的关系。项目涉及两个物体的同时抓取,所以需要告诉生成的预制体,他是跟谁连接在一起的,它的ItemPackage是谁
二、开发过程
下面我们开始做:
当手柄与一个碰撞体发生碰撞时,激活它的生成机制,生成我们想要拿到手里的物体。
如果有相关属性,会把该物体轮廓显示出来;
如果设定了可以放回,当我们放下时,跟碰撞体接触之后,物体自动脱离手柄,放回桌面。
1、添加碰撞体
该碰撞体作用是检测手柄是否与该碰撞体碰撞,从而完成生成拿在手里的物体等操作。
2、ItemPackageSpawner组件
观察该组件可以发现,该组件需要ItemPackage选项才能工作,因此,我们还需制作一个带有ItemPackage组件的gameObject给它赋值,来完成设置。
- RequireTriggerPressToTake:选中此项,按动Trigger键时,才能将物体拿起来
- RequireTriggerPressToReturn:选中此项,按下Trigger键,才能将物体放回
- ShowTriggerHint:选中此项,当手柄与碰撞体碰撞时,手柄的UI会提示产生碰撞,提示碰撞信息“Pick Up”,该提示信息可在代码中更改
- AttachmentFlags、Point:具体请查询上一章信息
- TakeBackItem:选中此项,物体是可被放回的
- PickupEvent:拿起激发事件
- DropEvent:放下激发事件
3、制作ItemPackage预制体
根据2的原因,现在制作ItemPackage预制体,制作完成后将其赋值到ItemPackageSpawner脚本上。
- PackageType:One Handed(一只手实现该效果)/Two Handed(两只手实现该效果)
- ItemPrefab:按下Trigger键,将生成在手上的物体
- OtherHandItemPrefab:PackageType为两只手时,指定在另一只手上要生成的物体
- PreviewPrefab:预览的Prefab,即放在桌面上的Prefab。我们可以将该预制体做的和拿在手里的一样,也可以不一样。即我们拿起的物体和放下的物体可以是两个不一样的Prefab
- FadedPreviewPrefab:轮廓的Prefab。制作该轮廓,只需像模型的预制体添加“ItemPickupOutline”这个Material即可生成
4、ItemPackageReference组件
该组件放在ItemPrefab和Other Hand Item Prefab上,即生成在手上的物体这两个Prefab上。
它告诉生成机制,该Prefab属于哪个ItemPackage
5、当前效果
6、DestroyOnDetachedFromHand组件
当配置完成上述组件,运行时却发现,放回物体后,左右手上的物体虽脱离了手柄,却没有销毁。
这是因为ItemPackageSpawner组件虽完成了当手柄接触碰撞体实现物体脱离效果,却没有写销毁的代码。
这时我们只需要给生成在左右手上的这两个预制体添加ItemPackageSpawner组件即可。该组件完成了销毁的相关代码。
7、优化
通过上面gif,我们发现,台面最开始没有剑的模型。
现我们在挂载了生成机制ItemPackageSpawner的Sphere碰撞体下放上剑的模型(作为ItemPackageSpawner的子物体),并调好位置。运行我们会发现,拿起剑后,台面上的剑也会消失。
这是因为生成机制ItemPackageSpawner脚本中有以下代码,帮我们完成了该效果
void ClearPreview()
{
foreach (Transform child in transform)
{
if (Time.time > 0)
{
GameObject.Destroy(child.gameObject);
}
else
{
GameObject.DestroyImmediate(child.gameObject);
}
}
}
————————————————
版权声明:本文为优快云博主「橙子SKODE」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_38239050/article/details/81266974