开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:648

当前位置:游戏蛮牛 技术专区 教程分享

查看: 790|回复: 1

[基础知识] Unity热更新专题(九)Unity热更新实例

[复制链接]  [移动端链接]
7日久生情
4285/5000
排名
2175
昨日变化
4

1646

主题

1657

帖子

4285

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
132510
好友
17
蛮牛币
57291
威望
0
注册时间
2015-12-24
在线时间
352 小时
最后登录
2017-6-20
发表于 2016-1-12 15:18:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
  经过前面的学习。我们已经知道了用uLua进行Unity热更新的大概方法了。现在我们通过一个实例,来实现Unity热更新。

  我们在这里仿照上一节进行UI的热更新。

  首先创建你自己的UI界面,然后制成Prefab。然后再Asset Labels里AssetBundle里命名。这里要注意,制作UI所用到的所有素材也都要制成AssetBundle。

  然后就是代码部分了。

  首先,我们创建个空物体,添加脚本GlobalGenerator.cs脚本。

[AppleScript] 纯文本查看 复制代码
  using UnityEngine;

  using System.Collections;

  namespace SimpleFramework {

  /// <summary>

  /// 全局构造器,每个场景里都有,所以每个场景都会初始化一遍,也会初始化游戏管理器一次

  /// 如果游戏管理器已经存在了,就跳过了,否则创建游戏管理器,来保证游戏里只有一个GameManager

  /// </summary>

  public class GlobalGenerator : MonoBehaviour {

  void Awake() {

  InitGameMangager();

  }

  /// <summary>

  /// 实例化游戏管理器

  /// </summary>

  public void InitGameMangager() {

  string name = "GameManager";

  gameObject.AddComponent<AppView>();

  GameObject manager = GameObject.Find(name);

  if (manager == null) {

  manager = new GameObject(name);

  manager.name = name;

  AppFacade.Instance.StartUp();   //启动游戏

  }

  }

  }

  }



  更改GameManager.lua脚本:

[AppleScript] 纯文本查看 复制代码
  require "Common/define"

  require "Controller/BottomCtrl"

  require "Controller/SettingsCtrl"

  require "Controller/DialogCtrl"

  GameManager = {}

  local this = GameManager

  function GameManager.LuaScriptPanel()

  return 'Bottom','Settings','Dialog'

  end

  function GameManager.OnInitOK()

  AppConst.SocketPort = 2012

  AppConst.SocketAddress = "127.0.0.1"

  NetManager:SendConnect()

  BottomCtrl.Awake()

  SettingsCtrl.Awake()

  DialogCtrl.Awake()

  end



  这个脚本可以参照原示例来写。

  其中:

[AppleScript] 纯文本查看 复制代码
  function GameManager.LuaScriptPanel()

  return 'Bottom','Settings','Dialog'

  end



  与我们需要热更的对应:

  然后就是三个对应的View脚本:

 
[AppleScript] 纯文本查看 复制代码
 SettingsPanel = {}

  local this = SettingsPanel

  local transform

  local gameObject

  function SettingsPanel.Awake(obj)

  gameObject = obj

  transform = gameObject.transform

  this.InitPanel()

  end

  function SettingsPanel.InitPanel()

  this.anim = transform:FindChild("Bg"):GetComponent("Animator")

  this.buttonClose = transform:FindChild("Bg/ButtonClose").gameObject

  end


[AppleScript] 纯文本查看 复制代码
  BottomPanel={}

  local this = BottomPanel

  local transfrom

  local gameObject

  function BottomPanel.Awake(obj)

  gameObject = obj

  transfrom = obj.transform

  this.InitPanel()

  end

  function BottomPanel.InitPanel()

  this.buttonSettings = transfrom:FindChild("ButtonSettings").gameObject

  this.buttonPeople = transfrom:FindChild("ButtonPeople").gameObject

  this.buttonDialog = transfrom:FindChild("ButtonDialog").gameObject

  end



[AppleScript] 纯文本查看 复制代码
  DialogPanel = {}

  local this = DialogPanel

  local transform

  local gameObject

  function DialogPanel.Awake(obj)

  gameObject = obj

  transform = obj.transform

  this.InitPanel()

  end

  function DialogPanel.InitPanel()

  this.anim = transform:FindChild("Bg"):GetComponent("Animator")

  this.buttonClose = transform:FindChild("Bg/ButtonClose").gameObject

  end



  对应的Controller下的脚本。

[AppleScript] 纯文本查看 复制代码
  require "Common/define"

  SettingsCtrl = {}

  local this = SettingsCtrl

  local transform

  local gameObject

  local lua

  function SettingsCtrl.New()

  return this

  end

  function SettingsCtrl.Awake()

  PanelManager:CreatePanel( "Settings", this.OnCreate )

  end

  function SettingsCtrl.OnCreate(obj)

  gameObject = obj

  transform = obj.transform

  lua = gameObject:GetComponent("LuaBehaviour")

  lua:AddClick( SettingsPanel.buttonClose,this.OnButtonClose )

  end

  function SettingsCtrl.OnButtonClose()

  this.Hide()

  end

  function SettingsCtrl.Show()

  SettingsPanel.anim:SetBool("IsShow",true)

  end

  function SettingsCtrl.Hide()

  SettingsPanel.anim:SetBool("IsShow",false)

  end



 
[AppleScript] 纯文本查看 复制代码
 require "Common/define"

  DialogCtrl = {}

  local this = DialogCtrl

  local transforml

  local gameObject

  local lua

  function DialogCtrl.New()

  return this

  end

  function DialogCtrl.Awake()

  PanelManager:CreatePanel( "Dialog", this.OnCreate )

  end

  function DialogCtrl.OnCreate(obj)

  gameObject = obj

  transform = obj.transform

  lua = gameObject:GetComponent("LuaBehaviour")

  lua:AddClick( DialogPanel.buttonClose,this.OnButtonClose )

  end

  function DialogCtrl.OnButtonClose()

  this.Hide()

  end

  function DialogCtrl.Show()

  DialogPanel.anim:SetBool("IsShow",true)

  end

  function DialogCtrl.Hide()

  DialogPanel.anim:SetBool("IsShow",false)

  end


[AppleScript] 纯文本查看 复制代码
  require "Common/define"

  BottomCtrl = {}

  local this = BottomCtrl

  local transform

  local gameObject

  local lua

  function BottomCtrl.New()

  return this

  end

  function BottomCtrl.Awake()

  PanelManager:CreatePanel( "Bottom",this.OnCreate )

  end

  function BottomCtrl.OnCreate(obj)

  gameObject = obj

  transform = gameObject.transform

  lua = gameObject:GetComponent("LuaBehaviour")

  lua:AddClick( BottomPanel.buttonDialog,this.OnButtonDialogClick )

  lua:AddClick( BottomPanel.buttonPeople,this.OnButtonPeopleClick )

  lua:AddClick( BottomPanel.buttonSettings,this.OnButtonSettingsClick )

  end

  function BottomCtrl.OnButtonDialogClick()

  DialogCtrl.Show()

  end

  function BottomCtrl.OnButtonPeopleClick()

  end

  function BottomCtrl.OnButtonSettingsClick()

  SettingsCtrl.Show()

  end



  我们在运行前,要先Clear,再Build。

  运行结果如下:

20150920190242081.png


  这就是一个简单的实例。

  unity有了很多lua的绑定库,也有了ulua这样的pure c#移植实现。

  你还有一个选择是C#Light/Evil,他是C#语法的,pure c#实现的一门新生脚本语言,就是为了逻辑热更新而生。

  以后再讨论。

unity3d ulua;unity3d 热更新 lua;ulua unity3d 怎么样;unity3d lua 热更新

回复

使用道具 举报

3偶尔光临
282/300
排名
9001
昨日变化
8

0

主题

80

帖子

282

积分

Rank: 3Rank: 3Rank: 3

UID
111459
好友
1
蛮牛币
237
威望
0
注册时间
2015-7-1
在线时间
158 小时
最后登录
2016-3-24
发表于 2016-2-22 12:14:11 | 显示全部楼层
sikikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
[发帖际遇]: 我又不乱来 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表