框架涉及的文件路径整理
在ResFrame.Editor——Editor文件夹下新建ResFrameConfig
脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| using 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"; [Tooltip("类转Xml或Excel转xml时生成的xml所在的文件夹路径")] public string m_XmlPath = "Assets/GameData/Data/Xml/"; [Tooltip("Xml转二进制时生成的二进制文件所在的文件夹路径")] public string m_BinaryPath = "Assets/GameData/Data/Binary/"; [Tooltip("存放数据类脚本的文件夹路径")] public string m_ScriptsPath = "Assets/Scripts/Data/"; } [CustomEditor(typeof(ResFrameConfig))] public class ResFrameConfigInspector : Editor { SerializedProperty m_ABBytePath; SerializedProperty m_XmlPath; SerializedProperty m_BinaryPath; SerializedProperty m_ScriptsPath;
private void OnEnable() { m_ABBytePath = serializedObject.FindProperty("m_ABBytePath"); m_XmlPath = serializedObject.FindProperty("m_XmlPath"); m_BinaryPath = serializedObject.FindProperty("m_BinaryPath"); m_ScriptsPath = serializedObject.FindProperty("m_ScriptsPath"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(m_ABBytePath, new GUIContent("AB包二进制配置文件路径")); EditorGUILayout.Space(5); EditorGUILayout.PropertyField(m_XmlPath, new GUIContent("Xml配置文件路径")); EditorGUILayout.Space(5); EditorGUILayout.PropertyField(m_BinaryPath, new GUIContent("二进制配置文件路径")); EditorGUILayout.Space(5); EditorGUILayout.PropertyField(m_ScriptsPath, new GUIContent("数据脚本路径")); EditorGUILayout.Space(5); serializedObject.ApplyModifiedProperties(); } } public class ResConfig { private const string ResFramePath = "Assets/ResFrame.Editor/Editor/ResFrameConfig.asset"; public static ResFrameConfig GetResFrameConfig() { ResFrameConfig resConfig = AssetDatabase.LoadAssetAtPath<ResFrameConfig>(ResFramePath); return resConfig; } }
|
在ResFrame.Editor——Editor文件夹内“右键——CreateResFrameConfig”。可以在里面修改各个路径位置
BundleEditor
修改BundleEditor
脚本
1 2 3 4 5 6 7
| public class BundleEditor { private static string ABCONFIGPATH = "Assets/ResFrame.Editor/Editor/Resource/ABConfig.asset"; private static string BYTEPATH = ResConfig.GetResFrameConfig().m_ABBytePath; private static string m_BundleTargetPath = Application.dataPath + "/../AssetBundle/" + EditorUserBuildSettings.activeBuildTarget.ToString();
}
|
DataEditor
修改DataEditor
脚本
1 2 3 4 5 6 7
| public class DataEditor { public static string XmlPath = ResConfig.GetResFrameConfig().m_XmlPath; public static string BinaryPath = ResConfig.GetResFrameConfig().m_BinaryPath; public static string ScriptsPath = ResConfig.GetResFrameConfig().m_ScriptsPath;
}
|
打包
在ResFrame.Editor——Editor——Resource文件夹内的ABConfig中,添加配置表二进制数据的路径:
1 2 3 4
| AB Name:bytes Path:Assets/GameData/Data/Binary AB Name:UGUI Path:Assets/GameData/UGUI
|
UGUI文件夹主要存放UI的美术素材
AssetBundleManager
修改AssetBundleManager指定的配置文件名称,让它可以自定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| public class AssetBundleManager : SingletonPattern<AssetBundleManager> { protected string m_ABConfigABName = "assetbundleconfig"; protected string ABLoadPath { get { return Application.streamingAssetsPath + "/"; } } public bool LoadAssetBundleConfig() { if(!ResourceManager.Instance.m_LoadFromAssetBundle) return false; m_ResourceItemDic.Clear(); string configPath = ABLoadPath + m_ABConfigABName; AssetBundle configAB = AssetBundle.LoadFromFile(configPath); TextAsset textAsset = configAB.LoadAsset<TextAsset>(m_ABConfigABName);
} private AssetBundle LoadAssetBundle(string abName) { if(!m_AssetBundleItemDic.TryGetValue(abCrc, out abItem)) { AssetBundle assetBundle = null; string fullPath = ABLoadPath + abName; } }
|
AssetBundle.LoadAsset
这个API不区分大小写
如果需要热更,不能使用Application.streamingAssetsPath
作为文件路径。安卓和WebGL不支持此路径。
UIManager
我们写一个方法,来设定UIPrefab文件夹的位置.
修改UIManger
:
1 2 3 4 5 6 7 8 9 10
| private string m_UIPrefabPath = "Assets/GameData/Prefabs/UGUI/Panel/";
public void SetUIPrefabPath(string path) { m_UIPrefabPath = path; }
|
GameStart
我们修改一下GameStart
脚本,去除之前测试的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| using UnityEngine; using UnityEngine.EventSystems;
public class GameStart : MonoSingletonPattern<GameStart> { private GameObject m_GameObject; public Transform recyclePoolTrans, sceneTrans; public RectTransform uiRoot, windowRoot; public Camera uiCamera; public EventSystem eventSystem; protected override void Awake() { base.Awake(); DontDestroyOnLoad(gameObject); AssetBundleManager.Instance.LoadAssetBundleConfig(); ResourceManager.Instance.Init(this); ObjectPoolManager.Instance.Init(recyclePoolTrans,sceneTrans); } private void Start() { LoadConfig();
UIManager.Instance.Init(uiRoot, windowRoot,uiCamera,eventSystem); RegisterUI(); GameSceneManager.Instance.Init(this);
} void RegisterUI() { } void LoadConfig() { } private void Update() { UIManager.Instance.OnUpdate(); } private void OnApplicationQuit() { #if UNITY_EDITOR ResourceManager.Instance.ClearCache(); Resources.UnloadUnusedAssets(); #endif } }
|
将GameData——Prefabs内的GameStart这个Prefab移到ResFrame文件夹内。
将GameStart
脚本也放在ResFrame文件夹内。
插件
在ResFrame文件夹内新建“Plugins——Editor文件夹”,并将之前的EPPlus.dll文件放在里面。
文件夹修改
将ResFrame文件夹内的BaseFramework、ConfigFramework、ResourceFramework、UIFramework文件夹的“Framework”改为“Frm”,因为IOS系统有冲突。
在ResFrame文件夹内新建SceneMgr文件夹,将Scripts——Manager——GameSceneManager
脚本移进来。
在ResFrame文件夹内新建Frames文件夹,将同级内的所有文件和文件夹全都移到Frames文件夹里。
将ResFrame.Editor文件夹下的Editor文件夹转移到ResFrame文件夹下
修改代码
修改BundleEditor
的ABConfig引用
1 2 3 4 5
| public class BundleEditor { private static string ABCONFIGPATH = "Assets/ResFrame/Editor/Resource/ABConfig.asset";
}
|
修改ResFrameConfig
的ResFramePath
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| using UnityEngine; using UnityEditor; [CreateAssetMenu(fileName ="ResFrameConfig",menuName ="CreateResFrameConfig",order = 2)] public class ResFrameConfig : ScriptableObject { } public class ResConfig { private const string ResFramePath = "Assets/ResFrame.Editor/Editor/ResFrameConfig.asset"; public static ResFrameConfig GetResFrameConfig() { ResFrameConfig resConfig = AssetDatabase.LoadAssetAtPath<ResFrameConfig>(ResFramePath); return resConfig; } }
|
导出Package
选中ResFrame文件夹并导出为package(取消所有依赖)。
在使用这个package时,需要新建GameData文件夹,GameData——Data文件夹,在Data文件夹内新建ABData、Binary、Xml文件夹。