本文主旨
先道歉解释下哦~ 因为笔者去年换了一家新的游戏公司,熟悉项目和融入新的环境花费了很长时间,还是有些懒惰了,忘记记录了;从现在开始开始继续分享自己新的学习之路。 这篇文章和大家分享近一年来在新公司一些新的学习经验和自己的变化,和对待项目制作过程中一些自身改变和学习之道。
正文
就我本身而言接触Lua,从熟悉基本语法规则和运用,是用了20多天;虽说Lua上手简单,就算不熟悉代码的人,看完Lua基础也可以写几个函数;因为Lua相对于Java、c#等,没用繁琐的格式、写法要求;关键字也不多,自由度还是很高的~ 但是还是需要编写者自己注意书写格式,好的代码规范是一个程序员最起码的“道德标准”。
一、Unity开发为什么要学习Lua~
这是很多初学者的疑问,我是Unity开发人员,我会C#就能满足日常的开发需求啊;这个确实没有错的,确切的说,如果不考虑某些特定的需求,c#能保证你完成游戏中100%的功能的哈~ 所以这里就要说到另一个热更新方案——ILRuntime,这个是只需要在unity中安装特定的插件就可以实现同等的热更效果,不需要学习Lua;详情可参靠这个官方链接。“ILRuntime”更适用于小中型工作室,一些大公司会有些祖传老代码都是Lua写的,用的是经典的Tolua,虽说也听大佬们说也是过时的了,但是很多游戏都是基于Tolua开发的,越老越稳定嘛~ 不要纠结哪种方案更好,效率更高这类问题;因为解决方案有很多,“Xlua”、“Ulua”等等各有优缺点,并且都被广泛应用,所以这不是纠结学习那个的问题
二.什么是热更新呀~
现在市面上的上线游戏没有不会热更新的。所谓热更新就是游戏在运行过程中就进行了代码的更新,美术资源的替换,在你游戏进行中时,代码更新就完成了,比如每款国民级手游的不停机跟新就是一种性质热更新,热更新在不影响用户体验的情况下,最小程度上完成代码的迭代,资源的替换,是现在最主流的一种更新方式;最近准备学一下打包的流程,前辈说苹果端的包审核更严格、而且有的包会通过技术手段被屏蔽,所以热更新会绕过一些流程,更快的将新的功能更新上去。
三.了解Lua
Lua的语法基础
我一直都在用的自学网站 1.菜鸟教程 传送门 2.编程狮 传送门
Lua和C#的交互方式
实现热更新三点要素:反射、虚拟机、代码绑定 1.ToLua插件的使用:网上搜索tolua插件,下载解压后将to-lua-master全部拽到Unity中的Asset下 2. Tolua脚本可以使用lua函数来处理事件,实例化CLR对象,访问属性。CLR——公共语言运行库(Common Language Runtime),只知道是微软的一套开源运行库。 3. Lua虚拟机的启动,感谢大佬提供学习思路ToLua源码分析,这个朋友写的详细哈
//虚拟机初始化启动
void Start()
{
lua = new LuaState();
lua.Start();
LuaBinder.Bind(lua);
}
4.利用c#的反射的特性进行两种代码间的交互,在Lua脚本中对C#脚本中特定方法的调用
public Class FuncForCsharp
{
public void DebugFunc()
{
Debug.Log("You are so Cool ~~~");
}
}
local m_objectt = tolua
local m_fc = m_objectt .findtype("FuncForCsharp")
if not m_fc then
m_objectt .loadassembly("Assembly_CSharp")
m_fc = m_objectt .findtype("FuncForCsharp")
end
local m_func = m_objectt .getmethod(tpy,"LogMyName")
5.脚本的绑定,目前的解决思路是全为Lua控制生命周期,Awake.Updata、Start等生命周期函数等都可以在Lua脚本正常调用,其中还有Lua特有闭包的概念和一些知识,我会在深深的研究一下再来解答。
总结
希望这边文章可以记录自己的学习历程,会给别人一点帮助~ 之后会研究一些打包流程不定时分享~
|