Unreal Insights是UE自4.23之后提供的一个Profiling工具,可以非常方便地看到游戏运行的各个线程的火焰图,但是官方文档只提供了PC和Android的连接方法,并不直接支持IOS,不太方便。研究了一下发现IOS主要是网络策略的问题,本篇文章提供一个UE与IOS设备的真机Profliing以及端口互通方案,可以支持实时的Profiling以及Cook on the fly等IOS真机与PC数据互通的需求。
UE的Unreal Insight本质上是在PC上创建了一个端口为1980的TCP监听服务,在我们的游戏程序启动时,会主动连接到这个端口,实现实时Profiling时数据传递的目的。
在同一LAN的环境下,IOS设备可以直接与LAN内机器互通,只需要在程序启动时指定tracehost
(Unreal Insight)或者filehostip
(cook on the fly)来指定主机IP。
所以想要实现我们的需求有两步:
- 让IOS设备能够访问PC的端口或者与PC在同一LAN
- 在设备上启动游戏时指定PC的IP地址能够正确创建连接
在Android上,可以通过数据线连接设备,通过adb reverse
将PC的端口转发到设备端口,在游戏启动时指定127.0.0.1
即可。因为通过adb实现了端口的反向转发,所以在Android设备上连接设备本地的1980端口,就相当于连接了PC的1980端口。在IOS上,想要实现这一点不那么容易。
最开始考虑的是USB连接设备,找到一种类似adb reverse
的方案,把PC端口映射到IOS的设备端口,但是发现没有很好的实现,usbmuxd
倒是提供了一种forward
的方案,能把IOS设备端口映射到PC,但是这和我们需求不符合,硬要实现的话还需要自己做一层转发服务,太过麻烦。
所以只能从另一个方面入手:让IOS设备与PC保持在同一LAN内!
但是这种需求在部分内网的网络策略上也有限制:
- 办公网与WIFI不在同一网段,子网隔离
- 不允许自己部署路由
所以最终想到的方法是:通过IOS通过USB分享热点给PC,使PC与IOS在同一网段。下面介绍一下配置方法。
首先,在IOS
设备的设置中启用个人热点(IOS要求必须要有SIM卡才能开启个人热点):
然后通过USB连接PC,在PC上打开设备管理器查看网络适配器中是否存在Apple Mobile Devices Ethernet项:
然后打开控制面板中的网络连接的适配器设置,可以看到自动创建了两个虚拟适配器:
这种情况下,PC就已经连接上了IOS设备共享的网络。可以通过ipconfig
查看IP地址:
172.20.10.2
就是PC连接IOS共享网络后被分配的IP地址,可以通过arp -a
查看IOS设备在这个LAN里的IP地址:
目前的网络情况:
- PC 172.20.10.2
- IOS 172.20.10.15
在同一个LAN的同一网段,可以开始真机Profiling了!
首先,还是需要在PC上启动Unreal Insight,然后编辑一个ue4commandline.txt,将以下内容填入其中(根据情况修改项目名、PC的IP地址):
1 | ../../../FGame/FGame.uproject -Messaging -tracehost=172.20.10.2 -Trace=CPU |
通过爱思助手或iMazing之类的工具,放入游戏的数据目录即可:
然后启动IOS APP,即可在PC上Unreal Insight端看到数据:
最后,使用这种方式,就能够通过USB实现UE与调试设备的数据互通。只要能让IOS设备与PC在同一LAN,Profiling或Cook on the fly等都可以实现,能够避免因为网络策略导致的开发障碍。