UFUNCTION(Reliable, Clien)
服务器调用,仅自己客户端执RunOnOwningClient>
UFUNCTION(Reliable, Server)
客户端调用,服务器执行<血量控制>
UFUNCTION(Reliable, NetMulticast)
服务器调用,服务器和所有客户端执行
同步服务器和客户端事件
宏标记
Reliable 重要 TCP
unreliable 不重要 UDP
UFUNCTION(Reliable, Clien)
服务器调用,仅自己客户端执RunOnOwningClient>
UFUNCTION(Reliable, Server)
客户端调用,服务器执行<血量控制>
UFUNCTION(Reliable, NetMulticast)
服务器调用,服务器和所有客户端执行
同步服务器和客户端事件
宏标记
Reliable 重要 TCP
unreliable 不重要 UDP
UPROPERTY(Replicated)
UPROPERTY(ReplicatedUsing="OnRep_ChangeCurHP")
Replicated 类似,但带有回调函数。OnRep_ChangeCurHP。
AActor 的变量不会自动同步,必须手动设置 Replicated。SetReplicates(true) 或 bReplicates = true;,否则变量不会同步。UPROPERTY(Replicated) 或 UPROPERTY(ReplicatedUsing=OnRep_Function)。GetWorld() 代表当前关卡的游戏世界。
SpawnActor<AActor> 是 UE5 中用于在世界中创建新 Actor 的方法 T 是模板参数
TSubclassOf<AActor> 是 Unreal Engine 中 表示 AActor 及其子类的泛型类型,用于存储 UClass 类型,但只能是 AActor 或其派生类。
Actor 同步 打开Replicates
UE 提供了 无缝旅行(Seamless Travel),可以让 PlayerState 在切换关卡时保持不变。步骤如下:
游戏实例类
GameInstance
SUper::Init() 父类初始化
Init()
//修改新建 蓝图 打开是独立窗口
编辑器设置-》外观-》资产编辑器打开路径
修改成Main windows
1. 蓝图相关参数
|
参数 |
作用 |
适用场景 |
|
BlueprintCallable |
允许蓝图调用该函数 |
蓝图按钮、角色逻辑 |
|
BlueprintPure |
纯函数,无需执行引脚,不修改对象状态 |
数学运算、数据查询 |
|
BlueprintImplementableEvent |
蓝图必须实现,C++ 不能定义 |
特效、UI 事件 |
|
BlueprintNativeEvent |
蓝图可选实现,C++ 可提供默认定义 |
可扩展功能,如 AI 逻辑 |
|
BlueprintAuthorityOnly |
仅在 服务器 可调用 |
服务器专属逻辑,如物品掉落 |
|
BlueprintCosmetic |
仅客户端 可执行 |
UI、动画、粒子特效 |
// 示例:蓝图可调用函数
UFUNCTION(BlueprintCallable, Category="Gameplay")
void Jump();
//蓝图里可以调用 Jump(),但 C++ 里仍然可以正常使用。
2. 网络(RPC)相关参数
|
参数 |
作用 |
适用场景 |
|
Server |
仅在 服务器 执行(需要 HasAuthority()) |
服务器逻辑(如伤害计算) |
|
Client |
仅在 客户端 执行(服务器调用) |
客户端特效(如 UI 更新) |
|
NetMulticast |
服务器执行,并让所有客户端同步执行 |
全体可见效果(如爆炸特效) |
|
Reliable |
确保 RPC 可靠 传输(数据重要时使用) |
物品拾取、开门 |
|
Unreliable |
允许 RPC 不可靠 传输(节省带宽) |
瞬时数据,如子弹轨迹 |
// 示例:服务器 RPC
UFUNCTION(Server, Reliable)
void Server_TakeDamage(int32 Damage);
// 客户端调用 Server_TakeDamage(),但代码只会在服务器端执行。
3. 执行权限
|
参数 |
作用 |
适用场景 |
|
Exec |
允许在 控制台 输入命令执行 |
调试命令、AI 刷新 |
|
CallInEditor |
允许在 编辑器模式 执行 |
自动化工具、地图生成 |
//示例:控制台命令
UFUNCTION(Exec)
void SpawnEnemy();
// 在游戏控制台(~ 键)输入 SpawnEnemy 即可执行此函数。
4. 反射系统(反序列化、垃圾回收等)
|
参数 |
作用 |
适用场景 |
|
Category="..." |
设定蓝图中的分类 |
组织蓝图函数 |
|
CustomThunk |
自定义 thunk 代码(高级用法) |
底层优化 |
|
Meta=(Key=Value) |
额外元数据(用于 UE 反射系统) |
高级蓝图控制 |
//示例:设置蓝图分类
UFUNCTION(BlueprintCallable, Category="Player Actions")
void Sprint();
// 蓝图中 Sprint() 会归类到 "Player Actions" 里。
5. 编辑器功能
|
参数 |
作用 |
适用场景 |
|
DeprecatedFunction |
标记函数为 废弃,不推荐使用 |
API 变更 |
|
SealedEvent |
防止蓝图重写该事件 |
不希望子类修改 |
|
WithValidation |
RPC 调用前检查参数合法性 |
安全性检查 |
//示例:废弃函数
UFUNCTION(BlueprintCallable, DeprecatedFunction, Category="Legacy")
void OldFunction();
// 蓝图会提示 OldFunction() 已废弃,但仍然可以调用。
6.组合使用示例
UFUNCTION(BlueprintCallable, Server, Reliable, Category="Networking")
void Server_DealDamage(int32 Damage);
UFUNCTION(BlueprintImplementableEvent, BlueprintCosmetic, Category="UI")
void ShowDamageEffect();
//服务器端计算伤害 (Server_DealDamage),客户端显示受伤特效 (ShowDamageEffect)。
PlayerController。GameMode 还不会创建 Pawn,只是保证 玩家控制器 已建立。GameMode 允许)。在 GameMode 的 PostLogin 之后,一般还会触发 OnPostLogin 事件,开发者可以在这里进行额外的玩家初始化,比如 匹配系统、分配队伍、同步游戏状态 等。
BP主角蓝图
角色移动组件(Character Movement)
优化跑步速度
转向摩擦力
空中控制力
空中横向摩擦力
重力(Gravity Scale):4
启用单独的摩擦系统(Use Separate Braking Friction)
组件Components:
在Actor上进行使用的附加物,可以提供额外的功能,Actor可以对这些组件进行自定义的修改
场景组件(Scene):
提供Actor在场景中的位置、旋转、缩放信息
音频组件(Audio):
播放音效(UE只将WAV(WAVE)格式的文件视为音频)
光源组件(Light):
发出亮光,可以自定义强度、颜色等
静态网格体组件(StaticMesh):
主要显示不会动的物体外观,优化好,更高效
几何体外观组件是其选定好的模板
骨骼网格体组件(SkeletalMesh):
主要显示会动的物体外观,需要动画资源
弹簧臂组件(SpringArm):
连接Actor和摄像机,以提供更灵活的画面
摄像机组件(Camera):
主要用来提供游戏画面
碰撞检测组件(Collision):
形状分为球(Sphere)、盒体(Box)、胶囊体(Capsule),不同的型状为不同的组件
进行碰撞检测,如果满足条件就会触发某些逻辑
控件组件(Widget):
分为Widget(控件组件)和WidgetInteraction(控件交互组件)
用于显示UI,可设置显示的方式和属性
公告板组件(Billboard):
给Actor打上图片标记,方便在场景中点击选中,该标记在运行阶段时不会显示
文本渲染组件(TextRender):
给Actor打上文字标记,方便在场景中点击选中和作为提示区分,该标记在运行阶段时会显示
粒子特效组件(ParticleSystem):
作为特效使用
NiagaraParticleSystemComponent,使用Niagara粒子系统
CascadeParticleSystemComponent,使用Cascade粒子系统
后期处理组件(PostProcess):
处理Actor的渲染、光照等属性
子Actor组件(ChildActor):
将一个Actor附加到蓝图中
发射物移动组件(ProjectileMovement):
Actor生成后,具有一定的速度,会以该速度在生成后进行移动
使用Enhanced Input插件
对比操作映射和轴映射系统,增强输入系统有着更多的灵活性和控制能力
增强输入系统有着高度定制的优点,可以定义输入的优先级和条件,可以控制更复杂的游戏输入
增强输入系统可以创建很多套(Input Mapping Context)
创建Input Action输入提供给Input Mapping Context进行绑定使用
Input Action的关键属性为值类型
获取控制器引用(需要cast)
获得该引用的增强输入本地玩家子系统(Enhanced Input Local Player Subsystem)
判断该子系统是否有效(Is Valid)
有效则添加映射上下文(Add Mapping Context)
触发的概念及顺序:
按下(started)-按住(triggered)-抬起(completed)
Triggered:根据触发器的类型决定其触发行为(默认为tick),在Started执行完后才会开始执行
Started:按下时会触发一次,最先开始执行
Ongoing:在触发前执行,需要定义触发器
Canceled:在触发取消时执行,需要定义触发器
Completed:在触发完成后执行(按键抬起),最后执行
值类型引脚:分为Bool型、浮点型、向量型,其值的值与当前触发状态有关
Elapsed Seconds:触发按键后的计时,触发完成或中断后会停止
Triggered Seconds:触发按键后的计时,触发完成后会停止
Input Action:返回对于的Input Action引用
驱动阈值:用于有力反馈的输入设备,只有输入的力超出设定的驱动阈值时才会触发的限定值,一般范围为(0,1],超出范围时会出现错误
时间膨胀:时间的流动速度
下移:
先执行Started,后在按下时以tick的方式执行Triggered,松开时执行Completed。
已按下:
先执行Started,后只执行一次Triggered,随后立马执行Completed。
已松开:
先执行Started,后在按下时以tick的方式执行Ongoing,松开按键时只执行一次Triggered,随后执行Completed。
弦操作:
需要绑定一个输入行为作为弦操作,当弦操作触发时,才能执行该触发器的行为。
先执行Started,后在按下时以tick的方式执行Triggered,松开时执行Completed。
注意:当绑定的弦操作正在触发Triggered时,此时进行该修改器的触发行为会终止绑定的弦操作的触发行为,但是仍然保持其触发状态
点按:
先执行Started,会检测按键按下的时间是否小于设置的点按释放时间阈值,在检测期间会一直以tick的方式执行Ongoing,当在阈值内抬起按键则会执行一次Triggered,随后立马执行Completed(成功触发),否则不会执行Triggered,会直接执行Canceled(中断触发)。
点按受到时间膨胀的影响
组合(Beta):
分为组合操作和取消操作
可绑定多个输入行为,按下按键后先执行Started,会在该期间以tick的方式执行Ongoing,在该按键的规定时间内按下其他组合的按键(不能同时)则执行一次Triggered,随后执行一次Completed,否则执行Canceled
可设置按键的时间
脉冲:
按下后先执行Started,会根据设定的间隔间歇式地执行一次Triggered,在等待阶段会以tick的方式执行Ongoing,在Triggered执行完后松开按键则执行Completed,若在等待阶段松开按键则执行Canceled。
当设置了触发限制的次数后,该脉冲输入会在执行对应的Triggered次数后,自动执行Completed
脉冲受到时间膨胀的影响
长按:
按下后先执行Started
按下的时间在保存时间阈值以内时则会以tick的方式执行Ongoing
当按下的时间大于保存时间阈值时则会以tick的方式执行Triggered,此时松开按键则会执行Completed,若小于,则直接执行Canceled
当设置为一次性时,在按下的时间等于保存时间的阈值时,会执行一次Triggered,随后会执行Completed
长按受到时间膨胀影响
可设定保存时间阈值和为一次性
长按和松开:
按下后先执行Started
按下时则会以tick的方式执行Ongoing
松开时,当按下的时间大于保存时间阈值时,则会执行一次Triggered,随后会执行Completed;当按下的时间小于保存时间阈值时,则直接执行Canceled
长按和松开受到时间膨胀影响
可设定保存时间阈值
可以进行连续触发,可以获得值类型的值、触发后的状态
可以利用输入行为的值类型来将不同轴的输入集合起来,以不同类型的形式输出
URL:EpicGame官网
可以勾选引擎需要安装的模块
可以为工程创建快捷方式
更改保管库的缓存位置
保管库资源的感叹号用于查看兼容的版本
官方文档:虚幻官方文档或在库中点击发布版本说明文档(可以在里面筛选标题,查找自己需要学习的模块)
官方教程(需要科学上网):虚幻学习库
官方论坛(只能使用英文):虚幻学习论坛
代码片段库:虚幻片段库
bilibili:
注意:高版本可以打开低版本的工程(会创建一个副本),反之则不行
在引擎时,可快速打开工程
创建工程时,不要使用中文名
创建的工程为蓝图时,仍可以使用c++
蓝图相当于将c++编写的功能代码转化为可重复使用的节点,用于与其他节点拼接定义逻辑
预览摄像机:C
鼠标左键+拖动:移动或旋转C
鼠标右键+拖动:旋转C
鼠标中健+拖动:移动C
ctrl+alt+单击+拖动:创建方形选框
鼠标右键+wasd:移动C
选中物体+F:聚焦到物体位置
alt+鼠标圈(左,中,右)键:
围绕支点或选取点翻转视口,向前推动C使其接近支点或选取点,根据鼠标移动的方向移动C
在不同窗口下,菜单栏的位置和功能会有所差异
点击场景中的物体,可以定位到大纲中对应的物品,反之也相同
场景与关卡的关系:
包含关系(两者之间有一方包含了另一方),嵌套关系(两者有公共的部分,也有私有的部分)
不同编辑器的窗口是有较大差异性的,部分编辑器窗口拥有特殊的菜单栏
可以在文件选项中收藏关卡,以便快速打开(为当前关卡)
在文件菜单栏另存关卡副本,用于备份
可以将场景导出,用于快速搭建
压缩项目可以将项目压缩成一个压缩包
可撤销或恢复操作
查看历史操作记录,可快速回溯到想要的步骤(切换关卡后清除)
可编辑操作
编译器偏好设置影响其他工程(应用到引擎)
项目设置只影响项目自身,不影响其他工程
打开编辑器的一些窗口或日志窗口,可更改引擎界面布局
可以将已有的窗口以独立的形式打开,不同的窗口也是如此
消息日志用于显示错误信息
输出日志用于显示运行时的输出信息
可将引擎全屏
工具栏
可使用编程或编辑器的工具,也可进行调试和检测
主要用于新建c++类和使用工具
构建菜单栏
用于构建经过改动后的东西
选择菜单栏
用于选择对象
actor菜单栏
选择一个对象后,进行快速的修改
帮助菜单栏
快速跳转学习文档或学习社区,也可进行反馈
可保存(只保存当前窗口对象的信息)和切换不同的模式来工作
可以放置基础的actor到场景中
actor是基本单位,能放在场景中的东西都是actor(与可视性无关)
可快速创建和访问修改蓝图类
蓝图类是基于蓝图创建出来的,可以实现游戏行为的对象
可以创建建议的关卡序列动画
可控制播放(暂停,下一帧,停止,脱离控制)
可模拟各个平台的运行和启动,选择运行的选项
设置玩家生成的位置
可以使用局域网的开发
可以将项目打包
可以进行游戏的全局设置
开关实时
显示fps和延迟
统计数据
显示工具栏
修改视口视野参数(90度默认)
设置加载资源有效范围(远景平面,1000=10m)
设置渲染质量与性能(屏幕百分比)
开关允许控制过场动画,切换游戏视图模式
开启全屏,开关摄像机晃动
添加和跳转到书签(摄像机预览位置)
在位置创建摄像机
截图
视口布局
高级设置(视口偏好设置)
视图透视模式(可切换为动画)设置
视图光照设置
视图显示选项
移动,缩放,旋转选中的物体
切换坐标系(世界与本地)
设置和开启snap(修改步长),方便对其
调整摄像机速度
世界坐标与本地坐标的不同,相当于一个物体的前后左右与世界的东南西北之间的关系本质上是对象自身的坐标与世界场景坐标的关系
定位,筛选,排序,分组,可视性设置,查看场景中的actor
修改选中物体的详细参数和设置
存放了游戏规则与逻辑的蓝图,每个关卡可以使用不同的游戏模式,当关卡没有游戏模式时,会使用项目设置中的默认游戏模式
默认pawn类:可操控的玩家类
hud类:UI界面
玩家控制器类:用于控制默认pawn类的控制器,也可与场景互动
游戏状态类:游戏全局的状态数据
玩家状态类:玩家的状态数据
旁观者类:观察其他玩家的类
可以将游戏模式理解为gameplay框架的体现
浏览和管理项目资产,蓝图和其他游戏相关对象,可将对象重复拖入场景
可添加和导入资产,类或模板
可查找和筛选资产或对象
输出日志
控制台(其命令可在帮助查看)
c++编译
保存所有
可以在文件夹右键创建蓝图类
所有蓝图类的父类都是object
蓝图类可以被实例化
实例化是将某种定义好的物体具象化成可以直接使用的
命名规范:BP前缀+名字
主菜单栏对比关卡编辑有明显功能差异
可定位该蓝图编辑器的对象在文件夹的位置
可使用编译检查编写的逻辑是否正确
可对节点设置可见性选项(查看与隐藏不相关)
可修改类设置
可修改类默认值,影响对象实例化
所有蓝图类都有事件图表
可以查找相关的逻辑节点
选中组件或逻辑节点后,可以在细节面板修改其属性
可以为蓝图类添加组件
构造脚本是在蓝图类实例化时调用的
可以新建事件图表,用于将不同功能写在不同的图表中,方便区分
每个事件图表会显示其包含的所有事件
大部分事件节点不能在其他图表同时使用,小部分可以
用于标注逻辑的大致功能,不仅方便查找,也能快速理解逻辑
左键框选对应逻辑按下c,点击注释框可以在细节面板更改其属性
建议在编写完一个逻辑功能后就添加一个注释
可视化编程的基本单位
拥有引脚,用于组成逻辑并执行
可拥有两种引脚:输入输出引脚(圆形)和执行引脚(五边形)
蓝图的逻辑需要事件节点作为开始节点
蓝图节点的执行顺序是从左到右
对着事件图表的空白处右键即可搜索并创建节点
可以为节点添加气泡注释,用于理解改节点的作用
对着引脚按下alt可以断开引脚线,按下ctrl移动引脚线
选中节点 按下退格或del删除
框选蓝图节点,按下q键,进行水平排列
算数运算节点引脚为灰色时,引脚为通配符,可以转换为允许运算的变量类型
加(+):将两个数相加
减(-):将两个数相减
乘(*):将两个数相乘
除(/):用一个数除以另一个数
取模(%):用一个数除以另一个数,取商为最终结果时的余数(当余数小于除数时商才为最终结果)
取模运算仅限几个类型,因此没有通配符
浮点与整数进行运算时,结果为浮点
字符类型不能进行算数运算
向量的运算:
加:
两个向量相加或指定相加的轴的数
减:
两个向量相减或指定相减的轴的数
乘:
两个向量相乘或指定相乘的轴的数
除:
一个向量除以另一个向量或指定除以的轴的数
将其引脚拆分可对其轴做取模运算
设置Actor的(位置、旋转和变换),需要将actor的移动性设置为可移动才能生效
bool(布尔):值只有true(真)和false(假)
byte(字节):范围为0-255,由于存储的值较少,因此速度快
integer(整数):范围远大于byte,且有负数,但是相对byte慢
integer64(整数64位):范围大于integer
float(浮点):为小数,小数部分有效数字有6位
name(命名):一个字符串,可用于存储命名
string(字符串):一个字符串,可进行拼接,可用于存储短文本
text(文本):一个字符串,可进行拼接,可用于存储大段文本
vector(向量):一个三维矢量,可用于存储位置和表示位移,可创建向量或打散其引脚为其赋值
rotatior(旋转体):一个三维的旋转体,可用于存储旋转的信息,可创建旋转体或打散其引脚为其赋值
transform(变换):存储位置、旋转、缩放的复合类型,可创建变换或打散其引脚为其赋值
跳跃:添加跳跃的操作映射,按下时执行跳跃节点
抬起时执行停止跳跃节点
Floor向下取整
Ceil向上取整
Frac 取小数
Fmode取余数
这个处理方案是取了敌我同时只激活一个摄像机的巧,并非是切换摄像机,本质是切换了摄像机所属Actor,如果是同一个角色身上的不同摄像机,
W向量是什么作用?
我执行这一句
ALTER TABLE ue RENAME COLUMN name TO name2;
提示错误:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLUMN name TO name2' at line 1


hit和end不能同时存在
hit是阻挡,另一个则是重叠