原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0116/339.html
常州游戏开发培训-Unity手游代码更新策略
最近在项目开发上线过程中遇到了一些新问题,接下来的时间和大家多多探讨学习。大家在工作中遇到技术问题,或者有什么想分享的,欢迎多多探讨之前我们已经学过手机游戏的资源热更新策略了。在实际手游的开发运营中,我们需要经常修复bug,增加新玩法。这些通常都涉及到代码的更新。
常州微信公众平台unity游戏代码的更新比较复杂,也存在不同的更新策略,各有优缺点,在不同的平台上做法也不尽相同。这里主要谈一些比较常用的策略和各大手机平台上的策略。大家有更好的思路,欢迎探讨。
反射
大部分编程语言都是支持反射的,利用反射,可以动态去加载所需的程序。C#也是同样可以用反射来实现。要实现代码的更新,我们在项目初期就要做好规划,将一些容易变更的业务逻辑代码独立划分。每次更新时,将代码打包成dll,再打包成资源文件。程序启动时,检查更新到客户端,客户端通过反射重新加载代码运行。下面常州微信小程序开发通过一个简单的demo来演示。
1.在vs中新建一个代码库工程,命名为test
2.添加几个类Scirpt,Scirpt2,Data
3.将这个项目生成DLL,test.dll
4.新建一个unity项目,将DLL倒入到Asset,改名为test.bytes,不然可能会报错
5.利用我们之前实现过的打包脚本,将test.bytes打包成test.assetbundle。
6.创建CodeUpdate.cs脚本,用于加载代码资源,反射调用。
7.为了验证代码更新后,可以直接加载使用,我们可以更改一下Data.cs的代码,重复以上过程,可以看到,更新了代码打包后,我们重新运行游戏,就可以看到常州网站开发建设效果
Data.cs
- public class Data
- {
- private int attr;
- public Data()
- {
- attr = 2;
- }
- public override string ToString()
- {
- return attr.ToString();
- }
- }
- public class Script: MonoBehaviour
- {
- void Start()
- {
- Debug.Log("------------------I am script 1");
- Data data = new Data();
- Debug.Log("-------------" + data.ToString());
- }
- }
- using UnityEngine;
- using System.Collections;
- using System;
- public class CodeUpdate : MonoBehaviour {
- private static readonly string DLL_URL = "file:///c:/test游戏开发运营.assetbundle";
- void Start () {
- StartCoroutine(loadDllScript());
- }
- private IEnumerator loadDllScript()
- {
- WWW www = new WWW(DLL_URL);
- yield return www;
- AssetBundle bundle = www.assetBundle;
- TextAsset asset = bundle.Load("test",typeof(TextAsset)) as TextAsset;
- System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(asset.bytes);
- Type script1 = assembly.GetType("常州手游开发Script");
- GameObject obj = new GameObject();
- obj.AddComponent(script1);
- Type script2 = assembly.GetType("Script2");
- obj.AddComponent(script2);
- }
- }
上篇:上一篇:常州手游开发-Unity手游资源热更新策略
下篇:下一篇:常州游戏开发培训-U3D开发优化建议