欢迎光临
我们一直在努力

记一次《龙之谷》手游代码分析

目录

《龙之谷》手游挺垃圾的代码

首先,工具乱糟糟

其次,用的Unity4.6~4.7的版本

另外,发现使用了slua ulua + tolua的组合

其他,后面补充

主要场景渲染效果如下

LIGHTON

RIMLIGHT

EMISSION

代码结构

IP连接

验证(dll内核)

参考:



《龙之谷》手游挺垃圾的代码

再次证明IP好,管你做的多烂,还是一个有“前途”的游戏

希望如最新宣传文档那样能做到优化:《龙之谷2》进行再一次的全面优化介绍

估计悬

《龙之谷》手游这个源码还真不知道该从哪里开始吐槽

槽点太多,有点选择困难

============================

后记,经过半年分析

(前前后后干了很多事,真正分析代码和调整才2星期)

- 手游《龙1》是外包给某公司(已上市,结果这几年搞h5战略小游戏,扑街了吧),腾讯代理

- 手游《龙2》应该是腾讯自己开发,自己代理,各种手机卡通PBR渲染还算靠谱

- 这里仅仅学习《龙1》代码,最下面有《龙1》CTO优化链接,感觉就是张口就来,90%的代码和优化无关,剩下10%好用的框架也是盛大内部框架;《龙2》最新代码暂时并没有的,因为不是原来的外包公司,估计也不可能流出,腾讯流出也没意思

首先,工具乱糟糟

(估计换了几个主程吧,多少人接手才能乱成这样)

Editor上方的MenuTools比较乱,当然有些吹毛求疵,但是门面如此,可知里子亦如此;

一般也只有外包会有这样的代码结构,倒不是整个游戏代码有多烂,主要还是用的盛大的引擎, 封装以外的代码和开发流程就不管了,很怀疑这样的代码能收敛么??

可以想象,《龙之谷》2017年上线那时候游戏行业最后阶段攻坚的优良传统再一次需要被发扬光大,通宵加班48小时

其次,用的Unity4.6~4.7的版本

(乱到没朋友的Unity APP结构 和下面参考链接:手游优化-CTO分享 形成鲜明对比)

根据工具乱的分析,当时肯定是不够能力升级的,所以说的好听就是一直用稳定的Unity4.7版本;然后我们拿到的代码是Unity5.2,是明显升级过程中的产物,能跑通就不错了

另外,发现使用了slua ulua + tolua的组合

1.(其实和时代,和环境,和人手关系不大,整个团队的上限还是全系于主程的个人能力,虽说个人能力有限,大公司真的人多,但龙之谷这样的大制作大公司,还是理应可以找到匹配的主程)

2.框架多,乱,杂代表编程水平真高;主要还是招聘的人多,没管理就会有这个情况吧;我们一般小团队还真的很难与之相比;没有具体数据,后面考证一下

3.lua入口(在Resource目录,后缀恶心,虽然我好像也干过这种事情, .lua.txt)

4.在Unity4.x的年代,没有Assetbundle,资源管理确实缺失,将就用,你看,现在Unity官方各种工具其实也没好多少

其他,后面补充

。。。。。

。、。。。

。。。。

主要场景渲染效果如下

记一次《龙之谷》手游代码分析

导出模型后,死活不亮,模型比较暗,显示不了原色

LIGHTON

- VERTEXLIGHTON / OFF

- if OFF

- LAMBERT / OFF

- if ON

- ORIGINAL_LIGHT / OFF

- 最终original_lightOff 导致黑色一片

RIMLIGHT

EMISSION

知道了前面ambient的灯光导致颜色变暗,就能定位处理了

fixed3 ambientLighting = UNITY_LIGHTMODEL_AMBIENT.rgb;

那么,AMBIENT这个场景的环境光如何调呢?

(代码shader语法,该这么写还是这么写,同样一段代码在不同的项目真的可以完全不同)

搜索到Unity5.x这个,

记一次《龙之谷》手游代码分析

然后,在官网文档看到这段说明

记一次《龙之谷》手游代码分析

最后的最后,原来在这里调(默认灰色,所以整体颜色变暗)

记一次《龙之谷》手游代码分析

在Unity2020 ->这段也相当于Unity5.x的Ambient Source

代码结构

IP连接

记一次《龙之谷》手游代码分析

验证(dll内核)

//调用堆栈,大概如下 xShell.Update() this._entrance.Update();//XGameEntrance XGame.Update() --------------------------------- if (this.StageReady &amp;& this.notLoadScene) { this._stage.Update(fDeltaT); this._doc.Update(fDeltaT); XSingleton<UIManager>.singleton.Update(fDeltaT); } XSingleton<XLoginDocument>.singleton.AutoAuthorization(true); 

你若是不想一步步学习,直接看Log也行

记一次《龙之谷》手游代码分析

其他代码参考:

public static T CreateSpecificStage<T>() where T : new() => new T(); private bool OnAccountInfoEnterClick(IXUIButton button) internal class RpcC2I_QueryGateIP : Rpc

参考:

窥探Unity5渲染内部之解析UnityShaderVariables.cginc - 战狼96 - 博客园 (cnblogs.com)

欢乐互娱庞池海:《龙之谷》项目性能优化经验分享 - GameRes游资网

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《记一次《龙之谷》手游代码分析》
文章链接:https://www.456zj.com/36999.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址