unreal自动化打包
由于是第一个项目,之前一直都是手动打包,所以最近要看看ci打包的事情!
知识前提
Unreal打包的基本操作
AutomationTool
BuildGraph
以上这三个是必然会使用到的!如果还没有接触的可以自行去看看官方的连接!
文档上的知识在这里就不照搬了!进入主题吧!
基本的结构
All.xml是所有任务的汇总
Properties.xml是整个自动化用到的属性(变量)
Reset.xml是用来按需配置打包的,不用平台可能有不同的需求
PakResource.xml是pak资源的
BuildScript.xml是编译和打包的
过程及问题
ci 环境的搭建
Unreal 项目CI打包环境
具体的xml以及注意
All.xml
A...
unreal的几个数据类型的反射
背景交代
因为是demo使用,不想接入太多第三库,但是网络通讯的需要的一个格式,方便两端通讯;
ue有一套json解释,所以计划使用json当作通讯流。
项目使用的消息体大致格式如下:
USTRUCT()
struct FTestStruct
{
GENERATED_BODY()
UPROPERTY()
FString Field1;
UPROPERTY()
FString Field2;
};
因为消息体的格式是自定义的,又不想每次都写Encode和Decode,最好的办法就是写一个通用的模板。
知识点
想要做到上述的方法,有几个点需要了解的:
模板函数限定
unreal的反射
模板函数限定
这里就不细说,相关内容可以自行google;
...
C# 的UDP使用记录
背景
由于要写一个unreal的mmorpg demo, 就用python写了服务器,回头一想,既然unreal的都已经写了,那就干脆把unity的也写了~然后在写unity的网络库udp的时候,遇到了以下几个问题,于是就记录了以下!
简单的基本代码(问题重现版)
这里只放出C#的代码(前端使用)
public override bool Connect(string url, int port, double timeout=5000){
var MainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
EndPoint RemoteAddr...
Addressable的Lua加载优化
现象
在开始排查当前情况的时候,项目工程中使用的lua代码已经达到了6M
在本地电脑中加载的时候需要5s以上的时长!据项目的反馈,手机上的加载时间有些机器需要十几秒!
排查过程
第一步是先统计一下加载的耗时
在 AddressResource 中,在创建和加载完成的两个方法中添加计时,完成的时候打印耗时;
确定ab的加载时间
ab加载耗时极少!
-定位加载过长的原因
通过断点,看到因为label需要把所有的同样label的资源都进行provider加载,使得lua的每一个文件都会进行BundledLuaProvider加载!而且还是异步的!
m_RequestOperation = bundle.LoadAssetAsync(assetP...
GetPrivateStaticClass报错
问题现象
解决过程:
一
过程:删除Intermediate后重新Generate,然后编译
结果:还是一样的异常
二
过程:在报错的类里添加指定的方法
UNetworkObjectBase::GetPrivateStaticClass(void)
UNetworkObjectBase::UNetworkObjectBase(class FVTableHelper &)
结果:还是一样的异常!
三
过程:添加XXXXX_API
结果:编译正常
UE的本地化
前文说了UE的简单UI和交互,到这里为止,应该简单的模拟本地单机登录到角色创建再到进入世界主地图应该都没有什么问题了!
但是项目在实际开发的时候,我们还需要考虑一下多语言之类的本地化!
UE内置了一套挺不错的本地化工具!官方link
在说正题之前,要提醒一下
配置也可以不通过Editor界面生成,但是这里是入门,就怎么简单怎么来!
文本的本地化
一步一步来,有些需求UE还是没有满足的,这个工具只是提供一种比较通用的。之前和朋友聊过(只能说他想要的太多了~欲求不满)!
启动本地化
需要先在编辑器中确定本地化工具是否已经开启了!
确定已经启动的话,就可以通过Window->Localization Dashboard打开工具界面
上图就是本地化...
UE的UMG和Control交互
感觉说明一下几个类的结构,大家就知道怎么处理了!
delegate
delegate的方式相信很多人都能想得到吧?但是这种方式不是这次要讲的!
直调
UI和其他几个类型的交互离不开这几个类型!
UUserWidget
APlayerController
AHUD
UUserWidget
前面的文章 UE的UMG简单使用 中已经说明了UMG绑定相关的了!
在这里再补充一点,HUD是和玩家绑定的!
我们看看UUserWidget中的一些变量
GetOwningPlayer
/**
* Gets the local player associated with this UI.
* @return The owning local player...
UE的UMG手柄输入控制
搞UE开发,肯定想试试一下主机游戏开发的啦,我是盲目的主机死忠党!所以如果使用手柄控进行UE开发,这事情我是必然会去尝试的!
说起这个,我也是简单尝试一下,毕竟精力都在其他事情上了~
这个函数是关键!
下面我们直接开始处理
在启动手柄对UMG的输入之前,我们需要在UMG 初始化的时候(AddToViewport后)将游戏的输入模式改为GameAndUI
UE默认提供了三种方式,都是继承了FInputModeDataBase
FInputModeUIOnly仅ui能够接收设备的输入
FInputModeGameAndUI优先UI接收,如果UI不处理,player input / player controller就可以获取到输入!
FInputModeGameOnly...
159 post articles, 20 pages.