项目简介:

这个是内部项目,有保密协议的,所以口述了。

这是个精密机械拆装的项目,使用unity2017.1.0f3开发,纯单机,没有后台服务器。

项目改造方向: 

最近领导要求进行改造,改成前后端分离的,并且把服务器部署到云端。

解决思路:

将项目中所有场景打包成assetbundle,放到服务器上,然后本地客户端从云端下载和加载。

开始:

1,场景资源打成ab包;

一共11个场景

从A到E是进入软件的一套场景,F是过度场景,其他的是拆装场景。

直接上代码:

using UnityEngine;
using UnityEditor;
using System.IO;/// <summary>
/// 场景资源打包ab
/// </summary>
public class BuildAssetBundle{//菜单   添加场景名称[MenuItem("build/1.create All Scene AssetBundleName")]static void clearAssetBundleName(){string[] files=Directory.GetFiles (Application.dataPath, "*.unity", SearchOption.AllDirectories);  for (int i = 0; i < files.Length; i++) {string currentFile=files [i].Replace ("\\", "/");int startIndex = currentFile.IndexOf ("Assets");string assetFile = currentFile.Substring (startIndex,currentFile.Length-startIndex);string sceneName = Path.GetFileNameWithoutExtension (assetFile);AssetImporter ai=AssetImporter.GetAtPath (assetFile);ai.assetBundleName = sceneName;ai.assetBundleVariant = "assetbundle";}}//打包所有AssetBundle[MenuItem("build/2.Build All AssetBundle")]static void buildAssetBundle(){string outPath=Application.streamingAssetsPath+"/AssetBundle";if (!Directory.Exists (outPath)) {Directory.CreateDirectory (outPath);}BuildPipeline.BuildAssetBundles (outPath,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows);}//清空AssetBundle[MenuItem("build/3.clear All AssetBundle")]static void clearAssetBundle(){string outPath=Application.streamingAssetsPath+"/AssetBundle";if (!Directory.Exists (outPath)) {return;}deleteFileOrFolder (outPath);AssetDatabase.Refresh ();}/// <summary>/// 删除文件/// </summary>/// <param name="fileOrFolder"></param>static void deleteFileOrFolder(string fileOrFolder){if (Directory.Exists (fileOrFolder)) {string[] allFiles=Directory.GetFiles (fileOrFolder);if (allFiles != null) {for (int i = 0; i < allFiles.Length; i++) {deleteFileOrFolder (allFiles [i]);}                }string[] allFolders=Directory.GetDirectories (fileOrFolder);if (allFolders != null) {for (int i = 0; i < allFolders.Length; i++) {deleteFileOrFolder (allFolders [i]);}                }Directory.Delete (fileOrFolder);}else {if (File.Exists (fileOrFolder)) {File.Delete (fileOrFolder);}}}
}

其中,根据平台要注意:BuildTarget.StandaloneWindows和BuildTarget.Android和BuildTarget.WebGL

我分别打包了三份,以备不时之需。

打包完后

2,新建空项目读取ab包。

主要代码,

运行后,可以进入第一个场景,但是后续的无法自动跳转。

然后我进行了修改,在代码里先把所有场景都加载进去,是这样的:

还是报错,无法加载脚本。

然后我把原项目中的_Scripts文件夹以及期内依赖的Plugins文件夹整体拷贝过来。

再次运行。

可以正常跳转场景,但是模型和材质丢失。并且Resource相关的api报错。

于是我干脆将所有Resource文件夹拷贝过来。

运行发现缺少本地拆装过程配置表。

都是xml。

再次运行后基本正常。仔细看发现好多坑。

坑1:RenderTexture相关的控件无法正常展示

如图,

需要重新把rendertexture拖到这里才可以正常播放

坑2:场景白化

原图是这样的

而且两个坑都没打算去想解决办法,因为这样使用ab包加载场景的方案已经被pass掉了--因为基本上把原项目里的都考过来了,有没有ab场景没太大区别了。。。

在关闭项目之前,我临时起意,打算试下网络加载ab包看看效果。

于是,我下载了apache-tomcat-8.0.39,修改server.xml配置

端口修改为8088

把ab包放到webapps里

运行tomcat

成功运行,

然后,测试访问

localhost测试

本机ip测试

都可以。

然后切换ab包加载地址

嗯,报错了

目测是缓存的问题

继续修改,www加载方式。

可以正常运行。当然,该有的坑依然存在。

Unity中一个安卓设备拆装项目,从使用到放弃ab包过程记录相关推荐

  1. VS2010打开项目提示未能正确加载解决方案中一个或多个项目

    今天打开vs2010项目,竟然提示"未能正确加载解决方案中一个或多个项目",还有什么详细去输出看,我在网上找了下,没有解决,我看输出下边是说"C:\Program Fil ...

  2. 随笔-Unity中一个简易的Spine动画控制器

    我们在Unity中使用Spine动画时,调整一个属性可能调用的是不同类,可能简简单单启动一个动画需要写很多个函数,于是我这边对Spine的动画控制做了一个简易的封装,在目前来说使用还是很方便的,也并不 ...

  3. 【Unity3D】Android 打包 ④ ( Android 工程打包 | Unity 中导出安卓工程 | Android Studio 打开 Unity 导出的 Android 工程 )

    文章目录 一. Android 工程打包 二. Android Studio 打开 Unity 导出的 Android 工程 一. Android 工程打包 Android 工程打包 就是将 Unit ...

  4. 【100个 Unity实用技能】☀️ | Unity中 检查当前设备网络状态 的几种方法整理

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...

  5. unity判断android设备,unity中判断iphone设备型号的方法

    二月 02.2018. 0 Comment 在unity开发iphone app,特别是最近适配iphone x时,需要知道app目前运行的设备型号.可以通过SystemInfo.deviceMode ...

  6. Visual Studio 2012未能正确加载解决方案中一个或多个项目。有关详细信息,请参见“输出”窗口。

    昨天把笔记本VS2012写的"网站"代码拷贝到家里的台式电脑上,双击: 出现: 这是因为在笔记本上VS2012编译的代码放到台式机上,它的物理路径发生了变化,所以导致出现了这样的问 ...

  7. SpringBoot 框架中 使用Spring Aop 、创建注解、创建枚举类 使用过程记录

    1.开始 在Springboot框架中引入AOP <dependency><groupId>org.springframework.boot</groupId>&l ...

  8. Unity中AB包详解(超详细,特性,打包,加载,管理器)

    Unity中的AssetBundle详解 AssetBundle的概念 AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包. Unity中的AssetBundle系统是对 ...

  9. MFC操作多个安卓设备(发送指令)

    在windows系统中访问安卓设备稍微有些麻烦,需要通过向adb.exe中写入指令进行控制.本篇主要描述MFC访问安卓设备的实例,在上一篇文章 " MFC工程按USB插口显示所有USB设备及 ...

  10. 第16章 Unity中的渲染优化技术

    程序优化的第一条准则: 不要优化.程序优化的第二条准则(仅针对专家! 〉: 不要优化. 一一Michael A. Jackson 在进行程序优化的时候,人们经常会引用英国的计算机科学家Michael ...

最新文章

  1. 在linux上面合并多个windows文件乱码的问题
  2. 【网络安全】能在Twitter和Instagram上实现信息收集和数据获取的工具
  3. 301转向和网址规范化
  4. lodop打印不显示页码_Lodop插件实现打印功能
  5. L2正则没有想象那么好?可能是“权重尺度偏移”惹的祸
  6. ITK:优化简单的抛物面函数
  7. linux 内核 linux kernel travel
  8. zookeeper删除节点的权限_Zookeeper使用超级用户删除带权限的节点
  9. mysql创建表时,表的类型与java的数据类型映射(常用)
  10. 14 对于移动类型561和账户xxxxxx Ext. GA本币计的金额(023)的不同的字段
  11. exe文件解包_如何获取别人微信小程序的源文件?
  12. 【javascript】基于javascript的小时钟
  13. 【畅捷通T+Cloud】12.3版本上线啦!
  14. 费式序列(斐波那契数列)
  15. win10创建新的计算机用户名和密码,Win10怎么新建账户 Win10创建新用户图文教程...
  16. MATLAB闪一下打不开问题解决
  17. 中国菜刀与一句话木马之间的原理分析
  18. 对五层网络协议体系结构的理解
  19. 《Linux防火墙(第4版)》——1.5 主机名和IP地址
  20. linux系统下修改hosts文件的权限

热门文章

  1. 迪斯尼:我们根本没被黑 整件事实际上是一场骗局
  2. 迄今为止最全:Oracle WebLogic Server产品版本介绍
  3. 图像处理之基础---叹为观止的图像处理
  4. PowerShell_零基础自学课程_9_高级主题:静态类和类的操作
  5. X3平台制程及工卡开立设计说明
  6. Gmail priority inbox帮助你减少工作量
  7. 【连载】【FPGA黑金开发板】NIOS II那些事儿--SDRAM实验(十二)
  8. 【风格迁移】Neural Style Transfer 神经风格迁移
  9. 0.42-0.5+0.08与0.08-0.5+0.42是不完全相等,Why is 0.3 - 0.2 - 0.1 (or similar) not equal to zero?
  10. 【车道线检测与寻迹】2月24日 CVST工具箱模块仿真与图像处理(二)、基于Vision对象的边缘检测、余弦变换压缩,与峰值信噪比