UE4中类的继承进阶

一、创建多模板的蓝图工程

1. 打开UE4,创建一个具有初学者内容和第三人称视角(Third Person)的项目。

2. 在内容浏览器中选择添加新的蓝图功能模板或内容包,选择第一人称视角(First Person),会在内容浏览器中出现First Person的文件夹。

3. 切换成第一人称视角。
a. 在当前地图中【设置】->【世界设置】->【GameMode Override】 修改成 FirstPersonGameMode,点击保存。
b. 删除掉地图中原有的玩家角色(或保证地图中玩家角色的【Auto Possess Player】属性为Disabled),点击保存并运行。

PS:若地图中存在玩家角色且【Auto Possess Player】属性为Player 0(单机游戏为0),地图会主动切换到该玩家的视角,若都为Disabled,则按照世界的游戏模式设置并出现在游戏起始位置。

4. 切换成第三人称视角。
a. 在当前地图中【设置】->【世界设置】->【GameMode Override】 修改成 ThirdPersonGameMode,点击保存。
b. 拖动第三人称对象到地图上,设置其【Auto Possess Player】属性为Player 0,点击保存并运行。

PS:若拖动的第三人称对象的【Auto Possess Player】属性为Disabled,则会被当成地图上的物体,而在起始位置出现一个新的第三人称视角对象。


二、创建材质实例

1. 创建文件夹
a. 在项目中Content根目录中创建文件夹NewBP,来保存创建的实例。
b. 在NewBP中创建Maps来保存地图文件(*.umap),将第三人称地图ThirdPersonExampleMap.umap另存到NewBP的Maps文件夹中并命名为NewBPMap。
c. 在NewBP中创建Materials来保存材质文件(*.uasset)。

2. 创建材质
a. 创建一个父材质文件M_BaseColor,并双击打开。
b. 添加Constant3Vector节点(按住键盘3点击左键,或者在搜索中搜索3),节点上点击右键,选择Convert to Parameter(转换成参数)。双击颜色区域,修改成白色,对比度为1,起名为Color。将第一个Color的输出节点连接在M_BaseColor的基础颜色上,进行保存。
c. 在内容浏览器中右击M_BaseColor。选择创建材质实例,命名为MI_Color_0(MI代表材质实例),采用默认颜色(白色);复制MI_Color_0并命名为MI_Color_1,将颜色变为蓝色;复制MI_Color_0并命名为MI_Color_2,将颜色变为红色;复制MI_Color_0并命名为MI_Color_3,将颜色变为绿色。


三、蓝图类的继承

1. 创建一个蓝图类BP_A,继承Actor,放置一个根元素Static Mesh,命名为MeshA,【Static Mesh】选择Shape_Cube,【Materials】选择MI_Color_0。

2. 创建一个蓝图类BP_B,继承BP_A,在MeshA下放置一个Static Mesh,命名为MeshB,【Static Mesh】选择Shape_Cylinder,【Materials】选择MI_Color_1。

3. 创建一个蓝图类BP_C,继承BP_B,在MeshA下放置一个Static Mesh,命名为MeshC,【Static Mesh】选择Shape_Sphere,【Materials】选择MI_Color_2。

4. 创建三个蓝图类的对象放置在地图上并调整好位置,运行查看效果。


四、组件的继承

1. 在蓝图类BP_A中添加一个Text Rander组件,命名为BPObjectName,调整字体大小,旋转、位置和对其方式,修改【Text】为BP_A,这样BP_A、BP_B、BP_C的对象都具有了BPObjectName属性且文本内容都是BP_A。

2. 打开蓝图类BP_B,将BPObjectName的【Text】属性修改为BP_B,这样BP_B、BP_C中BPObjectName组件都会显示BP_B。

3. 打开蓝图类BP_C,将BPObjectName的【Text】属性修改为BP_C,这样BP_C中BPObjectName组件会显示BP_C。


五、公有变量

若地图中产生多个BP_C类的对象,且需要显示BP_C1、BP_C2等具体名称,也就是同一个类的不同对象要体现出差异性。要通过设定变量来实现,仅通过蓝图类的组件继承是实现不了的。

1. 将所有的BPObjectName的【Text】属性清空。

2. 在蓝图类BP_A中添加字符串类型变量ObjectName,设置为共有的,否则关卡蓝图上找不到这个属性。
a. 【细节】->【分类】中修改变量的分类名为:自定义。
b. 在BP_A中的事件图表中,设置当场景开始(Event Begin Play)时,调用BPObjectName的Set Text节点,根据ObjectName修改Text的值。

3. 在地图上通过【细节】->【自定义】->【Object Name】设置每个对象的名字。

4. 运行查看效果。


六、蓝图类中的Construction Script

Event Begin Play是当点击Play后地图加载完毕后运行;Construction Script是当蓝图类非运行状态时就会触发的函数,在非运行视口中就可以展现结果。当运行时间早于Event Begin Play。

将设置对象名称的方法从Event Begin Play节点换成Construction Script时,对每个名称的修改可以体现在非运行状态的视口中。

Construction Script可以做在编辑器模式下需要实时展现的效果。


七、继承的意义

可以通过继承关系的设计来减少程序编写工作量,也可以在修改父类物体时,所有子类继承来的该物体全部发生同样的变化。


版权声明:本文为CSDN博主「幽冥丶虾米」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_14930205/article/details/78599335

最新文章