zoukankan      html  css  js  c++  java
  • uLua学习笔记(三):Unity3D和Lua之间的相互调用

    这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下:

    先赞一个!

    Unity3D调用Lua

    Unity3D调用Lua的方法还是比较简单的,所以先说这个,由于这部分在学习笔记(一)中已经说的挺多的了,更多的内容点击这里回去看,所以这里我们就来看一个简单的示例即可:

     1 using LuaInterface;
     2 using UnityEngine;
     3 
     4 public class UnityCallLua : MonoBehaviour
     5 {
     6     private string lua = @"
     7 --两个数相加
     8 function add(a, b)
     9     return a + b
    10 end
    11 --多返回值
    12 function foo(a, b, c)
    13     return a + b, b + c, a + c
    14 end
    15 ";
    16 
    17     void Start()
    18     {
    19         //创建 lua 状态对象
    20         LuaState luaState = new LuaState();
    21         //运行脚本确保函数已经创建
    22         luaState.DoString(lua);
    23         //获取函数
    24         LuaFunction func = luaState.GetFunction("add");
    25         //调用函数
    26         object[] result = func.Call(5.2f, 1.3f);
    27         //打印结果
    28         Debug.Log(result[0]);
    29 
    30         //多返回值函数调用
    31         func = luaState.GetFunction("foo");
    32         result = func.Call(5.2f, 1.3f, 2.8f);
    33         for(int i = 0; i < result.Length; i++)
    34         {
    35             Debug.Log(result[i]);
    36         }
    37     }
    38 }

    将这个脚本绑定到场景摄像机机上运行即可查看结果。

    Lua调用Unity3D

    Lua调用Unity3D的方法实现上要稍微麻烦一点,具体有以下几个步骤:

    创建要被Lua调用的类

    首先我们需要一个被Lua调用的类,如下:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class MyClass : MonoBehaviour
     5 {
     6     public static void MyFunc()
     7     {
     8         Debug.Log("Lua call MyFunc!");
     9     }
    10 
    11     void Start()
    12     {
    13     }
    14     
    15     void Update()
    16     {
    17     }
    18 }

    为了足够简单,就用一个打印信息的静态方法。

    绑定要被调用的类

    打开uLuaEditorBindLua.cs文件,找到binds静态数组,把我们新建的类添加进去,如下:

    生成包装文件

    在使用之前我们需要先生成Unity可用的包装文件,即把Unity3D的类和方法注册到Lua中,这样Lua才能进行调用。

    幸运的是,这些文件不需要我们手动添加,只需要点击菜单栏的“lua”->“Clear LuaBinder File + Warp Files”先清空上次生成的包装文件,然后点击菜单栏“lua”->“gen Lua Warp File”重新生成包装文件即可。

    我们会发现我们的类的包装文件以及创建好了:

    添加注册信息

    我们打开uLuaLuaSystemWrap.lua文件,在最后添加我们新建的类,如下:

    开始调用

    新建一个场景,把下面的脚本绑定到摄像机即可:

     1 using LuaInterface;
     2 using UnityEngine;
     3 
     4 public class LuaCallUnity : MonoBehaviour
     5 {
     6     private string lua = @"
     7 MyClass.MyFunc()
     8 ";
     9 
    10     void Start()
    11     {
    12         LuaScriptMgr luaMgr = new LuaScriptMgr();
    13         luaMgr.Start();
    14 
    15         LuaState luaState = luaMgr.lua;
    16         luaState.DoString(lua);
    17     }
    18 }

    运行结果如下:

  • 相关阅读:
    网络性能测试工具iperf详细使用图文教程zz
    linux时间和定时器zz
    sleep
    linux调度器的配置参数zz
    zz升级Mininet自带的OpenvSwitch & 编译OpenvSwitch
    minnet sample
    电信新势力,TIP/CORD能颠覆电信设备商吗?
    【TS】534- TypeScript 可辨识联合
    【拓展】一张图看懂字节跳动8年创业史,太励志了吧
    【CSS】533- CSS 渲染原理以及优化策略
  • 原文地址:https://www.cnblogs.com/hammerc/p/4718857.html
Copyright © 2011-2022 走看看