016-热更新之FishingJoy一
我们在完成对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一相关推荐
- Xlua文件在热更新中调用方法
Xlua文件在热更新中调用方法 public class news : MonoBehaviour { LuaEnv luaEnv;//定义Lua初始变量 void Awake() { luaEnv ...
- 修改html时webpack热更新,webpack学习之路(二)webpack-dev-server实现热更新
上一章对webpack的配置有了简单的认识. 这一章,我需要学习的是webpack热更新,因为在开发过程中,不希望当文件更改时,人肉去编译文件,刷新浏览器. webpack热更新 webpack-de ...
- 苹果禁止使用热更新 iOS开发程序员新转机来临
今天本是女神们的节日,所有iOS程序员沸腾了!原因是苹果爸爸发狠了,部分iOS开发者收到了苹果的这封警告邮件: [图一 苹果邮件] 消息一出,一时间众多开发者众说纷纭,以下是来源于网络的各种看法: 有 ...
- 热更新 FrameWork
工作中遇到想要绕过AppStore直接更新App的要求!这里友情提示下,看了很多资料只是是实现了功能,但在项目中并没有真正用到!资料大多都显示会被拒,这个说的是个人级的,好像企业级的不会这样,仅仅是项 ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger
原型链是JS的必备,作为ECMAScript4,原型链也是支持的. 特别说明,ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用. 本文旨在介绍如何使用原型链 ...
- vue 热更新无反应_不吹不黑谈谈 vue 的 SFC 和 template
大家好,好久不贱,我是 132,今天给大家带来一篇关于 SFC 的文章 为什么我曾经不看好 SFC 和 template 过去,我一直不看好 SFC 和 template,甚至因为这个观点,还被很多 ...
- vue热更新失效_vue cli@3项目style标签里面热更新失效的问题
1.首先献上一片webpack的默认配置文档 const path = require('path') module.exports = { publicPath: './', // 基本路径 out ...
- python程序更新实现_Python 软件热更新
Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...
- IDEA下用freemarker热更新的问题
首先说说freemarker热更新的问题.网上很多博客写的freemarker配置热更新用的属性文件配置 template_update_delay=0 ,但我是写在xml里的,不知道这个应该配置在x ...
- webpack热更新实现
原文地址:webpack热更新实现 webpack,一代版本一代神,代代版本出大神.如果你的webpack和webpack-dev-server版本大于2小于等于3.6,请继续看下去.其它版本就必浪费 ...
最新文章
- Spring Boot + Mybatis + Shiro 后台权限管理系统
- matlab-创建函数
- spring boot的热加载(hotswap)
- vue 删除数组元素
- 【原】HTML页面元素加载顺序研究报告(2)----背景图片
- 003_Redis配置
- 【直播课】图像分类竞赛技巧与多标签分类实战
- callbackend entry point - iwfndcl_mgw_request_manager~read_entity
- 【转】关于Azure存储账户(2)
- NYOJ-最少步数(dfs)
- Java、JS、C++ 依然强势,Go、Kotlin 等新语言为何不能破局?
- #linux包之sysstat之iostat命令
- hdu--1073--字符串处理
- 3991: [SDOI2015]寻宝游戏
- 爬取淘宝历史价格,通过请求接口,获取到数据
- excel按条件选择工作表_在Excel工作表中选择“实际使用范围”
- Python学习之re.compile与findall
- 几幅图教你区分数字地、模拟地、电源地、单点接地
- SpringBoot+Schedule 定时任务的配置开关
- JavaScript空判断
热门文章
- OpenCV支持的图像格式
- 【Qt】QtCreator中关于Style Plugin Example没有效果的修改方法
- 海思3536:交叉编译Qt4.8.4
- 小插件 打开Android程序动画,android-单击小部件后如何启动活动?
- bscroll 滚动位置_better-scroll初始滚动位置
- vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码
- 刀剑英雄登陆显示服务器繁忙,玩刀剑遇到问题解决方法
- 串口 发送 接收 高位_电工进阶PLC大神,必备PLC串口通讯的基本知识!
- 【单片机】以输出方波为例的 定时器使用
- 微信表白墙 微信小程序 吐槽墙 表白墙 java 开发