我们在完成对xlua的学习后,现在我们在接下来的几天中,将会用一个案例来学习一下xlua的使用。请大家不用担心,这个课件的使用是基于xlua而开发的。因为我们在这个部分是为了使用xlua,所以我们只在已经做到的案例上进行xlua的学习。好了现在就开始吧。

一、补丁版本的开发

1.xlua的迁入与hotfix的环境配置

首先将从网上下下来的xlua文件,把里面的Assets下的文件的plugins和xlua以及伴生脚本全部拖入unity中。接着我们要在unity中的File-BuildSettings-PlayerSetting-other Settings-Scripting Define synbols下输入 HOTFIX_ENABLE 按Enter

我们在xlua-->Generate Code注入    Hotfix  Engine Editor生成

复杂到FishingJoy\Assets\XLua\src\Editor就行了。

在unity中创建一个C# HotFixScripts

  // Use this for initializationprivate LuaEnv luaEnv;void Start () {luaEnv = new LuaEnv();//添加状态机
        luaEnv.AddLoader(MyLoader);luaEnv.DoString("require'fish'");}private byte[] MyLoader(ref string filePath){string absPath = @"D:\unity  3d\lesson1\FishingJoy\Assets\PlayerPackage\" +filePath + ".lua.txt";return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath));}private void OnDisable(){luaEnv.DoString("require'fishDispose'");        }private  void OnDestroy(){luaEnv.Dispose();}

这个就是我们所说的自定义loader

接下来我们就要修复第一个问题

1.点击宝箱领取的金币钻石太拥挤,分散一点。

UI---Treasour---Btn_Treasour-->c# Treasour 在类前下[Hotfix] 在createPrize()上加如[luacallscharp] 然后注入,生成 打开fish.lua.txt

UnityEngine=CS.UnityEngine
--1.点击宝箱领取的金币钻石太拥挤,分散一点。
xlua.hotfix(CS.Treasour,'CreatePrize',function(self)for i=0,4,1 dolocal go=UnityEngine.GameObject.Instantiate(self.gold,self.transform.position+UnityEngine.Vector3(-10+i*40,0,0),self.transform.rotation)go.transform.SetParent(go.transform,self.cavas)local go1=UnityEngine.GameObject.Instantiate(self.diamands,self.transform.position+UnityEngine.Vector3(0,40,0)+UnityEngine.Vector3(-10+i*40,0,0),self.transform.rotation)go1.transform.SetParent(go1.transform,self.cavas)endend
)

写上如上代码 在fishDispose.lua.txt上写下 xlua.hotfix(CS.Treasour,'CreatePrize',nil),就行了

2.玩家金币钻石不够时没有相应处理。

player c# Gun 在Attack上加[luacallscharp]在fish.lua.txt上写下:

xlua.private_accessible(CS.Gun)
xlua.hotfix(CS.Gun,'Attack',function(self)if(UnityEngine.Input.GetMouseButtonDown(0))thenif(self.gold<1+(self.gunLevel-1)*2 or gold==0)thenreturnendself.bullectAudio.clip=self.bullectAudios[self.gunLevel-1]self.bullectAudio:Play()if(self.Butterfly)thenUnityEngine.GameObject.Instantiate(self.Bullects[self.gunLevel-1],self.attackPos.position,self.attackPos.rotation*UnityEngine.Quaternion.Enler(0,0,20))UnityEngine.GameObject.Instantiate(self.Bullects[self.gunLevel-1],self.attackPos.position,self.attackPos.rotation*UnityEngine.Quaternion.Enler(0,0,-20))endUnityEngine.GameObject.Instantiate(self.Bullects[self.gunLevel-1],self.attackPos.position,self.attackPos.rotation)if(not self.canShootForFree)thenself:GoldChange(-1-(self.gunLevel-1)*2)endself.attackCD=0self.attack=falseend
end
)

然后在fishDispose.lua.txt,写下xlua.hotfix(CS.Gun,'Attack',nil)就行了,这样这问题就结束了,记得到注册,并加注入。虽然这里写的比较简单,但是这里还是很容易写错的,我就是犯了一些错误。在初学xlua的时候,花式报错是一定的,我们还是要坚持的,一般的错误就是拼写错了。好了今天的部分就结束了,明天继续。

转载于:https://www.cnblogs.com/jake-caiee/p/9837744.html

016-热更新之FishingJoy一相关推荐

  1. Xlua文件在热更新中调用方法

    Xlua文件在热更新中调用方法 public class news : MonoBehaviour { LuaEnv luaEnv;//定义Lua初始变量 void Awake() { luaEnv ...

  2. 修改html时webpack热更新,webpack学习之路(二)webpack-dev-server实现热更新

    上一章对webpack的配置有了简单的认识. 这一章,我需要学习的是webpack热更新,因为在开发过程中,不希望当文件更改时,人肉去编译文件,刷新浏览器. webpack热更新 webpack-de ...

  3. 苹果禁止使用热更新 iOS开发程序员新转机来临

    今天本是女神们的节日,所有iOS程序员沸腾了!原因是苹果爸爸发狠了,部分iOS开发者收到了苹果的这封警告邮件: [图一 苹果邮件] 消息一出,一时间众多开发者众说纷纭,以下是来源于网络的各种看法: 有 ...

  4. 热更新 FrameWork

    工作中遇到想要绕过AppStore直接更新App的要求!这里友情提示下,看了很多资料只是是实现了功能,但在项目中并没有真正用到!资料大多都显示会被拒,这个说的是个人级的,好像企业级的不会这样,仅仅是项 ...

  5. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger

    原型链是JS的必备,作为ECMAScript4,原型链也是支持的. 特别说明,ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用. 本文旨在介绍如何使用原型链 ...

  6. vue 热更新无反应_不吹不黑谈谈 vue 的 SFC 和 template

    大家好,好久不贱,我是 132,今天给大家带来一篇关于 SFC 的文章 为什么我曾经不看好 SFC 和 template 过去,我一直不看好 SFC 和 template,甚至因为这个观点,还被很多 ...

  7. vue热更新失效_vue cli@3项目style标签里面热更新失效的问题

    1.首先献上一片webpack的默认配置文档 const path = require('path') module.exports = { publicPath: './', // 基本路径 out ...

  8. python程序更新实现_Python 软件热更新

    Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...

  9. IDEA下用freemarker热更新的问题

    首先说说freemarker热更新的问题.网上很多博客写的freemarker配置热更新用的属性文件配置 template_update_delay=0 ,但我是写在xml里的,不知道这个应该配置在x ...

  10. webpack热更新实现

    原文地址:webpack热更新实现 webpack,一代版本一代神,代代版本出大神.如果你的webpack和webpack-dev-server版本大于2小于等于3.6,请继续看下去.其它版本就必浪费 ...

最新文章

  1. Spring Boot + Mybatis + Shiro 后台权限管理系统
  2. matlab-创建函数
  3. spring boot的热加载(hotswap)
  4. vue 删除数组元素
  5. 【原】HTML页面元素加载顺序研究报告(2)----背景图片
  6. 003_Redis配置
  7. 【直播课】图像分类竞赛技巧与多标签分类实战
  8. callbackend entry point - iwfndcl_mgw_request_manager~read_entity
  9. 【转】关于Azure存储账户(2)
  10. NYOJ-最少步数(dfs)
  11. Java、JS、C++ 依然强势,Go、Kotlin 等新语言为何不能破局?
  12. #linux包之sysstat之iostat命令
  13. hdu--1073--字符串处理
  14. 3991: [SDOI2015]寻宝游戏
  15. 爬取淘宝历史价格,通过请求接口,获取到数据
  16. excel按条件选择工作表_在Excel工作表中选择“实际使用范围”
  17. Python学习之re.compile与findall
  18. 几幅图教你区分数字地、模拟地、电源地、单点接地
  19. SpringBoot+Schedule 定时任务的配置开关
  20. JavaScript空判断

热门文章

  1. OpenCV支持的图像格式
  2. 【Qt】QtCreator中关于Style Plugin Example没有效果的修改方法
  3. 海思3536:交叉编译Qt4.8.4
  4. 小插件 打开Android程序动画,android-单击小部件后如何启动活动?
  5. bscroll 滚动位置_better-scroll初始滚动位置
  6. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码
  7. 刀剑英雄登陆显示服务器繁忙,玩刀剑遇到问题解决方法
  8. 串口 发送 接收 高位_电工进阶PLC大神,必备PLC串口通讯的基本知识!
  9. 【单片机】以输出方波为例的 定时器使用
  10. 微信表白墙 微信小程序 吐槽墙 表白墙 java 开发