11.Unity3D热更新LuaFramework入门实战(11)——使用总结

用的框架是LuaFramework_UGUI

地址:https://github.com/jarjin/LuaFramework_UGUI

最终效果:

更新前:

更新后:

1.新建场景,创建GameManager上挂上Main.cs

Main.cs代码:(作用就是启动框架,为框架入口)

        void Start() {
            AppFacade.Instance.StartUp();   //启动游戏
        }

 2.创建Panel1并作为预设,然后删除:(放到Assets/Prefabs下)


3.打开main.lua,添加如下代码

local go;

--主入口函数。从这里开始lua逻辑
function Main()		
	--print("hello");
	LuaFramework.Util.LogWarning("here");
	LuaHelper=LuaFramework.LuaHelper;
	resMgr=LuaHelper.GetResManager();
	resMgr:LoadPrefab('panel',{'Panel1'},OnLoadFinish);

end

--加载完成后的回调
function OnLoadFinish( objs )
	go = UnityEngine.GameObject.Instantiate(objs[0]);
	local parent = UnityEngine.GameObject.Find("Canvas")
	go.transform:SetParent(parent.transform);
	go.transform.localScale=Vector3.one;
	go.transform.localPosition=Vector3.zero;
end

4.打开AppConst.cs,将更新模式和Bundle模式开启,并修改weburl

5.Util.cs中GetRelativePath方法改成如下:

        public static string GetRelativePath() {
            if (AppConst.UpdateMode)
            {
                return "file:///" + DataPath;
            }
            if (Application.isEditor)
                return "file://" + System.Environment.CurrentDirectory.Replace("\\", "/") + "/Assets/" + AppConst.AssetDir + "/";
            else if (Application.isMobilePlatform || Application.isConsolePlatform)
                return "file:///" + DataPath;
            else // For standalone player.
                return "file://" + Application.streamingAssetsPath + "/";
        }

6.GameManager.cs方法OnInitialize()注释我们不需要的东西:

7.打开Packager.cs,在”处理框架实例包“HandleExampleBundle()中修改如下:

8.菜单栏LuaFramework>Build Window Resources;

此时会把Assets/Prefabs下的所有*prefab打包到StreamingAssets下。

9.本地开一个NetBox,并把StreamingAssets文件夹复制过去

10.运行unity,可以build一个exe出来方便后续操作观察。

11.跟2一样,做成预设,删除,然后执行8和9.

自此,就可以稳稳地操作热更新了。

1.加载预制体:

LuaHelper=LuaFramework.LuaHelper;
	resMgr=LuaHelper.GetResManager();
	resMgr:LoadPrefab('tank',{'Tank_pref','Plane_pref'},OnLoadFinish);

2.实例化预制体:

function OnLoadFinish( objs )
	--在场景中生成物体
	local plane = UnityEngine.GameObject.Instantiate(objs[1]);
	LuaFramework.Util.Log("plane加载完成")

	tank = UnityEngine.GameObject.Instantiate(objs[0]);
	LuaFramework.Util.Log("tank加载完成,添加控制逻辑")

	UpdateBeat:Add(Update,self)
end

3.控制坦克的前后左右移动:

steer=50; --旋转速度
speed=6;

function Update(  )
	LuaFramework.Util.Log("每帧执行");
	local Input = UnityEngine.Input;

	local horizontal = Input.GetAxis("Horizontal");
	local vertical = Input.GetAxis("Vertical");
	if(vertical<0) then
		horizontal=-horizontal;
	end

	local r = Vector3.up*steer*horizontal * Time.deltaTime;
    tank.transform:Rotate(r);
	local f = Vector3.forward*speed*vertical*Time.deltaTime;
	tank.transform:Translate(f);
end

 

补充:打开更新模式和不以ab方式读取时,路径出错
public const bool UpdateMode = false; //更新模式-默认关闭
public const bool LuaByteMode = false; //Lua字节码模式-默认关闭
public const bool LuaBundleMode = false; //Lua代码AssetBundle模式
//LuaBundleMode修改为false,这样代码文件便不会以AssetBundle模式读取,会直接生效,以方便调试。
LuaConst.cs中,lua逻辑代码目录改为如下:
//public static string luaDir = Application.dataPath + "/Lua"; //lua逻辑代码目录
public static string luaDir = Application.dataPath + "/LuaFramework/Lua";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kerven_HKW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值