IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> UE4每周学习总结 -> 正文阅读

[游戏开发]UE4每周学习总结

Command 命令行
r.setRes1280 x 720 w 窗口模式 f 全屏模式

打包前的设置(广域网)


1.在设置中Packaging/List of maps to include in a packaged build?
? ?点击+ 号添加数组元素,然后点击... 进行浏览选择要添加的场景
? ?与关卡流不同,此处是跳转场景将对应的场景路径添加,?打包时会将对应的关卡也一并打包。
否则打包完成后没有进行设置,游戏运行时执行跳转场景时会失败。

2.打包完成后,关闭UE4,然后编译一遍DebugGameServer
完成后,点开你的项目名/Binares/Win64/项目名Server-Win64-DebugGame.exe
把这个文件复制到你打包好的项目文件目录:项目名/Binares/Win64/放这里
然后在外部建立一个.bat文件
路径写死:你的刚复制过来的在打包好的文件里的xxxserver.exe文件 -log
这样写好后,执行,就可以看到打包好的文件了.

3.如何加载到线上呢
直接压缩服务器文件,然后远程链接后,粘贴上去运行即可
如果提示有dll文件缺失,缺啥就下载啥
做一下内网穿透(哲西云软件),然后ping一下穿透后建立隧道的地址
获取到真正的地址,修改之前客户端的ip.txt文件(需要一个文件读取功能插件,可以自己写)
把地址输入进去,链接一般就可以了.

1124


数据表


作用:给策划用,添加一种货币,修改某些数据,通过配表处理更好
不用程序加班加点
使用方式:头文件:#include Engine/DataTable.h?声明的继承下 FTableRowBase 即可

?

?


遗忘部分知识点回顾


1:UPROPERTY中


EditAnywhere 与 EditDefaultsOnly的区别
any可以在编译器中,也可以放置在世界中的细节面板修改
def只能在编译器,世界中是找不到的


2:UClass::TagSubobjects


使用指定的对象标志标记属于同一资产的对象,用于 GC 检查


3:EObjectFlag


描述对象实例的标志,理解就是给对象实例下标签,让编译器处理


4:TSubclassOf


是提供 UClass 类型安全性的模板类。
规定了传入的类的类型
用法区别:

UPROPERTY(EditDefaultsOnly, Category=Damage)
UClass* DamageType;

UPROPERTY(EditDefaultsOnly, Category=Damage)
TSubclassOf<UDamageType> DamageType;

后面的规定了编辑器的属性窗口只列出派生自 UDamageType 的类
在第一个声明中可选择任意 UClass

包含反射.h类的不能前置声明,只能引用头文件的形式找到类

5:模块


正如引擎本身由一组模块构成一样,每个游戏也是由一个或多个
游戏性模块构成的。这些模块类似于引擎以前的版本中的包的概
念,它们都是一组相关类的容器。模块实际上是 DLL 文件

6:模块接口(API)


对于一些需要被模块外部访问的函数和类,需要通过 *_API 的宏
标记出来。每个被暴露在外的单项都会带来编译时间的额外消耗
,因此请务必仅暴露出必须暴露的接口。如果外部只需要访问
一个类中的某个函数,那么比起暴露整个类而言,仅暴露出这
个函数能够节省出相当可观的编译时间。

7:使用ConstructorHelpers来加载资源


使用特殊类 ConstructorHelpers 加载,这个类在构造阶段查找某个对象的对象和类。
注意:路径名也必须带_C后缀!
蓝图路径是:Blueprint'/Game/Blueprints/MyBP.MyBP',

加后缀以后,则是:Blueprint'/Game/Blueprints/MyBP.MyBP_C',

static ConstructorHelpers::FObjectFinder<UBlueprint> UnitSelector(TEXT("Blueprint'/Game/MyProject/MyBlueprint.MyBlueprint'")); ?
TSubclassOf<AActor> UnitSelectorClass = (UClass*)UnitSelector.Object->GeneratedClass; ?

UClass。存储类信息,用于反射。把它当成C#的Type来理解。
GetClass()。获得一个UObject实例的UClass,是UObject成员函数。
GetStaticClass()。不需要有实例就能获得UClass。是静态的,每次调用返回相同结果。
ClassDefaultObject。类默认对象,可以获得UObject初始化时的值。注意GetClass()->GetDefaultObject()和T::StaticClass()->GetDefaultObject()不一样。

DefaultEngine中找这一句,后面的是通道名字
+DefaultChannelResponses=

8:期望该函数在蓝图被重写,同时又拥有c++的实现方法


那么定义函数时,除了自身的方法名外,还需要加一个后缀_Implementation,并在c++实现这个有后缀的函数
这样定义以后,会优先调用蓝图中的Event,如果蓝图中该event没有实现,则调用C++的方法
同时:
定义我们的RPC函数。此时需要注意的是,RPC函数的定义需要在函数末尾添加_Impementation

UFUNCTION(reliable, server, WithValidation)
void ServerFlyUp();

注意到Server函数的例子中,添加了WithValidation的字段。这是为了防止玩家作弊,添加的一个验证函数,我们可以自行编写验证条件,
这是为了防止玩家作弊,添加的一个验证函数,我们可以自行编写验证条件,如果客户端的数据不满足验证条件,则客户端这边会直接放弃RPC的调用,到了服务器那边,服务器在执行Server函数之前还会进行一次判断,防止客户端发送假的包过来,如果判断通过了,才会继续执行。实验环境下,我们默认验证条件都返回true。

AI(C++部分,待完成)


Sequence两边都可以执行,由左到右
Selector 只执行一边
添加BTTask或者BTServer时会报错
解决方法:
需要在BTServer.h中添加三个接口,F12找过去即可,最后三个加上下面这俩
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp,uint8* NodeMemory)override;

virtual void InitializeFromAsset(UBehaviorTree& Asset) override;


AI蓝图部分功能笔记

NPC简单跟随


前期准备:
1:创建一个Character类,命名为NPC
2:创建一个AIController类,命名为NPC_AI
3:创建一个BehaviorTree,命名为Npc_BT
4:创建一个BlackBoard,命名为Npc_BB
实际制作
1.首先给NPC一个控制器,在ClassDefault中,NPC_AI
2.然后AI控制器中,BeginPlay中设置RunBehaviorTree(NPC_BT)
并NPC_BT关联好NPC_BB
3.在NPC_BB中,添加一个变量(TargetLocation)
4.设置行为树,Select绑Sequence,false就不执行
然后添加一个Task,添加SetBlackBoardValueAsVector节点(下图)
并且在Task中设置一个BlackBoardSelector变量
5.行为树中设置变量并绑定之前黑板的数值,结束.

?

AI跳跃


1.在NpcAI上新建一个变量Character 引用
2.添加时间EventOnPossess,事件控制时,通过Npc变量获取Npc角色相关数据,目的是为了当NPC拥有这个控制器
即执行到这,把NPC角色数据获取到
3.添加Tick,根据Npc变量获取速度,然后获取速度的响亮,判断长度大于100时候可以起跳,然后生成一个Sphere碰撞体
,仅一帧,如果这一帧在墙边上,那就起跳,Jump,并且微微做一个Offset ,让人物可以起跳
4.在地图上添加Nav LinkProxy,可以在这个位置直接跳过去.
?

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:56:52  更:2021-11-30 15:58:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 20:47:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码