14_P141~P147BreakableActors
141 Destructible Meshes可毁坏的网格
Using Chaos Physics to break pots使用混沌物理学来打破盆子
创建一个可被破坏的静态网格体
添加一个静态网格体道具
然后切换到破裂模式

选中场景中的静态网格体,点击创建,选择保存的位置

选择破裂方式

检查参数

确认无误之后,点击下面的蓝色按钮 破裂,在右侧破裂层级窗口就可以看到东西

我们可以继续选择右边的层级,针对某个层级进行“破裂”
然后我们回到默认模式,在右侧细节面板中,确保模拟物理效果已经打开


关闭表面的颜色

142 Field System Actors场域系统行为者
using Fields to break Destructibles使用场域来打破破坏性的东西
新建蓝图类 FieldSystem

添加 径向衰减 RadiaFalloff

拖到蓝图中,引出 设置径向衰减

拖出默认的场系统组件,添加临时场

其余设置如下



143 Creating Fields with weapons用武器创建领域
using the weapon to break destructibles使用武器破坏可破坏物
在weapon类中,添加一个函数
定义为BlueprintImplementableEvent,使其可以在蓝图中被重写

将这个函数添加在GetHit方法中,传入命中位置的坐标

重新编译后,来到weapon的蓝图中
添加一个场系统组件

其余设置与上节课相同

可以修改破碎物理体的内部设置

修改这里的碰撞形态,可以更好的实现碰撞的效果
如果是设置成盒体,碰撞之后的碎块就不会反复滚动
144 Breakable Actor可破坏的演员
Creating an Actor that Breaks创建一个会断裂的演员
新建一个C++类,BreakableActor.cpp,继承自actor
添加一个UGeometryCollerctionComponent对象
需要在build文件中添加GeometryCollectionEngine模块

然后在构造函数中初始化UGeometryCollerctionComponent对象,并将其设为根节点
然后在UE中,创建一个BreakableActor的蓝图类,打开后,添加之前创建的破碎网格体至其他集

拖至游戏中,也同样可以击碎
因为这个是个actor,所以我们可以在击碎的时候做些什么
145 Blueprint Native Events蓝图原生事件
Functions with C++ and Blueprint Functionality具有C++和蓝图功能的函数
如果我们希望一个函数可以在C++和蓝图中都可以重写功能,可以加上这个关键字
如果加上了这个关键字,这个函数就不能是个虚函数或者纯虚函数

改为:

在其他类中,如果继承了这个接口,需要重写这个方法,则需要在方法名后面加上_Implementation

如果在其他类中,需要调用这个方法,则需要在方法名前加上Execute_
注意,这里更改之后,参数前面会多一个UObject,他需要知道这个是C++的对象还是蓝图的对象

接着 我们就可以在BreakableActort的蓝图中,调用这个GetHit的方法


146 Breaking Sounds破碎的声音
Playing Sounds when we Smash a Pot砸锅时的声音
导入音效,创建MetaSound对象

设置BreakableActor的蓝图

进入游戏中之后有声音了
给BreakableActor设置消失时间 寿命
Set Life Span

C++实现了这个功能

使用事件触发的方式来设置actor的寿命
on Chaos Break Event

这样可以确保actor在触发破坏事件时,会正确的被销毁


这个也可以 DestroyActor SetLifeSpan都是销毁
