背景
时过境迁,这是一篇老文,写于2019年5月。
在学习最新的unity ecs过程中,以及学习最新的effect 时,在迈出第一步的时候即遭遇一些困难(学习和测试环境搭建不起来,有时候真的很无语),造成了一种“出师未捷,身先死”的赶脚。
实现
经过不断的尝试,实验和总结,总于有了很好的解决方案。
首先描述一下问题
具体问题以 ECS为例,按照官方以及大佬的教程和样例,
1、无法通过packages manager(国内部分网络如中国移动宽带)进行必要的包下载
2、可下载大佬教程例子,但包下载冲突或者api过期无法编译(初学者直接蒙逼,一声叹息!)
问题1的原因,unity 2018版本后推出了Package manager进行自己开源和第三方开源的包和插件的管理(类似.net nuget,又跟风) 大概可以定位到Package manager 用了一种本地代理的技术进行包下载,鉴于国内恶略的网络环境出现问题也是正常,解决方案 其实就是两种
a、土豪法,直接给网络搞定,这个就不用我多说了,土豪都懂得
b、屌丝法 又分为三个方法
1) 直接通过 packages 的mainfast.json配置文件进行包管理,目前github 下载下来的工程基本默认是这种方式,但是还是会出现不好用的情况(其实出现这种问题可以归结到问题2,这个在问题也是的解决方法中,描述解决方法)
2) 通过直接拷贝packages包的源文件文件夹进行解决,这个也是一些网上的unity新版本学习先行者提出来的,理论可行但是比较麻烦,首先要能正确下载需要的包文件,这个其实倒是不难,但是这种方法总显得有些麻烦,毕竟不如方法1 来的方便,所以不推荐使用
3) 通过修改 mainfast.json 配置文件进行 package 本地离线配置,进行包管理,实际上解决的方式很暴力,不是网络下载不了吗,那我直接使用离线版本行了吧,通过此方法竟然还能带来一个神奇的副作用,可以直接编译,debug 包的源代码了(比如我们要深入学习unity ecs系统就特别happy)。
文后附件,我会提供相关的配置文件和工程源码有需要的同学自己自行获取。
问题2 的原因 又分为两个 1、主要在于unity package manager这种跟风开源的组件包的策略的天生弊端性。
我们听说过一句话“开源就代表着质量低下”,道理很简单吗,如果开源的代码质量都那么好,干嘛需要商业软件,商业软件存在必定有他的道理。那么unity的 package 开源形式本事就存在着预览版不稳定,然后又加上本身包之间又有依赖关系,如ecs中 enities 又依赖burst ,collection ,job等多个包,本身这些包又是多个小组开发的又都是预览版,怎么保证这么多现编译的代码,再加上本身unity editor又是多版本快速迭代,这些东西加在一起,就变成了一种不可控制的变量了,不出问题都不正常。
2、本身这些包,在预览版不断迭代,api 变更很频繁,如ecs系统 竟然经过了30个版本的迭代(如本文发布的时候竟然是0.0.12-preview30)让人很蛋疼。照成了很多新手学习之后发现 过了一段时间api就变了,或者看的教程就是非最新版本的包,连下载都不能下载环境的搭建不出来,照成学习半途而废。
所以这里给的解决方案有3
1、按照问题1 的解决方法,建立一个相对稳定的版本和开发学习环境,(如学习ecs)在这个稳定环境中 将要学习的插件学习好,先不理会官方最新版本的迭代,我们先将知识的精髓学会
2、当你明白了包的精髓(如ecs学习),明白了他的原理以后呢,我们就可以很轻松的调整package manager 包管理器的mainfast.json配置文件,来选择自己所希望的版本
3、查询官方文档,特别是release 版本变更或者是api升级的文档,修改过时或者被拒绝的api到最新的api,最终跟上unity的快节奏。