UE4 蓝图 工厂模式和建筑预览 《论张三进厂的第一步》

481 阅读2分钟

UE4 蓝图 工厂模式和建筑预览 《论张三进厂的第一步》

开始直接抛结论

就三步走
先建立预览模型,再创建实际生产模型,最后删除预览模型。
主要调用GetHitResultUnderCursorByChannal获取鼠标位置,以及SpawnActor等常见命令。
可以增加碰撞检测 如果有需要
可以增加模型旋转 如果有需要

简陋的HUD 先从皮开始讲

image.png

image.png

需要创建对应的接口
BuildingMasterClass对应创建的Class类
工厂模式的体现,你放Class直接生成一个对应的实例

image.png

有需要就来一个结构 去放类似的数据

image.png

之后可以再蓝图中调用数据生成对应的Actor

预览BP BuildingPreviewBP 《只停留在预览模式中的模型》

实现的接口 Construct Building

见词生意
就是创建预览ACOTR的一套龙
局部和整体逻辑类似
erDiagram
BuildingPreviewBP ||--o{  ConstructMasterBP: entrust
BuildingPreviewBP ||--o{  PreviewActor: newAndDestory
ConstructMasterBP ||--o{  RealActor: new
工厂和代理的体现
graph TD
Start --> new一个Actor
new一个Actor --> 把之前的内容清理
把之前的内容清理 --> 创建一个新的显示模型
创建一个新的显示模型 --> 删除预览Actor
Construct Building的逻辑

image.png

DestoryPreview Function 清空操作

image.png

Gate之后为移动预览模型服务
这里设置模型Rotation重置 具体看需要

SpawnPreview Function 创建预览模型

image.png

Tick Event 移动预览模型

image.png

这里结合Gate操作食用为了保证在预览模型创造出来后才进行Actor位置,overlap之类的判断。

PlayController 总控制器《上帝之手》

RotationBuilding《90°》

image.png

我反正把旋转预览模型操作反这里了
如果自己觉得耦合度高,有类似需求可以放在其他地方

CreateConstruct《第二条龙》

image.png

这里用点击操作来确认放置模型位置
需要配合状态变量判断进入该步骤

image.png

逻辑和之前的BuildingPreviewBP类似
其中进行了结构体信息的传递 最后删除预览模型 实现Real模型代替的效果。

SetConstruct 《填写信息》

image.png

这里回到BuildingPreviewBP中
我需要他的Location Rotation等信息注册到ConstructMasterBP中
这里拉了一长串的就是结构体

ConstructMasterBP 《洋葱拔完最后其实很简单》

实际模型的生成者

image.png

目前只有一个function
读取结构体然后生成Real模型

凑合的工厂模型显示

image.png