using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Pack { [Serializable] public class PackPlatforms : ISerializationCallbackReceiver { [SerializeField] private PackPlatformAndroid[] androids; [SerializeField] private PackPlatformWeiDuanAndroid[] weiDuanAndroids; [SerializeField] private PackPlatformiOS[] iOSs; [SerializeField] private PackPlatformPC[] pCs; [SerializeField] private PackPlatformH5[] h5s; [NonSerialized] public PackPlatformBase[] packPlatforms; public void OnBeforeSerialize() { if (packPlatforms == null) { androids = null; iOSs = null; pCs = null; h5s = null; return; } List androidLs = new List(); List weiDuanAndroidLs = new List(); List iOSLs = new List(); List pCLs = new List(); List h5Ls = new List(); for (int i = 0, iMax = packPlatforms.Length; i < iMax; i++) { PackPlatformBase packPlatformBase = packPlatforms[i]; if (packPlatformBase is PackPlatformAndroid) { androidLs.Add(packPlatformBase as PackPlatformAndroid); } else if (packPlatformBase is PackPlatformWeiDuanAndroid) { weiDuanAndroidLs.Add(packPlatformBase as PackPlatformWeiDuanAndroid); } else if (packPlatformBase is PackPlatformiOS) { iOSLs.Add(packPlatformBase as PackPlatformiOS); } else if (packPlatformBase is PackPlatformPC) { pCLs.Add(packPlatformBase as PackPlatformPC); } else if (packPlatformBase is PackPlatformH5) { h5Ls.Add(packPlatformBase as PackPlatformH5); } else { Debug.LogErrorFormat("Not Support Type : {0} At Serialize", packPlatformBase.GetType().FullName); } } androids = androidLs.ToArray(); weiDuanAndroids = weiDuanAndroidLs.ToArray(); iOSs = iOSLs.ToArray(); pCs = pCLs.ToArray(); h5s = h5Ls.ToArray(); } public void OnAfterDeserialize() { List packPlatformLs = new List(); FormatPackPlatforms(ref packPlatformLs, androids); FormatPackPlatforms(ref packPlatformLs, weiDuanAndroids); FormatPackPlatforms(ref packPlatformLs, iOSs); FormatPackPlatforms(ref packPlatformLs, pCs); FormatPackPlatforms(ref packPlatformLs,h5s); packPlatforms = packPlatformLs.ToArray(); } private void FormatPackPlatforms(ref List packPlatformLs, PackPlatformBase[] arr) { if (arr == null) return; if (packPlatformLs == null) packPlatformLs = new List(); for (int i = 0, iMax = arr.Length; i < iMax; i++) { packPlatformLs.Add(arr[i]); } } } }