Unity3D热更新基础:C#与Lua相互调用
来源:互联网 发布:只有我知在哪里看 编辑:程序博客网 时间:2024/05/21 08:12
在使用Unity开发游戏以支持热更新的方案中,使用ULua是比较成熟的一种方案。那么,在使用ULua之前,我们必须先搞清楚,C#与Lua是怎样交互的了?
一.基本原理
简单地说,c#调用lua, 是c# 通过Pinvoke方式调用了lua的dll(一个C库),然后这个dll执行了lua脚本。
ULua = Lua + LuaJit(解析器、解释器) +LuaInterface。
其中,LuaInterface中的核心就是C#通过Pinvoke对Lua C库调用的封装,所以,在Unity中,LuaInterface就是C#与Lua进行交互的接口。
下面我们以一个简单的例子来演示C#与Lua的相互调用。
二.入门例子
如下是构建这个例子的步骤。
(1)下载ULua源码。
(2)在Unity中新建一个项目,并将ULua源码拷贝到Assets目录下。
(3)将ulua.dll(就是上面提到的C库)放到Assets下的Plugins文件夹中。(没有Plugins文件夹就新建一个)
(4)在Assets下的Script文件夹中新建一个脚本CSharpLuaTest.cs,并将该脚本绑定到Main Camera上。
(5)在CSharpLuaTest.cs中编辑以下内容:
(6)在Assets下的StreamingAssets文件夹中新建一个Lua脚本文件Test.lua,打开Test.lua文件,并编辑如下内容:
function
LuaMethod(i)
s = CSharpMethod(i); --调用C
#方法
return
i,s;
end
(7)运行Unity项目,则可以看到输出:999 - Hello World 1000 !
三.要点说明
最后简单说一下上面代码的要点:
1.如果一个C#方法要被Lua调用,则首先要将其注册到Lua虚拟机中(LuaState.RegisterFunction)。之后,在Lua中就可以通过注册的名称来调用这个C#方法。
2.如果C#要调用Lua中的函数,则
(1)首先要在Lua虚拟机中加载该函数(LuaState.DoFile)。
(2)拿到目标函数(LuaState.GetFunction)。
(3)执行目标函数(LuaFunction.Call)。
- Unity3D热更新基础:C#与Lua相互调用
- Unity3D热更新基础:C#与Lua相互调用
- 热更新-Android与Lua相互通信
- 热更新-Android与Lua相互通信
- 热更新中的lua与c#
- 1、在C#与Lua相互调用
- 1、在C#与Lua相互调用
- Unity3D热更新<一> 学习Lua
- 4.Unity3D热更新-LuaFramework-Lua组件
- Unity热更新(四): C#与Lua交互
- Unity3D和Lua之间的相互调用
- Unity3D中js与C#之间相互调用的解决办法
- lua与C++相互调用
- lua与C++相互调用
- lua与C++相互调用
- lua与C++相互调用
- c++与lua相互调用
- c与lua 相互调用
- HTML5之img标签
- Undefined symbols for architecture arm64
- dubbo直连
- 线段树(1)
- 中文内容转码UTF8解决方案
- Unity3D热更新基础:C#与Lua相互调用
- Java趣味小程序:打弹珠
- Python在人工智能时代的作用
- Oracle 实例名/服务名(SID/Service_Name)的区别
- 6/30作业:.类实现接口
- CopyOnWriteArrayList与ConcurrentHashMap原理解析
- 数据平台作业调度系统详解-理论篇
- 文件上传的一些绕过方法
- 面试题53:正则表达式匹配