目录
一、给我一个力,可以推动地球
【目标】向球体施加一个推力让它前进
步骤1、建立一个球体,并给予材质
之前的文章中都是使用坐标变化的方式,使物体发生移动。但是在自然界中,物体发生移动,一定有力的作用,我们如何来模拟这种自然规则呢?
首先得到我们需要的材料,一个地球。用地球是因为可以更好的看出滚动的情况。照一张世界地图的图片放入文件夹中就可以导入工程中进行使用。导入后将图片拖到物体上,就可以更换贴图,非常方便。
步骤2、推它
在推动它之前,需要设置好它的规则。这里告诉物体,你是一个成熟的球体了,需要自己遵守物理法则了。
1、添加碰撞体
右键列表中的这个物体,选择编辑,打开网格编辑器。
在菜单中选择碰撞体,选择添加简单碰撞体,即可为物体添加一个无形的框体,用于与外界接触产生反馈。
可以看到球体外部出现了绿色线框,这个框就是球体无形的支架,完成后保存。
2、开启物理引擎
离开网格编辑器,在外部选择该物体,在Detail面板中选择physics快捷跳转到物体引擎区域,将simulate physics打开,至此,你就为这个物体赋予了万有引力。
落地了!
3、施加一个力
这个地球终于不是一个漂浮在空中的球了,我们为他编写蓝图,这里用到add force的节点,是physics下的节点,如果找不到需要去掉情景关联的选项。
【知识点1】添加碰撞和物理引擎设置
如果一个物体想要使用unreal的物理引擎,必须添加的两个内容。
第一个是碰撞体。对应unity中的刚体(rigidbody)碰撞体是用于响应外界环境的一个看不见的边缘。举一个简单的例子,一个仓鼠球中软软的就是仓鼠,外面的外壳就是碰撞体碰撞体可以和仓鼠一样大,也可以比它大得多(也可以比它小哦,可以把仓鼠视为能看见但摸不到的东西)。
打开actor,点开菜单,可以添加简单碰撞体,这个简单碰撞体适用于简单模型的,由于面数少,计算简单,因此不会影响性能。
第二个是开启物理引擎。在自然界中有各种各样的力,有重力、引力、斥力、拉力、压力等等。自然界中所有物体,必须遵守这些力,但是引擎中的物体天生是没有受力的。如果要模拟自然规则,必须为物体打开这个开关,力才会作用于这些物体上。
在关卡模选择需要开启物理引擎的actor,可以在细节detial面板中找到physics,勾选里面的simulate physics即可使当前acto应用于物理引擎。
【目标达成啦!】向球体施加一个推力让它前进
二、当地球撞向墙壁
【目标】撞击后打印出物体名称
步骤1、设置好撞击环境
需要撞击还需要给地球一个目标,先新建一面墙作为撞击的目标。
为墙壁添加碰撞,步骤与给球体添加一致,只不过是球形碰撞改为盒形碰撞。如果想不起来了可以看一下上文。
给地球打开撞击事件设置。
步骤2、选中墙壁,添加名为wall的tag
步骤3、写蓝图
当碰到tag为wall的物体时,打印出物体名称
【知识点2】碰撞事件的发生设置
对于需要对碰撞产生事件的物体,需要在细节面板中的collision上勾选simulation generates hit events,即可在蓝图中调用碰撞事件
【知识点3】tag的使用
这里用到了一个tag,主要用途是在相同类型的物体中,给一个第二层的筛选功能。筛选后,使用碰撞事件时,可以选择与什么样的tag产生碰撞事件。在其他使用到物体类型的地方,也可以使用tag。这里的用法与unity中完全相同。
【目标达成啦!】撞击后打印出物体名称
三、也不是一定要撞的啦
【目标】进入一个区域后触发
步骤1、调整为重叠设置
还是那个地球,先给他开启允许重叠的设置。
接着这里注意,需要将被碰到的墙体(注意!不是球体,如果改了球体,球体就失去了原本的碰撞性质)的碰撞预设值修改为所有开启重叠的物体。
步骤2、写蓝图
这里的触发事件是选中球体创建出来的
完成后可以看到球体穿墙而过,并留下一个文字标记。
这个功能可以用在游戏很多地方,比如玩家走过一个金币时,金币并不会和玩家发生碰撞,而是触发了一个吃金币的行为。
进阶步骤3:添加触发器
在设计游戏的时候,有时候会用到当进入一个区域时,触发某种行为。这里的触发用到的方法不是碰撞,而是重叠。
这里在墙壁前添加了一个盒体碰撞器(trigger box)
设置好重叠设置后,添加了一个非常简单的蓝图。
完成后运行一下,太神奇了,当球体撞到一个无形的墙时,它会瞬间移动到其他地方。这不就是游戏中传送门的设定么?
【知识点4】碰撞设置与重叠设置的区别
重叠和碰撞的设置方式有所区别,碰撞是在需要发生碰撞事件的物体上设置,重叠是需要重叠双方都设置。
碰撞设置方法是:
1、在需要发生碰撞的双方物体上添加碰撞体
2、需要相应物理力学的物体上开启simulate physics
3、在需要发生碰撞事件的物体上开启simulation generates hits events
重叠设置方法是:
1、在重叠双方上开启generate overlap events
2、至少有一方需要被穿透,被穿透的一方将collision persets修改为overlapAll(注意一旦选择了这个,代表这个物体会穿透一切,连地板也不行,所以选择后需要将物理引擎关闭,防止重力带着物理一直下落)
3、如果使用的是触发器,则将collision persets修改为trigger
【知识点5】碰撞事件和重叠事件
使用OnActorHit触发碰撞事件,碰撞事件会在物体接触时一直触发
使用OnActorBeginOverlap、OnActorEndOverlap触发重叠事件,只在进入和离开时触发一次
【目标达成啦!】进入一个区域后触发