制作密码锁
- 创建画布面板
- 统一网格面板(uniform grid panel)- 设置大小
- 放入按钮,然后将按钮的模式设置成水平、竖直填充、再对所有的按钮进行缩放
- 替换每一个按键的图标,设置按下和抬起的两种图标
- 放置输入密码的文本框,并将其设置为变量
- 设置两个变量一个变量用于记录密码,另一个保存正确密码,两者之间进行判定
- 编辑每一个按钮的蓝图-(将类似的模块打包成一个函数方便复制)- 在按键按下时将一个数字记录在变量中,再将变量输出到密码的文本框中。(需要从已经是变量的密码文本框的变量中拉出来(set text-内容)这个蓝图块来进行修改)
- 在关卡蓝图中创建 event BeginPlay -连- create Widget(选择密码输入的界面) - add to viewport 将这个组件添加到视口,用于测试
- 删除按钮--在点击时直接让记录的变量为空,并将空内容输出到文本框内
- 确认按钮--将两个变量进行对比(branch),相等进入下一步,(销毁窗口的蓝图块-Remove from Parent)
- 在要触发的机关附近设置碰撞体,在角色与碰撞体重叠时触发提示,离开后关闭提示,会用到的蓝图块(On Component Begin Overlap - Cast To BP_... - 从类构建对象 - 添加到视口- 将构建的对象提升为变量(用于在角色离开时移除该对象)- do once(只执行一次的话需要添加的蓝图块)
- 在玩家控制角色的地方设置交互按键(E)- 使用Get Actor Of Class蓝图从之前创建的门的蓝图获取创建出的提示词窗口提升出来的变量,将他从视口中-remove from parent掉 - 然后添加之前制作的密码输入的窗口,并将它Add to Viewport。
- 添加自定义事件(add Custom Event)开门,在门的蓝图底下创建 - 创建时间轴(用来记录动画)进入时间轴内创建规定,设置运动的曲线 - 时间轴连接Lerp(Vector) 用来移动,其上的A就是物体原本的位置,B点创建一个矢量变量来控制运动距离 - 连接到Set Relative Location,用来确定运动的物体如何运动。
- 将这开门的自定义事件(开门)放置在正确输入密码后 - 使用Get Actor Of Class获取门的蓝图,然后调取其中的自定义事件(开门)
- -- 修改在输入密码的交互中为确认按键添加输入错误的提示,在每次输入时进行判定,文本框中是否有错误的提示信息,如果有将无法输入。
制作高亮轮廓
- 在添加材质的物体上赋予高亮材质,然后打开自定义深度通道 - 随后在PostProcessVolume中查找arra..(后处理材质)中添加高亮材质,然后勾选无限范围
- 制作进入范围内物体高光的方法, 就是控制渲染自定义深度通道的开关使用到的蓝图块是(set render custom depth)是从静态网格体中调取的。
- 范围内检查需要设置两个东西,一个是重叠一个是退出重叠,重叠的对象需要通过cast to..来调取
蓝图接口
- 蓝图接口:制作一个空壳然后在内部创建函数,在每一个需要交互的里面放置一个接口函数,并在这个函数事件后写要执行的操作,然后在玩家控制的角色交互界面执行接口,让接口去广播判断需要执行的接口函数
- 制作了两个触发事件,一个是拿起物品,一个是召唤出开门的密码锁界面
- 在角色自身的蓝图界面内进行判断玩家的碰撞体是碰撞到了某一个物体,然后对物体进行判断是否有“交互”接口,如果有,执行其接口事件。
物品拾取
- 拿起物体的事件: 先取消物体的碰撞体(Set Actor Enable Collision)或者使用(Set Collision Profile Name)来修改物体的碰撞属性,然后使用(Attach Actor To Component)将被拾取物拣取到玩家的镜头前面 -(使用Get Player Camera Manager连接Transform Component再连接到Parent),来实现拣取,使用(Move Component To)平滑的移动到目标位置,在Component处连接要移动的对象的父层级以确保所有需要移动的物体都被移动,然后在Target Relative Location中确定要移动的具体位置,在拾取物品后Get Player Controller来连接Disable Input和Enable Input来禁用玩家的控制器
对话系统
- 对话系统:
- 创建蓝图类的枚举,然后添加两个枚举器,一个叫PassThrough(穿过;通过;经过)一个叫Updated(更新);
- 随后创建一个Actor组件命名为AC_Dialogue_Base(对话基础)
-
然后再其中制作函数
-
Open Conversation 打开对话
- 蓝图中创建Create Widget(W_Dialogue) -> set-W_Dialogue -> Add to Viewport -> Progress Dialogue
-
Close Conversation 关闭对话
- 负责关闭对话 获得Dialogue Widget -> Remove from Parent
-
Progress Dialogue 推进对话
- 设置对话索引(Dialogue Index)为-1 -> Dialogue函数
-
Dialogue 对话
-
Add Dialogue 添加对话
- 设置三个输入口,类型为文本:Speaker,Dialogue,OptionsText(数组)
- Return Node 创建输出
- Enum Dialogue State - State(命名)
- 整数 - Option Index(命名)
- 获得Dialogue Index -> ++ -> Branch
- True -> Return Node
- 输出设置 state - PassThrough
- Find -> Option Index
- False -> Update Dialogue Text (从Dialogue Widget中创建出的函数,连接到对应的接口) -> Return Node
- 输出设置 state - Updated
- True -> Return Node
- Branch的判断条件是 Dialogue Progress 的 Dialogue Index 的数值 -> Find
-
Update Selected Option 更新所选选项
- 获取Dialogue Progress -> ADD(映射) -> Progress Dialogue函数
- 将ADD上的两个输入作为整个函数的输入命名为Progress Index, Option Index
- 获取Dialogue Progress -> ADD(映射) -> Progress Dialogue函数
-
Clear Dialogue Progress 清除对话进度
- 获得Dialogue Progress -> CLEAR
-
Remove Dialogue Progress 移除对话进度
- -> For Loop -> REMOVE
- For Loop 上的Last Index输入口接出函数命名为Progress Steps
- Index与Dialogue Index相减 -> REMOVE
- Dialogue Progress -> REMOVE
- -> For Loop -> REMOVE
-
Set Dialogue Tree Index 设置对话树索引
- -> set Dialogue Tree Index -> Clear Dialogue Progress
- 将Dialogue Tree Index 接出去
- -> set Dialogue Tree Index -> Clear Dialogue Progress
-
-
创建变量
- Dialogue Progress - 整数枚举 对话进度
- Dialogue Index - 整数 对话索引
- Dialogue Tree Index -整数 对话树索引
- Dialogue Widget - W_Dialogue 对话部件
-
- 创建UI的蓝图
-
W_Dialogue 对话部件
- Canvas Panel 外观调整根据主UI自行设定
- Vertical Box
- 覆盖
- 垂直框
- 文本 - Txt_Speaker
- 文本 - Txt_Dialogue
- 垂直框
- 垂直框 - Options Container
- 覆盖
- Vertical Box
- 用来存放对话界面
- 创建函数
- (提示:更改输入口的上下顺序可以影响到蓝图块的接口排序)
- Update Dialogue Text
- 设置四个输入:Dialogue Index整数, Speaker文本, Dialogue文本, OptionsText文本数组
- 函数蓝图
- -> Clear Children -> SetText(Txt Speaker) -> SetText(Text Dialogue) -> For Each Loop -> Construct Object from Class(W_Dialogue Option) -> Add Child
- 创建变量 - 可编辑的实例|生成时公开
- Owning Dialogue Component-AC_DialogueBase
- Canvas Panel 外观调整根据主UI自行设定
-
W_DialogueOption
-
创建变量(可编辑实例、生成时公开)
- Owning Dialogue Component(拥有对话组件) - AC_DialogueBase
- Option Text - 文本
- Option Index - 整数
- Dialogue Index - 整数
-
size box 命名的都是变量,其余不是
- overlay
- image - img_ Background
- Horizontal Box
- image
- text - Txt_ OptionName
- button - btn_ Option
- overlay
-
制作蓝图
-
Event Construct
- -> Set Text(text) (Txt_OptionName) <- Option Text
-
On Released 松开
- -> Update Selected Option (Owning Dialogue Component)
- Dialogue Index -> Progress Index
- Option Index -> Option Index
- -> Update Selected Option (Owning Dialogue Component)
-
(自由设置外观,需要认识的蓝图块为 Set Color and Opacity 属性为外观)
- On Hovered 悬停
- On Unhovered 为悬停
-
-
-
创建场景的记录
-
创建新的关卡场景 - 窗口 - 环境光混合器,创建其中提到的全部,并将体积雾气勾选,同时开启skyLight中的实时捕获 - 选择地形模式后 - 创建
-
过滤器器可以直接筛选出静态网格体
-
创建人物角色模型来作为参考 - 放入场景中
-
模型场景,素材制造
- 墙
- 门
- 柱子
- 灯
- 电梯
- 桌子
- 床
- 物资箱子
- 楼梯
- 护栏
- 问题
- 玩家如何被wasd控制