ulua初识(一)

uLua与Unity交互

1.uLua文件夹结构

基础介绍

SimpleFramework框架项目的核心是ulua,在Unity环境下使用ulua可以实现Lua脚本与Unity内C#脚本的交互,通过Lua脚本来操作Unity3d内的各种游戏组件。

文件夹结构

1.Core:uLua核心
2.DocsLuLua文档,其实就是LuaInterface的PDF文档
3.Editor:uLua编辑器拓展
备注:项目内所有的Editor文件夹都是编辑器扩展文件夹,并不局限于根目录
4.Example:uLua自带演示案例
5.Source:cstolua核心目录

2.uLua环境下的代码交互

基础介绍

在前面的课程中在VS2015使用过LuaInterface项目中的两个DLL文件来实现C#与Lua的交互,而在ulua环境下本质也是通过LuaInterface来实现Lua与C#的交互,但是ulua对LuaInterface进行了二次封装,所以在代码书写上和原生lua稍有不同

2.C#代码中执行Lua代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LuaInterface;

     public class LuaForUnity : MonoBehaviour {
         void Start () {
        LuaState luaState = new LuaState();   //创建Lua解析器对象
        luaState.DoString("print('Hello Unity')");
                    }
}

1.同样需要在C#中引入LuaInterface
2.原生的lua解析器对象被封装成了LuaState
3.LuaState类存在的位置是uLua/Core/Lua.cs

3.通过lua在Unity创建游戏对象Lua代码中操作Unity内的类[反射方式/原生方式]
                private string str = @"
         luanet.load_assembly('UnityEngine')
         GameObject = luanet.import_type('UnityEngine.GameObject')
         BoxCollider = luanet.import_type('UnityEngine.BoxCollider')
         local player=GameObject('Monkey') 
         player:AddComponent(luanet.ctype(BoxCollider))  
    ";

LuaState luaState = new LuaState();   //创建Lua解析器对象
luaState.DoString(str);
说明

1>这种方式是我们之前在VS环境下演示的方式
2>luanet已结被封装到LuaInteface的命名空间内,所以我们可以直接在lua代码中使用luanet这个对象;
3>在Lua环境内操作C#中的类创建对象,不要写new关键字
4>在Lua环境内操作C#中类创建的对象,访问对象中的方法使用
player:AddComponent(luanet.ctype(BoxCollider))
5>这种"反射方式"在项目开发中并不常用,但也有用武之地,真正大量使用的是wrap方式

4.Lua代码中操作Unity内的类Wrap方式

private string str2 = @" luanet.load_assembly('UnityEngine') GameObject = UnityEngine.GameObject BoxCollider = UnityEngine.BoxCollider Animator = UnityEngine.Animator local player = GameObject('MKCode') player:AddComponent(BoxCollider.GetClassType()) player:AddComponent(Animator.GetClassType())
LuaScriptMgr lua = new LuaScriptMgr(); lua.Start(); lua.DoString(str2);

说明:

1.这种方式是ulua开发过程中最常用的方式
2.Wrap方式实现Lua调用C#,依赖的是之前生成的LuaWrap文件;
也就是我们通过Gen Lua Wrap File菜单自动生成到ulua\Source\LuaWrap下的脚本文件
首先清除Clear LuaBind File+Gen Lua Wrap FIle
3.当时用Wrap方式时,运行Lua代码需要使用[LuaScriptMgr]
4.需要把APPConst.cs脚本中的DebugMode修改为true(否则报三个error)

5.包装新的Wrap脚本

当我们用Lua的Wrap方式访问Unity脚本组件,如果这些脚本没有自动生成“xxxxWrap”,项目运行后就会报错
比如Animator脚本,Quatertion,Vector3就没有默认生成
遇到这种情况就需要前往ulua\Editor\WrapFile.cs脚本使用_GT(typeof(Animator)),加载

转载于:https://www.cnblogs.com/zhexianren/p/7906700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值