UE4纯蓝图-生存开发游戏

1.第一人称和第三人称视角的切换

1.首先先绑定输入,按v进行视角的切换。

2.创建一个枚举存放视角状态(第一人称,第三人称)

 3.在小白人中创建一个枚举类型的变量,进行蓝图间的通信,调用枚举中的值。

 4.实现:当处于第一人称视角时,按v切换视角,获得第三人称摄像机的控制权,隐藏第一人称的模型,改变枚举变量的值为第三人称。

具体蓝图

Switch on ViewType:选择性执行,执行值相等的引脚。
Current View Type:枚举型变量,对枚举进行引用。
Deactivate:使其失效(让相机失效)
Activate:使其生效(让相机生效)
Set Owner No See:使其看不见。

5.可以将上述操作变成函数,方便调用,提高复用性。同时初始化状态。

 2.基本属性的创建

2.1.用结构体创建属性,方便用于多个角色。

PlayState:角色状态

 Health:生命值

 Hunger:饱腹度

 spirit:体力

 Thirst:耐渴度

 2.2也可以直接定义变量

 2.2 初始化属性

 Initialize Properties:是塌陷成节点,里面的内容

 2.3 持续减少数值

Get World Delta Seconds: 消除帧率的影响
Clamp : 让值在Min 和Max 之间
Set Float(by ref): 传入引用,通过引用修改值
Gate:流程控制,当open时执行,close时不执行

3 运行UI_Runtime)

整体效果

 UI布局

 在GaneInstance中实现UI的显示,在GameInstance中实现是因为,该UI只显示在自己的界面上

 Create Widget:创建UI(Class:创建那个UI)
Add to Viewport:将UI加入到窗口中
Set(将UI设置为变量,方便以后使用)

 在GameMode中调用UI

Cast to SurrvivalGameInstance:类型转换,不同蓝图之间的通信。UI

关联UI和数据

通过bind进行绑定

具体实现

进度条改变颜色,首先先bind 

 通过HSV实现颜色的逐渐改变

 Map porgress Bar Color,HSV to RGB(H为120时为绿色,为0时为红色)

 4.计时器

4.1 初始化变量

SecondsPerDay(游戏中一天有多少秒),CurrentDay:当前是第几天,CurrentHour:当前是第几小时,CurrentMinute:当前是第几分钟

4.2 具体实现,创建一个GlobalTimer的蓝图类

Get Game Time in Seconds:获取游戏中的时间,以秒为单位,会受暂停等因素的影响
Division(whole and remainder): 除法运算,返回整数部分,同时也可以获取余数
Append: 字符串的添加 

 4.3 创建UI(在Runtime中添加)

 在GameMode中创建一个GolbaTimer变量,作为引用,方便其他蓝图使用

GameMode获取到Globaltimer,将获取到的实例赋值给GolbalTimer变量

Get All Actor Of Class:获取场景中某个类的所有实例,得到的是一个数组
GET:获取数组中的值,为0即获取第一个,因为场景中只有一个Globaltimer

在UI_Runtime中关联数据,从GameMode中获取GlobalTimer,同时将其设置为变量,方便其他蓝图引用

 绑定数据

具体实现, 通过创建一个GlobalTimer类型的变量获取GolbalTimer的信息,从而实现蓝图之间的通信

 Format Text:用于非字符串的拼接

Set Day Time里的类容,小于10时,前面补0,如09:02
ToText:转换成text类型

Select:根据index选择执行流(上图中如果传入的值小于10,执行true,否则执行false)

昼夜交替 

先改变Light Source,将其变成Movable

将其变成动态光,随时间的变换而变换 

GlobalTimer所有蓝图

SetActorRotation:设置Actor的旋转角度
Update Sun Direction:更新太阳的角度
Recapture Sky:重新获取天光

当时间大于6, 小于18时为天黑,当时间等于6时,发出“天亮了”通知,当时间等于18时,发出“天黑了”通知。

 GlobalTimer所有变量

IsDayTime:是否为白天,为true则为白天

SunLight:获取场景中的灯光

 SkySphere:获取场景中的SkySphere

 SkyLight

5.拾取

 1.创建一个接口,在接口内实现PickUp

 在需要实现接口的蓝图中添加接口

 Does Implement Interface:是否实施了接口

这里真正运用接口函数,发送消息,有就实施,没有就不实施 

 

 可拾取的物品,实施接口中的Pick UP后被销毁
DestoryActor:销毁Actor

拾取面板 效果图

拾取面板UI布局

拾取物品的信息将显示到itemContainer中,因此将其设置成变量 ,同时将其暴露出去

拾取面板具体实现
Create Widghet:创建UI
Set Icon and Text:添加图片和文字
Add Child:为Item Container添加子物体,既往Item Container中添加数据
ADD:向字典中添加数据,以Item Base为key,以UI-PickableItemSlot为value(物品->UI)
Related Item:将拾取物品赋值给Related Item,而Related Item在PickableItemSlot(UI->物品)

Bind Event to Item UIClicked:绑定UI_PickablePanel中的事件分发器 
Inform:监听事件
Pick Up Item:拾取物品,在SurvivalCharacter中

删除UI的的物品信息
FIND:在字典中查找值
Remove Child:删除

 Actor-UI 是一个字典

拾取面板中每个物品UI布局

拾取面板中每个物品具体实现
Text Block 0:及拾取物品的文字显示(面包,生肉之类),将其设置成变量,通过传参的方式进行赋值。
SetText(Text):设置文字
Set Brush from Texture:设置图片(通过将image_0设置成变量,通过传参的方式赋值)

 ItemUIClicked:事件分发器
Call Item UIClicked:调用事件(Clicked Item UI:将自身传递出去)

字段关联 (将地上的物品与UI相关联)

在PickableItemSlot中设置一个变量 

在PickablePanel中设置一个字典 

 

在GameInstance中可视化UI,同时将UI界面设置成变量,方便其他蓝图调用。

 在SurvivalCharacter中创建一个变量去调用GameInstance中的拾取面板UI

 

 获取GameInstance,通过Convert to import cast让其没有执行流,同时将其设置成变量

 在SurvivalCharacter中创建一个数组,检测到可拾取的物品时,将其加入到数组中


SurvivalCharacter调用拾取UI
Cast To ItemBase:类型转换,只有触碰到可拾取的物品时,才调用拾取UI
ADDUNIQUE:只添加一次,防止重复添加

Show Pickable Panel:通过调用该事件创建UI ,该事件在GameInstance中
Add Item:添加可拾取的物品到拾取面板中,该事件在Pickable Panel中
通过Item Base去获取结构体中的信息,然后给可拾取物品赋值

创建一个结构体存储物品信息

 在Item Base中创建一个变量去获取结构体中的信息 

拾取功能的实现 

在SurvivalCharacter中实现此方法
Survival Player State:获取Player State中的消息,及背包中的数据
Try Add Item:调用Inventort中的Try Add Item事件尝试添加物品
GetClass:获取对象类型
Get Class Defaults:获取默认值

离开拾取范围

Cast To ItemBase:类型转换,离开可拾取物品的范围
REMOVE:删除Pickable Items数组中的值

Remove Item:删除UI中的信息,该事件在Pickable Panel中
LENGTH:数组长度
Hide Pickable Panel:隐藏UI,该事件在Game Instance中 

6.背包

创建结构体(每次拾取物品都会传递一组一样的消息)

 创建一个PlayState

在PlayState中创建一个变量获取Inventory中的信息

初始化 

 创建一个基础Object的背包类(Inventory)

 Inventory的变量

Content:字典类型,背包里的物品

 测试背包是否还有空间

Break Struct_ItemSlot:获取结构体中的数据
Get Class Defaults:获取默认值

 尝试添加物品

 详细蓝图

Return Node:表示添加失败 

 

 

 

 

 删除物品

 详细蓝图

 

 

 

背包UI 

具体蓝图 

 变量

 详细蓝图

AddSlot

 Updatecount

 ItemClicked

 详细蓝图

RemoveSlot

背包物品UI

 具体蓝图

 定义一个Struct Item Slot的结构体变量,用于给图标赋值
SetText:设置文本信息;
Set Brush from Texture:设置图标;
Set members in Struct_ItemSlot: 设置结构体变量

 GameInstance所有蓝图 

 

 

 Show Panel具体蓝图

? Is Vaild:是否为空(为空才创建UI,不为空则不创建UI)
Is in Viewport:是否已经在场景中了
在函数中要赋值只能通过传入引用赋值,勾选要赋值的Pass-by-reference

通过Set By-Ref Var进行设置 

 

Set Input Mode Game And UI:人物和鼠标都可以移动
 Show Mouse Currsor:鼠标是否可见

 Hid Panel

Remove from Parent:移除UI

SurvivalChara所有蓝图

人物属性减少速度

Decrease Value

 视角切换

 Toggle View

 初始化

 Initialize Properties

 生成可拾取物品的UI

 Show Pickable Panel

 Show Panel

 HidePanel

 AddItem and Remove Item

 离开拾取范围

 拾取物品

 打开/关闭背包

 受到攻击而扣血

 通知事件

详细蓝图 

猜你喜欢

转载自blog.csdn.net/qq_52825422/article/details/125891062