FPS游戏框架漫谈第二十二天

今天我们要谈的话题是热更新辅助翻译工具

那么什么是热更新辅助翻译工具呢 我们聊的其实是一种语言翻译工具,就我们游戏而已采用的是c#语言开发,热更采用的是lua语言,

那么我们平时热更是不是需要写lua代码呢????????

这样问题就来了lua因为是动态语言,调式麻烦,不容易发现,很难维护等各种问题,那么就引发了很多优秀的团队在研究怎么样研究一个语言翻译工具呢??

如果说我们制作出来了一个从c#语言翻译成lua语言的工具的话,是不是意味着我们在也不需要忍受lua的臭脾气了呢,完全正确,你摆脱了他。

怎么做到的呢?比如外网出现严重bug,你以往就抓紧写lua脚本,但是现在有了他你不用了写了,你还是写c#代码,写完之后交给工具流即可,他会把你写的c#翻译成lua脚本的。

不对,好像我说了很多废话,现在的问题是我怎么造一个c#语言翻译成lua的工具呢?????????????

好难,我好像无从下手,莫慌。 我们先分析下平时你注意了没有我们的c#代码写完之后编译,他会变成一个叫Mono.Ceil的库,是不是想起来了。没有想起来是吧,赶紧动手试试,然后我们会发现一个有意思的东西就是Mono.Ceil这个dll中竟然有我们写的c#类的名字 字段的类型 以及类型之间的继承关系 以及方法签名 完美,那不就非常好翻译了吗?

来看案例

c#代码 Mono.Ceil中找到的信息

public class A TypeDefinition:A

{ Fields

int a = 2; x:int

int b = 3; y:int

int Test() Methoths

{ Test:int

return a + b;

}

}

哇 好像发现了规则 那么我对应的lua 不就是local A = class("A")

function A:Test()

end

...类似是不是很简单 就是固定字符串+Ceil中找到的信息 进行组合然后文件写入就不可以

不对啊 我好像没有看到方法体啊,这个方法体去被编译器放哪里去了呢?经过各种资源的查询,原来已经成为CIL里面,公共中间语言。

但是好像看起来格式比较低级啊,已经到了指令集的级别啊,不慌我们反编译他,什么工具ILSPY工具啊,经过翻译之后看到了这个信息

IL语言被ILSpy工具翻编译之后的状态

stoc:int32(a,ldc,i4:int32(2))

stoc:int32(b,ldc,i4:int32(3))

ret

add:int32( ldloc:int32(a),idloc:int32(b)

)

翻译成方法体

local a = 2

local b = 3

return (a + b)

看着成功了99% 但是剩余1%的路是非常艰辛的?动手是最好的老师。

相关推荐
守月满空山雪照窗1 小时前
深入理解 MTK FPSGO:Android 游戏帧率治理框架的架构与实现
android·游戏·架构
呆呆敲代码的小Y6 小时前
48个AI智能体搭建完整游戏开发工作室:Claude Code Game Studios
人工智能·游戏·unity·ai·游戏引擎·ai编程·ai游戏
聊点儿技术7 小时前
大促期间IP代理识别API频频超时怎么办?——高并发场景下离线库选型与本地部署实战
网络·tcp/ip·游戏·ip离线库·电商风控·识别代理ip·代理ip识别api
颯沓如流星8 小时前
从Prompt Engineering到Harness Engineering:游戏服务器开发的AI工程范式
人工智能·游戏·prompt
前端不太难8 小时前
鸿蒙游戏中的 Service 层应该怎么拆?
游戏·状态模式·harmonyos
liangdabiao17 小时前
[分享好东西]类似vibe coding一样开发游戏 -harness-设计架构-生成美术资源-编码-测试-运行-交付
游戏
聊点儿技术19 小时前
【游戏风控】如何用IP数据接口从“IP即判罚”升级为“IP参与评分”
tcp/ip·游戏·游戏安全·ip数据库·ip地理定位api·ip数据接口·ip风险画像
TMT星球1 天前
阿里云连续5年稳居游戏云市场份额第一
游戏·阿里云·云计算
沙振宇1 天前
【Web】使用Vue3+PlayCanvas开发3D游戏(十)让人物动起来
前端·游戏·3d·人物·
黑客说1 天前
深耕AI,终破局:无限流游戏的核心创新之路
人工智能·游戏