Jenkins安装和配置
产品流水线
JDK下载JDK17新版的Jenkins已经不再支持Java8。
Java Downloads | Oracle 中国
下载JDK17,默认安装在“C:\Program Files\Java\jdk-17\”即可
下载完成后,会自动在环境变量中添加如下的Path(要打开Windows环境变量,在此电脑右键——属性——高级系统设置——环境变量,上面是用户变量,下面是系统变量,双击系统变量的Path):
1C:\Program Files\Common Files\Oracle\Java\javapath
这时按Win+R,输入cmd进入命令行,输入“java -version”就能查看Java版本信息。
JDK1.8(可选)Unity使用的是JDK1.8,老版本的Jenkins也可以使用Java 8 SE,也就是JDK1.8的。
新版本的Unity想要开启安卓开发,就必须在Unity Hub下载“Android Build Support”,在以前的Unity开发中,需要自己安装配置JDK1.8和Android SDK(需要安装Android Studio)。
新版的Uni ...
知识补充
Mono内存和GCUnity的脚本申请的内存称为Mono内存(IL2CPP环境下就是IL2CPP内存),注意不要把它和资产(模型、音频等)所占用的内存搞混了。
我们常说的GC和Mono内存有关,Mono内存刚开始给20M,如果随着软件的进行超过了这个值,就会触发GC,触发后如果内存还不够,就会尝试增加内存,变为40M。Mono内存只会增不会减,所以我们在脚本中要控制好类的释放,不能总是在new
Unity的关闭GCUnity有手动控制GC的功能,详见:
Unity - Scripting API: GarbageCollector
Resources.UnloadAsset在ResourceManager.UnloadUnusedAssets方法中,我们使用了Resources.UnloadUnusedAssets()来清理编辑器下的资源。
123456789101112 /// <summary> /// 回收一个资源 /// </summary> /// <param name="destroyCache"& ...
框架整理
框架涉及的文件路径整理在ResFrame.Editor——Editor文件夹下新建ResFrameConfig脚本
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152using UnityEngine;using UnityEditor;[CreateAssetMenu(fileName ="ResFrameConfig",menuName ="CreateResFrameConfig",order = 2)]public class ResFrameConfig : ScriptableObject{ [Tooltip("打包时生成AB包配置表的二进制路径")] public string m_ABBytePath = "Assets/GameData/Data/ABData/AssetBundleConfig.bytes"; [Toolt ...
配置表总结
类转Xml我们在实现了ExcelBase的数据脚本上右键——“类转xml”,就能在DataEditor脚本指定的XmlPath中生成对应的xml文件。
ExcelBase必须在Constructor方法中填入了基本的数据。
类转Xml只是方便程序员生成数据xml并填入修改基本的数据。
Xml转Binary我们修改了相应的xml数据之后,就可以在xml上右键——“Xml转Binary”,就能在DataEditor脚本指定的BinaryPath中生成对应的bytes文件。
也可以在“Tools——Xml——所有Xml转Binary”,将所有的xml转为二进制。
我们在游戏内部都是用二进制进行序列化。
如果对游戏进行简单存档,也推荐使用二进制。
Xml转Excel在xml上右键——Xml转Excel,就能在DataEditor脚本指定的ExcelPath中生成对应的Excel文件
需要先写好对应的Reg文件。
具体的流程是:读取Reg文件并缓存到sheetClass中间类——反序列化xml,得到一个带有数据的类——按照sheetClass的信息,将带有数据的类填入sheetData中间 ...
Excel转Xml
添加的方法在DataEditor中添加如下方法
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419 ...
xml转Excel拓展
基础List的解析和拼接添加list数据我们首先给MonsterBase中添加list
1234567[System.Serializable]public class MonsterBase{ //... [XmlElement("AllString")] public List<string> AllString { get; set; }}
修改MonsterData中的Construction方法
12345678910111213141516171819202122232425public class MonsterData : ExcelBase{ /// <summary> /// 编辑器下初始类转xml /// </summary> public override void Construction() { AllMonster = new List<MonsterBase>(5) ...
xml转Excel
通过之前写的MonsterDataReg.xml这个reg文件,把我们的MonsterData.xml映射进一个Excel里面,其实本质上就是MonsterData类映射到Excel。
创建读取Reg.Xml的中间类在DataEditor中添加VarClass中间类
1234567891011121314151617181920212223/// <summary>/// 用来读取Reg.xml中variable的中间类/// </summary>public class VarClass{ /// <summary> /// 对应的是变量名 /// </summary> public string Name { get; set; } public string Type { get; set; } public string Col { get; set; } public string DefaultValue { ...
反射讲解
基本反射使用1234567891011121314151617181920212223242526272829303132333435363738394041 [MenuItem("Tools/测试反射")] public static void TestReflection() { TestForReflection test = new TestForReflection(); test.isTest = true; test.Id = 1; test.Name = "test"; object nameValue = null; Type testType = test.GetType(); MemberInfo[] members = testType.GetMember("Name", BindingFlags.Public | BindingFlags.Instance | BindingF ...
类与Excel转换
类与Excel转换原理类和Excel想要映射,需要一个reg.xml来做中转。
一个中转reg.xml文件示例(注意图中的Foreign拼错了):
rootNode命名为“data”,它有三个Attribute
name:rootNode对应的类。
from:此reg映射的Excel
to:此reg映射的xml
普通的Node命名为“variable”,它根据需要有多种Attribute
name:必须要有,对应变量名
col:在Excel中的列名
type:此变量的类型,除了常见的几种类型,还有一些针对list的特殊的类型,见下面的Reg注意事项
defaultValue:此变量的默认值,在Excel转xml的时候使用
foreign:如果此“variable”的type是list,那么就有此Attribute,代表的是此变量对应的列表sheet上一层是什么主键,一般就是Excel里面的“ID”
split:如果此“variable”的type是list,那么就有此Attribute,代表的是在同一个sheet显示时的分割方式,避免使用多个sheet
集合性质的Node ...
配置表准备
常见的配表方式
基于Python的Excel与类的映射。最终生成一个python文件。
基于protobuf的Excel与类的映射。生成一个二进制。
程序生成xml,策划配置excel使用vb转成xml,运行时使用的是二进制。
教程中使用第三种的优化版,下图是基本流程。
在游戏运行时,程序内部基本都是类和二进制互相转化,二进制反序列化来读取配置,类序列化成二进制来存档等。
其余的转化操作都是编辑器环境下完成的。
配置表序列化封装在之前整理了工程文件目录和程序集,截图如下:
在ResFrame文件夹下新建ConfigFramework文件夹,并在其中新建BinarySerializeOpt脚本
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 ...