一、LuaScriptMgr和DoString方法

LuaScriptMgr:uLua自带的管理器,对 LuaState 进行了封装,而 LuaState 又是对 Lua 解析器对象的进一步封装,LuaState 是运用的反射方式,而 LuaScriptMgr 用的是 Wrap 方式

DoString方法:载入文件并执行代码块,对于相同的文件每次都会执行,适用于简单便捷的任务,和DoFile很像

一个很简单的实例如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TextULua : MonoBehaviour
{private string luaText = @"luanet.load_assembly('UnityEngine')Resources = UnityEngine.ResourcesGameObject = UnityEngine.GameObjectVector3 = UnityEngine.Vector3BoxCollider = UnityEngine.BoxCollider Quaternion = UnityEngine.Quaternionlocal cube = Resources.Load('Cube')    for i = 1, 5, 1 dofor j = 1, 5, 1 dolocal object = GameObject.Instantiate(cube, Vector3(i, j, 0), Quaternion.identity)object.name = i .. jobject:AddComponent(BoxCollider.GetClassType())endend";void Start(){LuaScriptMgr lua = new LuaScriptMgr();lua.Start();lua.DoString(luaText);}
}

需要在Resources文件夹下有"Cube"预制体

二、生成Warp脚本

我们上面在Lua中需要用到C#中的对象,所以就必须生成Wrap文件,如下

在WrapFile.cs中添加

_GT(typeof(Resources)),
_GT(typeof(GameObject)),
_GT(typeof(Vector3)),
_GT(typeof(Quaternion)),

然后生成Wrap即可,注意

  • Lua 操作 C# 中的对象的使用 "." 来调出
  • 实例化出来的对象,调用对象自身的方法用 ":",如果是静态方法还是用 ".",例如 "GameObject.Instantiate()"

到这里就可以运行测试了

三、lua脚本独立文件

也可以在Resources文件夹下新建一个txt文件,然后通过 Resources.Load<TextAsset>("文件名") 的方法 执行lua代码,如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TextULua: MonoBehaviour
{void Start(){LuaScriptMgr lua = new LuaScriptMgr();lua.Start();TextAsset luaScript = Resources.Load<TextAsset>("LuaText.lua");lua.DoString(luaScript.text);}
}

其中 LuaText.lua 中的内容就是上面 "private string luaText" 中的内容

当然,一般在正式开发中,为了实现热更新,Lua代码都是需要存放于独立的 Lua 脚本文件中的,也就是存放在 SimpleFramework 框架项目根目录下的 Lua 文件夹中,上面的只是做测试。在使用菜单命令生成 AB 包的时候,会将该文件夹下所有的 Lua 脚本一起拷贝到 StreamingAssets 目录下,为下一步热更新做准备

LuaForUnity9:uLua的一个简单实例相关推荐

  1. 学习ARM反汇编工具objdump和一个简单实例

    学习ARM反汇编工具objdump和一个简单实例 --参考朱有鹏ARM裸机编程 1.反汇编的原理&为什么需要反汇编 arm-linux-objdump -D led.elf > led_ ...

  2. ASP.NET MVC Framework体验(1):从一个简单实例开始

    概述 12月10日微软发布了ASP.NET 3.5扩展的预览版,在其中包括了ASP.NET MVC Framework.ASP.NET AJAX改进.ASP.NET动态数据支持.ASP.NET SIl ...

  3. Ajax实现局部数据交互的一个简单实例

    想要实现的功能:利用Ajax技术通过点击一个<button>按钮,然后在指定的文本框中输出想要的值. 1.使用Jsp创建一个前端页面. 1 <body> 2 <div s ...

  4. C++ 容器的综合应用的一个简单实例——文本查询程序

    [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例. 通过实现一个简单的文本查询程序,希望能够对C++的容器学习有更深的理解. 由 ...

  5. 关于图片轮播图的一个简单实例 以及实例中发现问题

    1.最近在学习JS的过程中,为了巩固水平做了一个简单的轮播图,以及在做的过程中发现一些问题(未解决!希望可以有大佬可以解释这个问题) 2.代码如下: <!DOCTYPE html> < ...

  6. 用了N年的接口,你知道接口是什么吗?——一个简单实例说明接口的伟大意义...

    ASP.NET基础知识:简单的实例理解接口的伟大意义 WestGarden 2012-5-26 http://www.cnblogs.com/WestGarden/ 源代码:13033480群共享 首 ...

  7. 怎么获取上一个html网页传过来的值_爬虫:一个简单实例说明爬虫机制

    爬虫,我的简单理解就是通过写定的程序,利用计算机的高速的优势,批量高效的获取数据的一种机制.通常我们访问网站是通过浏览器,而爬虫就是通过程序访问网站,也就是让程序伪装成浏览器进行访问. ​Reques ...

  8. JNI的一个简单实例

    本例子使用的操作系统MacOS, 64位JVM. JNI编写的几个步骤如下: 编写Java代码,并注明native方法: public class HelloJni {public native vo ...

  9. fitnesse java_Fitnesse的一个简单实例

    Fixture 代码 packageeg;importorg.joda.time.DateTime;public classJodaTime {intyear;publicString getCurr ...

最新文章

  1. 实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别?...
  2. 远程桌面解决(面对不同问题)连接办法
  3. TensorFlow 莫烦视频学习笔记例子二(一)
  4. POJ-2480 Longge's problem 积性函数
  5. git 入门教程之版本管理
  6. ASP.NET MVC 环境配置,从1.0到2.0的转换和学习资源等
  7. Spark与Mysql(JdbcRDD)整合开发
  8. Caffe学习记录(十一) ICNet分割网络学习
  9. Spring容器创建流程(1)容器创建准备
  10. 引用axiv文献的问题
  11. python之OrderedDict
  12. 为什么B+树适合做索引
  13. date和datetime长度设置多少_太原市玻璃温室大棚多少钱
  14. Rose双机热备两款软件原理介绍以及共享存储双机热备方案和镜像双机热备方案介绍
  15. 2021-04-26
  16. java计算机毕业设计小小银动漫网站源码+lw文档+系统+数据库
  17. 【必看】没用的旧手机还能换钱,换换回收手机回收价格表曝光
  18. python实现前复权及后复权
  19. 咸达医药数据库--介绍
  20. Android 内存检测工具

热门文章

  1. python工资一般多少-Python就业都有哪些岗位?每个岗位薪资多少?
  2. python使用-Python3 错误和异常
  3. python有哪些用途-python的主要用途是什么
  4. python语言的读法-Python语言的优势有哪些?
  5. 为什么都建议学java而不是python-现在学Python还是Java好呢?
  6. python工资一般多少p-Python P值
  7. 玩转Win7语音识别功能 让Win7“听话”
  8. asp.net 提取html div,asp.net – 将div固定在html中的某一点
  9. yarn在vscode里启动报错
  10. React入门基础+练习(二)