当前位置: 首页 > wzjs >正文

第一次做网站时是怎样的心情天津百度分公司

第一次做网站时是怎样的心情,天津百度分公司,QQ可以在网站做临时会话么,阿里巴巴外贸平台怎么样Generate Code干了什么 肉眼可见的,在Asset文件夹生成了XLua/Gen文件夹,里面有一些脚本。然后对加了[CSharpCallLua]的变量寻找引用,发现它被XLua/Gen/DelegatesGensBridge引用了。也可以在这里查哪些类型加了[CSharpCallLua]。 public over…

Generate Code干了什么

肉眼可见的,在Asset文件夹生成了XLua/Gen文件夹,里面有一些脚本。然后对加了[CSharpCallLua]的变量寻找引用,发现它被XLua/Gen/DelegatesGensBridge引用了。也可以在这里查哪些类型加了[CSharpCallLua]。

public override Delegate GetDelegateByType(Type type){if (type == typeof(NoParamNoReturn)){return new NoParamNoReturn(__Gen_Delegate_Imp0);}if (type == typeof(DelegateLua)){return new DelegateLua(__Gen_Delegate_Imp0);}if (type == typeof(MyActionIntInt)){return new MyActionIntInt(__Gen_Delegate_Imp1);}return null;}

没加[CSharpCallLua]或没生成代码的变量被使用就报错:

C#调用lua

1.新建LuaEnv类;

luaEnv=new LuaEnv();

2.执行luaEnv.AddLoader()。输入是一个返回byte[]的函数,这个函数把一个lua脚本读取出全部字节返回。当luaEnv.DoString()执行require一个lua脚本时,它调用这个函数,把需要的lua脚本名传入,这个函数把脚本里的代码读出。

luaEnv.AddLoader(ProjectLoader);
byte[] ProjectLoader(ref string filePath){string path=string.Concat(luaPath,filePath,".lua");if(File.Exists(path)){return File.ReadAllBytes(path);}else{return null;}}

3.执行luaEnv.DoString(luaCode);执行单句lua代码,一般是"require('xxx')"执行一个lua脚本。

4.要使用Lua里的任何变量,通过luaEnv.Global获取;

public LuaTable Global{get{return luaEnv.Global;}}

 要获取table,在C#里定义一个有table同名成员的结构体或类。要获取函数,在C#里定义一个参数列表和返回类型相同的委托。在Global.Get<xxx>里填自定义的类型。

XLuaManager.Instance.Global.Get<xxx>("yyy");

Lua调用C#

静态方法用.,实例的方法用:

local obj=CS.UnityEngine.GameObject.Find("xxx")
obj.transform:FindChild(0)

C#里一大堆方便语法不能用,需要用相应的函数。

没有泛型<>,要用传入type的重载;

创建数组不能用new,要用

CS.System.Array.CreateInstance(typeof(CS.System.Int32),长度);

创建列表用

local List_String=CS.System.Collections.Generic.List(CS.System.String)local list=List_String()

创建字典用

local Dic1=CS.System.Collections.Generic.Dictionary(CS.System.String,CS.xxx)
local dic1=Dic1()

读取C#的字典元素可以用[],读取Lua创建的字典元素用

dic:get_Item(xxx)

写入字典元素用

dic:set_Item(xxx)

区别就是数组用CS.System一大串就直接创建了,List和Dictionary用CS.System一大串先得到类型xxx,再用xxx()创建实例。

二维数组读取元素需要用GetValue(x,y); 

对象==null需要用.Equals(nil);

+=需要用xxx=xxx+yyy;

out和ref参数是多返回值;

委托第一次要用=赋值,后面加函数;

事件用myEvent("+",xxx)加函数;

总结:没有new,部分类型(Lua创建的字典、二维数组)没有[],没有+=,没有++,没有<>。需要掌握相应的替代语法。

热补丁

xLua热补丁报错在Lua里找不到xLua变量

原因:在lua脚本里把xlua打成了xLua。 

热补丁协程报错This type must add to CSharpCallLua: System.Collections.IEnumerator

问题

 'AppDomain' does not contain a definition for 'DefineDynamicAssembly':找不到AppDomain下的DefineDynamicAssembly方法

解决方法:把报错扔给百度查,得到下面的文章。

C#反射中使用到Emit时,发现AppDomain.CurrentDomain.DefineDynamicAssembly()方法并不存在 - 名字已被使用N次 - 博客园 (cnblogs.com)

里面让把AppDomain.CurrentDomain替换成AssemblyBuilder,照做,解决。原因应该是微软把这个方法移动地方了,且改成了静态方法。

百度查DefineDynamicAssembly,能看到官方文档里有两个类里出现这个方法。

AppDomain的适用版本:

AssemblyBuilder的适用版本:

创建运行环境报错xlua assembly:<unknown assembly> type:<unknown type> member:(null)

原因:没把Plugin文件夹拷过来

Lua里调用C#的委托报错InvalidOperationException: not a generic method definition

C#代码

Lua代码

报错:not a generic method definition

C#里添加并执行委托没错,Lua直接执行Func1()也没错。如果改成一个根本不存在的成员:

报错会不一样:

说明xLua是能找到这个成员的,但是不允许把函数赋给它。打印MyStaticDelegate,是nil,类型也是nil。给它赋一个整数,不报错,打印,还是nil,执行,报错说不能执行nil。

这是C#里定义的一个类:

在lua里遍历它:

结果:

发现它含有NPC里的静态成员,但是静态字符串name和静态委托MyStaticDelegate不见了,但是有一个UnderlyingSystemType,类型是NPC。

然后试图把NPC实例化一个对象,对这个对象遍历:

得到报错:ob是NPC类型,不是table,不能遍历:

遍历了一下CS,以为会有很多东西:

结果:

连我定义的NPC类也没有。

解决方法:在C#定义的无参无返回值委托、传入自身的委托前面加[CSharpCallLua],不管是在Lua使用C#委托,还是C#委托接收Lua函数,都要加。有参且不为表自身的委托(如传入字符串、整数)可以不加。

不要用print(CS.成员)验证一个成员存不存在,就算不存在,也会添加这个成员,类型是table。下图:print CS里一个根本不存在的成员,发现它有值,而且遍历显示这个成员已经被创建出来了:

Lua添加按钮回调报错:LuaException: c# exception:System.InvalidOperationException: not a generic method definition

原因:AddListener的输入类型UnityAction没加CSharpCallLua特性!

解决方法:加上下面一段代码,xLua重新生成。

public static class CSLuaTypes{//记录C#和Lua会调用对方的类型[CSharpCallLua]public static List<Type> cSharpCallLuaTypes=new List<Type>(){typeof(UnityAction),typeof(UnityAction<float>),typeof(UnityAction<bool>)};[LuaCallCSharp]public static List<Type> LuaCallCSharpTypes=new List<Type>(){};
}

 

http://www.dtcms.com/wzjs/153527.html

相关文章:

  • 郑州做网站的论坛推广产品的渠道
  • 城市规划做底图的网站爱站网官网查询域名
  • 全校网站建设与管理b2b国际贸易平台
  • 多语言网站建设价格广州营销优化
  • 手机p2p网站图片外链
  • 搜狐做app的网站长沙网站开发制作
  • 网站制作代理今日新闻最新头条10条内容
  • 做网站除了有服务器还需要什么问题武汉seo搜索优化
  • 大连网站建设怎么做如何快速提升网站关键词排名
  • 北京免费网站建设模板引擎搜索大全
  • 做调查问卷赚钱哪个网站好宁海关键词优化怎么优化
  • 免费做网站手机软件上海排名优化seo
  • 张家界网站开发360社区app
  • wordpress漫画站产品市场调研怎么做
  • 网站建设拓扑图软文营销写作技巧
  • 制作网站代码吗个人网站设计模板
  • 178网站建设福州网站建设策划
  • 徐汇网站设计百度一下就会知道了
  • wordpress+bbs主题长沙官网seo技巧
  • seo外贸网站营销网址
  • 莱芜百度网站优化智能营销系统
  • 镇江建设网站的公司网络推广营销公司
  • 网站做301有什么用营销最好的方法
  • 北京的做网站的公司广东东莞最新疫情
  • 赣州网站建设江西网站建设国内推广平台有哪些
  • wordpress 英文主题seo网站关键词优化多少钱
  • 常州做网站公司哪家好企业网站管理
  • 网页做什么主题好seo 优化案例
  • 网站是哪个公司做的好百度关键词点击器
  • 南通网站建设招聘代发广告平台