网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

在ToLua框架中如何使用C#与Lua-创新互联

这篇文章将为大家详细讲解有关在ToLua框架中如何使用C#与Lua,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联服务项目包括安图网站建设、安图网站制作、安图网页制作以及安图网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,安图网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到安图省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

Lua是目前国内使用最多的热更语言,基于Lua的热更框架也非常多,最近学习了一下ToLua的热更框架,主要使用的问题在于C#和Lua之间的互调,因此做一下学习记录以备后查。

所谓“互调”,当然要包括两个方面,一是通过C#调用Lua代码,二是通过Lua代码调用C#脚本,第二点还包括注册在C#脚本里的Unity物体。

1. ToLua的简单实现原理

ToLua框架主要是通过静态绑定来实现C#与Lua之间的交互的,基本原理是通过建立一个Lua虚拟机来映射C#脚本,然后再通过这个虚拟机来运行Lua脚本,Lua脚本在运行时可以通过虚拟机反过来调用C#脚本里注册过的物体,这种方式的优势在于比起使用反射的uLua来说效率更高。

ToLua框架下可以将实现分成三大部分:普通的Unity+C#部分、ToLua虚拟机部分和Lua脚本部分,结构见下图:

在ToLua框架中如何使用C#与Lua

ToLua结构

目前国内需要热更的手游一般都将主要的逻辑框架和组件功能用C#实现,而具体功能和调用放在Lua中,因为C#是不能被打包进AssetBundle中的,所以无法通过AssetBundle对代码进行改动,但是Lua是即时编译型语言,并且可以被打包进入AssetBundle中,在需要修改简单功能时,将Lua代码通过AssetBundle进行更新即可。

2. ToLua的下载的安装

首先是下载地址:

ToLua

这是作者的github地址,进入以后点击下载Zip,完成后解压到自己需要的目录,再用Unity打开即可。

在ToLua框架中如何使用C#与Lua

点击下载zip即可

第一次打开工程时会提示是否需要自动生成注册文件,新手可以选择直接生成,若选择了取消,也可以在编辑器菜单中手动注册。——这是一个非常重要的操作,后文也会提到。

下面开始关于使用的正文。

3. ToLua的基本使用

前面有提到过ToLua的基本实现方式,这里可以再细化一点:创建虚拟机——绑定数据——调用Lua代码,这套步骤在框架自带的Example里也非常清晰。

首先脱离Example实现一下这三个步骤。

ToLua虚拟机的创建非常简单,只需要new一个LuaState即可,我们建立一个C#脚本作为入口,引用LuaInterface命名空间,输入以下代码,将文件挂载到场景中的一个空物体上即可。

using LuaInterface;
using UnityEngine;
 
public class LuaScene : MonoBehaviour
{ 
 string luaString = @"
  print('这是一个使用DoString的Lua程序')
     ";
 string luaFile = "LuaStudy";
 LuaState state; 
 
 void Start()
 { 
 state = new LuaState();//建立Lua虚拟机
 state.Start();//启动虚拟机
 
 //使用string调用Lua
 state.DoString(luaString);
 
 //使用文件调用Lua
 //手动添加一个lua文件搜索地址
 string sceneFile = Application.dataPath + "/LuaStudy";
 state.AddSearchPath(sceneFile);
 state.DoFile(luaFile);
 state.Require(luaFile);
 
 state.Dispose();//使用完毕回收虚拟机
 Debug.LogFormat("当前虚拟机状态:{0}", null == state);//验证虚拟机状态
 } 
}

分享文章:在ToLua框架中如何使用C#与Lua-创新互联
转载来源:http://bjjierui.cn/article/dcidhi.html

其他资讯