文档章节

uLua中遇到的问题

乐逍遥jun
 乐逍遥jun
发布于 2016/02/22 21:37
字数 649
阅读 14
收藏 0

1.C#调用lua函数参数为空的问题

在C#中调用以(:)定义的函数传参时,self被第一个参数覆盖,而obj将为空

MessagePanel = {};

function MessagePanel:Test1(obj)
	--lua调用正常,obj为传入参数,self为MessagePanel本身
	--C#调用异常,obj为空,self为传入的参数,
	print(type(obj)..type(self))
end

function MessagePanel.Test2(obj)
	--lua和C#调用都是正确的
	print(type(obj))
end



2.C#调用不到Lua父类函数的问题

在Lua中调用table的元表函数是可以的。

在C#中调用Lua中table的元表函数是找不到的。


3.Lua中调用不到C#对象的父类函数

问题原因,

因为父类没有生成wrap

解决办法,

生成所有父类的wrap,注意中间不能间断(父类的父类都需要);


3.Lua中调用不到C#重载函数

问题原因,

在C#中一个类里面有一个没有参数的类成员函数和一个有一个参数的同名静态函数,在这种情况下wrap的生成就会有问题,先上代码

原函数

public Type GetType();
public static Type GetType(string typeName);

生成的wrap函数

static int GetType(IntPtr L)
 {
  int count = LuaDLL.lua_gettop(L);

  if (count == 1)       //注意本行
  {
   Type obj = LuaScriptMgr.GetTypeObject(L, 1);
   Type o = obj.GetType();
   LuaScriptMgr.Push(L, o);
   return 1;
  }
  else if (count == 1 && LuaScriptMgr.CheckTypes(L, 1, typeof(string)))    //注意本行
  {
   string arg0 = LuaScriptMgr.GetString(L, 1);
   Type o = Type.GetType(arg0);
   LuaScriptMgr.Push(L, o);
   return 1;
  }

代码只贴了有用的部分

因为静态函数不用传递调用对象,成员函数需要传递调用对象,所以他们两个的传入参数个数都是1

从判断语句上看这个第二个判断将永远无法进入所以这个静态函数也就无法调用了

解决办法,

a.如果是自己写的代码尽量避开这种写法;

b.如果是SDK的写法找一下有没有其他的相同重载函数;

c.如果a,b都无法解决。。就手动修改这个判断把第一个判断和第二个判断对掉顺序;



4.Lua中报错  function at line xxx has more than 60 upvalues


function at line xxx has more than 60 upvalues。lua的upvalue是有上限的,这个上限定义在luaconf.h中:


/*
@@ LUAI_MAXUPVALUES is the maximum number of upvalues per function
@* (must be smaller than 250).
*/
#define LUAI_MAXUPVALUES    60

当然不建议修改这个值然后重新编译lua了,如果local变量太多,还是放到table里面吧。

luaconf.h中还定义了其他的一些上限,比如这个:

/*
@@ LUAI_MAXVARS is the maximum number of local variables per function
@* (must be smaller than 250).
*/
#define LUAI_MAXVARS        200




© 著作权归作者所有

共有 人打赏支持
乐逍遥jun
粉丝 6
博文 79
码字总数 39510
作品 0
东城
技术主管
私信 提问
Unity lua内存泄漏与性能检测

上周UWA发表了一片博文Lua性能优化—Lua内存优化作者分享了在unity中lua使用的不少干货,文中提到两个lua的小插件,一个是内存检查工具Snapshot,一个是性能分析工具LuaProfiler。 正好上周笔...

tj134679258
2017/05/02
0
0
使用 Unity 3D 开发游戏的架构设计难点

http://geek.csdn.net/news/detail/135019 Unity 3D 引擎对于开发者来说,入手非常快,因为它采用的是 C# 作为开发语言,这也大大降低了开发者的门槛。但凡只要懂一门编程语言的人都能使用 ...

OnafioO
2017/01/20
0
0
Unity5 + kbengine + ULUA(toLua) 一个KBE的Lua热更新客户端demo

源码: https://github.com/liuxq/StriveGame StriveGame(Unity5 + ULUA + kbengine) 使用Unity+KBEngine开发的mmo游戏demo的第二版,主要工作是将KBE的客户端插件以及大部分游戏逻辑Lua化,...

warma1
2017/07/18
118
0
Unity5 + kbengine + ULUA(toLua) 一个KBE的Lua热更新客户端demo

源码: https://github.com/liuxq/StriveGame StriveGame(Unity5 + ULUA + kbengine) 使用Unity+KBEngine开发的mmo游戏demo的第二版,主要工作是将KBE的客户端插件以及大部分游戏逻辑Lua化,...

warma1
2017/07/18
141
0
腾讯开源手游热更新方案,Unity3D 下的 Lua 编程

xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。现在 腾讯已经将 xLua 开源到GitHub。 2016年12月末,xLua刚...

两味真火
2017/01/04
10.4K
7

没有更多内容

加载失败,请刷新页面

加载更多

php获取客户端IP

php获取客户端IP 首先先阅读关于IP真实性安全的文章:如何正確的取得使用者 IP? 「任何從客戶端取得的資料都是不可信任的!」 HTTP_CLIENT_IP头是有的,但未成标准,不一定服务器都实现。 ...

DrChenXX
19分钟前
0
0
. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom...

west_coast
37分钟前
1
0
刷leetcode第704题-二分查找

今天双十一买的算法书到货了,路上刷到有人说的这个题,借(chao)鉴(xi)一下别人的思路,这个是C++标准库里面的经典方法,思路精巧,优雅好品味 int search(int* nums, int numsSize, in...

锟斤拷烫烫烫
今天
1
0
【分享实录】BANCOR算法详解及代码实现

1 活动基本信息 1)主题:【区块链技术工坊22期】BANCOR算法详解及代码实现 2)议题: BANCOR算法的特点和优劣势 BANCOR算法和举例 如何加入BANCOR.NETWORK交易所 如何开发自己的BANCOR去中心...

HiBlock
今天
2
0
微信小程序(2)

开始看微信小程序的教程了。刚刚看完官方教程的视图层部分。这里摘录一些自己认为的部分关键点。 1.直接修改数值无法重新渲染,需要使用setData()方法; 2.列表渲染中:wx:key用于保持项目在...

MKjy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部