C# 版的 Lua
我们游戏客户端使用了 Unity3D , 我们不打算给它写 C 插件, 所有的开发都在 mono 中进行的。
由于某些需求,我们需要在客户端解析一些 Lua 脚本(这些脚本同时供我们的服务器使用)。所以,就有了阿楠同学开发的 UniLua 。
这个世界上已经有了很多的 .net 版的 Lua 实现,但是都不完整。它们大多是基于 Lua 5.1 甚至更老的版本的。还有一些只能解析 Lua 的字节码(这样很容易实现),而不能让 Lua 源代码直接工作起来。这使得在 Lua 中很常见的 meta 编程变得不可用了。
这个版本实现了 Lua 5.2 的大部分特性。特别是对 parser 和 coroutine 的支持,是许多其它实现所不具备的。
Lua 的基本类型:string / table 都用 C # 自己的原生实现对应,gc 也直接依赖 .net 的环境。由于工作在 mono 环境中,所以原来对于 Lua 很重要的一部分:和 C 交互的 API 变成了和 C # 交互。
UniLua 着重于在 Unity3D 所嵌入的 mono 中实现 Lua 5.2 。而 mono 所支持的是官方版本的 C# 的一个子集。所以理论上 UniLua 也是可以用于官方的 .net 环境中的。
Comments
Unity中如何调试Lua:
http://jingyan.baidu.com/article/f71d60379f90031ab641d1d1.html
Posted by: zz | (27) May 8, 2015 12:22 PM
weak table没实现么?好像没起作用
Posted by: 朱江波 | (26) January 13, 2014 01:49 PM
ByteStringBuilder太啰嗦了.
internal class ByteStringBuilder
{
readonly StringBuilder m_sb = new StringBuilder();
public ByteStringBuilder Append(byte[] bytes, int start, int length)
{
for (int i = 0; i < length; i++)
{
m_sb.Append((char)(bytes[start + i]));
}
return this;
}
public override string ToString()
{
return m_sb.ToString();
}
}
Posted by: 边城浪 | (25) March 4, 2013 09:39 PM
--------- 初始化成员之前没有成功初始化this对象,编译报错.
这个是因为结构中的字段必须在构造函数中初始化.
你改一下就好了.
把 public int Index{get;set;}
这种改为:
private int m_index;
public int Index
{
get { return m_index; }
set { m_index = value; }
}
这种.然后在构造函数中加上
m_index = 0;这样就可以了.
你添加 this(). 实际是调用了默认构造.所以通过了
Posted by: 边城浪 | (24) March 4, 2013 09:33 PM
--------- 初始化成员之前没有成功初始化this对象,编译报错.
这个是因为结构中的字段必须在构造函数中初始化.
你改一下就好了.
把 public int Index{get;set;}
这种改为:
private int m_index;
public int Index
{
get { return m_index; }
set { m_index = value; }
}
这种.然后在构造函数中加上
m_index = 0;这样就可以了.
你添加 this(). 实际是调用了默认构造.所以通过了
Posted by: 边城浪 | (23) March 4, 2013 09:33 PM
放到.netframework 4.5下面实验了一下,主要碰到两个小问题,
1) 初始化成员之前没有成功初始化this对象,编译报错,需要在构造函数之后添加“this()”,这约束很晕就是了;
2) 部分常量以及UnityEngine引用需要小调整,C#来修改代码确实是很方便,:D;
接下来研究如何调用好了,这里注记一笔 ;),感谢开源
不确定是不是自己的问题,尚不熟悉C#.NET :D
Posted by: littlewater | (22) February 15, 2013 12:46 PM
http://www.5054.net
Posted by: Anonymous | (21) February 14, 2013 11:25 AM
新年快乐!
Posted by: Sky | (20) February 9, 2013 11:16 AM
当时我们选择的是集成python,直接用IronPyton集成相当方便的呀
Posted by: zhp | (19) February 4, 2013 04:22 PM
看来客户端理论上是支持windows的
Posted by: avlee | (18) February 3, 2013 08:36 PM
山寨了一个Mono做脚本的实现,本来还打算再另外实现一套Lua脚本,有 UniLua就省了,研究下。
Posted by: myz | (17) February 3, 2013 02:03 PM
优点:不用写引擎了!游戏终于可以在2018前出来了!
缺点:垃圾C++!垃圾.Net!垃圾Windows!老子不是为了三餐一宿,才不鸟这些垃圾!
Posted by: bert | (16) February 3, 2013 10:14 AM
非常希望云风就unity开发网游的优劣,以及对unity设计思路方面的感悟写一篇详尽的文章。
Posted by: 叶起涟漪 | (15) February 2, 2013 11:50 PM
呵呵正好 我也找这个呢·· 也是U3D项目 也是需要Lua ····
Posted by: Suxy | (14) February 2, 2013 09:41 PM
智商不够用了。
Posted by: Joe | (13) February 2, 2013 09:24 PM
牛头不搭马嘴。我是在说Unity3D不值得购买吗?我是在讨论净化程序员世界、抵制微软拯救人类智商的大事好不?
还有,C++不是用来写Editor,而是游戏引擎的核心。.Net用来做wrapper提供上层接口。编辑器是用C#写UI,功能实现大部份使用公开的接口。http://answers.unity3d.com/questions/9675/is-unity-engine-written-in-monoc-or-c.html
Posted by: bert | (12) February 2, 2013 10:13 AM
@bert
Unity作为一个Editor,用C++写无可厚非啊。
C#,Js什么的只是它的脚本系统支持的编程语言,它还有一个MonoDevelop就是用来编写不同语言脚本的。
不同操作系统的3D是用不同的API的,说到底Unity是一套工具,而不是简单的3D框架,个人还是觉得值得买的。
Posted by: Joe | (11) February 2, 2013 01:30 AM
看了下wiki,Unity3D是C++的底层,mono的接口和工具。估计也是win平台的游戏。大侠您这不是给邪恶的C++,.Net和微软助纣为虐吗?拯救人类的宏伟计划怎么办?
Posted by: bert | (10) February 1, 2013 08:51 PM
既然是mono 想知道发布的时候是否支持主流linux发行版
Posted by: geek42 | (9) February 1, 2013 05:54 PM
Lua可以用C++/CLI编译吗?
Posted by: 杨博 | (8) February 1, 2013 05:51 PM
@Joe
可以. 我们是直接在网上信用卡支付的。
Posted by: Cloud | (7) February 1, 2013 04:12 PM
现在Unity3D能不能能直接国外购买?好像国内代理商很坑爹的感觉。
Posted by: Joe | (6) February 1, 2013 03:56 PM
呵呵 我们也一直在使用 mono
Posted by: gemor | (5) February 1, 2013 03:11 PM
我就猜到了你们买的引擎是 Unity3D ,哈哈
不过貌似还没有用 Unity3D 做端游成功的案例啊
Posted by: EVA | (4) February 1, 2013 03:03 PM
我就猜到了你们买的引擎是 Unity3D ,哈哈
不过貌似还没有用 Unity3D 做端游成功的案例啊
Posted by: EVA | (3) February 1, 2013 03:02 PM
用mono每天都要崩溃好几回,不知道是不是我用的有问题.........
Posted by: ychellboy | (2) February 1, 2013 03:00 PM
mono已经如此靠谱啦。
Posted by: fans | (1) February 1, 2013 02:33 PM