« 内存异常排查 | 返回首页 | 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 < 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

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