« 内存异常排查 | 返回首页 | Clash of Clans »

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
weak table没实现么?好像没起作用
ByteStringBuilder太啰嗦了. internal class ByteStringBuilder { readonly StringBuilder m_sb = new StringBuilder(); public ByteStringBuilder Append(byte[] bytes, int start, int length) { for (int i = 0; i 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(); } }
--------- 初始化成员之前没有成功初始化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(). 实际是调用了默认构造.所以通过了
--------- 初始化成员之前没有成功初始化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(). 实际是调用了默认构造.所以通过了
放到.netframework 4.5下面实验了一下,主要碰到两个小问题, 1) 初始化成员之前没有成功初始化this对象,编译报错,需要在构造函数之后添加“this()”,这约束很晕就是了; 2) 部分常量以及UnityEngine引用需要小调整,C#来修改代码确实是很方便,:D; 接下来研究如何调用好了,这里注记一笔 ;),感谢开源 不确定是不是自己的问题,尚不熟悉C#.NET :D
http://www.5054.net
新年快乐!
当时我们选择的是集成python,直接用IronPyton集成相当方便的呀
看来客户端理论上是支持windows的
山寨了一个Mono做脚本的实现,本来还打算再另外实现一套Lua脚本,有 UniLua就省了,研究下。
优点:不用写引擎了!游戏终于可以在2018前出来了! 缺点:垃圾C++!垃圾.Net!垃圾Windows!老子不是为了三餐一宿,才不鸟这些垃圾!
非常希望云风就unity开发网游的优劣,以及对unity设计思路方面的感悟写一篇详尽的文章。
呵呵正好 我也找这个呢·· 也是U3D项目 也是需要Lua ····
智商不够用了。
牛头不搭马嘴。我是在说Unity3D不值得购买吗?我是在讨论净化程序员世界、抵制微软拯救人类智商的大事好不? 还有,C++不是用来写Editor,而是游戏引擎的核心。.Net用来做wrapper提供上层接口。编辑器是用C#写UI,功能实现大部份使用公开的接口。http://answers.unity3d.com/questions/9675/is-unity-engine-written-in-monoc-or-c.html
@bert Unity作为一个Editor,用C++写无可厚非啊。 C#,Js什么的只是它的脚本系统支持的编程语言,它还有一个MonoDevelop就是用来编写不同语言脚本的。 不同操作系统的3D是用不同的API的,说到底Unity是一套工具,而不是简单的3D框架,个人还是觉得值得买的。
看了下wiki,Unity3D是C++的底层,mono的接口和工具。估计也是win平台的游戏。大侠您这不是给邪恶的C++,.Net和微软助纣为虐吗?拯救人类的宏伟计划怎么办?
既然是mono 想知道发布的时候是否支持主流linux发行版
Lua可以用C++/CLI编译吗?
@Joe 可以. 我们是直接在网上信用卡支付的。
现在Unity3D能不能能直接国外购买?好像国内代理商很坑爹的感觉。
呵呵 我们也一直在使用 mono
我就猜到了你们买的引擎是 Unity3D ,哈哈 不过貌似还没有用 Unity3D 做端游成功的案例啊
我就猜到了你们买的引擎是 Unity3D ,哈哈 不过貌似还没有用 Unity3D 做端游成功的案例啊
用mono每天都要崩溃好几回,不知道是不是我用的有问题.........
mono已经如此靠谱啦。

Post a comment

非这个主题相关的留言请到:留言本