
原标题:【UE4教学】从零开始学虚幻4游戏开发系列07
在上一课的内容中,我们成功的实现了让玩家角色可以在游戏场景中自由移动。但是如果你仔细观察,会发现代表玩家角色的方块可以穿越所遇到的一切障碍,显然这是不科学的!
为此,我们需要了解Collision(碰撞)的概念。
实现碰撞检测
可能你还在奇怪为什么方块没有发生碰撞,因为它似乎有一个collision mesh。需要注意的是,在虚幻4中,只有根组件才会进行碰撞检测。而我们的Pawn的根组件中不包含任何碰撞检测,因此可以穿越所碰到的一切障碍。
注意:一个在根组件中没有碰撞检测的角色仍然可能阻挡其它角色。但是仅限于原地,一旦我们让这个actor动起来,它不会和任何物体发生碰撞。
因此,为了使用collision mesh,必须让StaticMesh成为根节点。

在Components面板中,将原来作为DefaultSceneRoot子组件的StaticMesh拖曳到DefaultSceneRoot的位置,使其成为新的根组件。
当然,为了让碰撞生效,还有一件事要做。

AddActorLocalOffset的作用是让角色传送到新的位置,而Sweep选项则确保角色会和新旧位置之间的任何物体发生碰撞。
点击Compile保存蓝图的修改。


创建可拾取的物品
理论上来说,只要是玩家可以收集的东西都可以算作游戏物品。因此,我们可以使用BP_Banana来作为游戏中的物品。
为了检测代表玩家角色的方块是否碰到了物品,我们需要一个事件节点,当发生碰撞时触发该节点。root需要注意什么我们可以使用collision response(碰撞响应)来生成此类事件。
使用collision response还可以判断角色在碰到其它角色时如何响应。虚幻4中提供了三种类型的collision response,分别是Ignore,Overlap和Block。
下图显示了三种collision response之间的交互作用:

虽然我们既可以使用Overlap,也可以使用Block,但本教程中主要使用的是Overlap。
设置Collision Response

从Content Browser中找到并打开BP_Banana这个蓝图文件。选择StaticMesh组件,然后查看Details面板,我们可以在Collision部分设置collision response。

现在我们就可以指定游戏物品和玩家角色之间的collision response了。root需要注意什么
可以看到,这里有一个Object Type属性,它只是为了方便把相似的角色分组在一起。关于object type,可以查看官方文档中更详细的解释(https://docs.unrealengine.com/latest/INT/Engine/Physics/Collision/Reference/index.html )。
因为代表玩家角色的类型是WorldDynamic,我们需要把游戏物品的collision response更改为同样的类型。

在Object Responses部分将WorldDynamic的collision response类型设置为Overlap,如下图所示。

处理碰撞事件

在完成此步操作后,在Event Graph视图中会添加一个新的节点,如下图所示。

最后,在Event Graph视图中创建一个DestroyActor节点,并将其连接到刚刚创建的OnComponentBeginOverlap(StaticMesh)节点上。从这个节点的名字可以看到,它的作用就是将目标角色从游戏中移除。不过因为这里没有设置其它target,所以它销毁的对象就是自己。

放置游戏物品
根据自己的喜好,你可以在不同的位置放置多个香蕉。

好了,现在点击工具栏上的Play按钮,就可以开始收集香蕉了!

好了,本部分的内容到此结束,完整项目可以在这里下载。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-80615-1.html
5555555555555