You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			206 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			206 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using UnityEngine; | ||
|  | using System.Collections; | ||
|  | using System.Collections.Generic; | ||
|  | using UnityEditor; | ||
|  | using UnityEditor.Animations; | ||
|  | using System.IO; | ||
|  | using Game; | ||
|  | using Articy.Touhou; | ||
|  | 
 | ||
|  | public class LevelGenerate : MonoBehaviour | ||
|  | { | ||
|  |     static string LevelVoxPath = "/Resources/SceneAsset/Model_vox/"; | ||
|  |     static string LevelGroundPrefabPath = "/Resources/Prefab/LevelAssets/levelground/"; | ||
|  |     static string LevelPrefabPath = "/Resources/Prefab/Level/"; | ||
|  |     static string VoxTemplateName = "levelground0000.vox"; | ||
|  |     static string LevelGroundPrefabTemplateName = "levelground0000.prefab"; | ||
|  |     static string LevelPrefabTemplateName = "level0000.prefab"; | ||
|  | 
 | ||
|  |     [MenuItem("Tools/关卡资源/生成文件")] | ||
|  |     static void LevelGenerateAll() | ||
|  |     { | ||
|  |         var levelInfos = Util.GetLevelConfigDataAll(); | ||
|  |         foreach (var levelInfo in levelInfos) | ||
|  |         { | ||
|  |             Generate(levelInfo); | ||
|  |         } | ||
|  | 
 | ||
|  |         AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); | ||
|  |         AssetDatabase.SaveAssets(); | ||
|  |         Resources.UnloadUnusedAssets(); | ||
|  |         foreach (var levelInfo in levelInfos) | ||
|  |         { | ||
|  |             Adjust(levelInfo); | ||
|  |         } | ||
|  | 
 | ||
|  |         AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); | ||
|  |         AssetDatabase.SaveAssets(); | ||
|  |         Resources.UnloadUnusedAssets(); | ||
|  |         Debug.Log("LevelGenerateAll Done"); | ||
|  |     } | ||
|  | 
 | ||
|  |     static void Generate(Level level) | ||
|  |     { | ||
|  |         var levelInfo = level.GetFeatureLevel(); | ||
|  |         var levelAssetsName = levelInfo.Prefab; | ||
|  |         if (!levelAssetsName.StartsWith("level")) | ||
|  |         { | ||
|  |             Debug.LogError("关卡资源名字不正确:" + levelAssetsName); | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         var levelNumberStr = levelAssetsName.Substring(5); | ||
|  |         var levelVoxName = "levelground" + levelNumberStr + ".vox"; | ||
|  |         var levelGroundPrefabName = "levelground" + levelNumberStr + ".prefab"; | ||
|  |         var levelPrefabName = "level" + levelNumberStr + ".prefab"; | ||
|  |         //生成vox文件 | ||
|  |         var voxPath = Application.dataPath + LevelVoxPath + levelVoxName; | ||
|  |         if (!File.Exists(voxPath)) | ||
|  |         { | ||
|  |             var templateVoxPath = Application.dataPath + LevelVoxPath + VoxTemplateName; | ||
|  |             File.Copy(templateVoxPath, voxPath); | ||
|  |             Debug.Log("生成vox文件:" + voxPath); | ||
|  |         } | ||
|  | 
 | ||
|  |         //生成levelground文件 | ||
|  |         var levelGroundPrefabPath = Application.dataPath + LevelGroundPrefabPath + levelGroundPrefabName; | ||
|  |         if (!File.Exists(levelGroundPrefabPath)) | ||
|  |         { | ||
|  |             var templateLevelGroundPrefabPath = | ||
|  |                 Application.dataPath + LevelGroundPrefabPath + LevelGroundPrefabTemplateName; | ||
|  |             File.Copy(templateLevelGroundPrefabPath, levelGroundPrefabPath); | ||
|  |             Debug.Log("生成levelground文件:" + levelGroundPrefabPath); | ||
|  |         } | ||
|  | 
 | ||
|  |         //生成level文件 | ||
|  |         var levelPrefabPath = Application.dataPath + LevelPrefabPath + levelPrefabName; | ||
|  |         if (!File.Exists(levelPrefabPath)) | ||
|  |         { | ||
|  |             var templateLevelPrefabPath = Application.dataPath + LevelPrefabPath + LevelPrefabTemplateName; | ||
|  |             File.Copy(templateLevelPrefabPath, levelPrefabPath); | ||
|  |             Debug.Log("生成level文件:" + levelPrefabPath); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     static void Adjust(Level level) | ||
|  |     { | ||
|  |         var levelInfo = level.GetFeatureLevel(); | ||
|  |         var levelAssetsName = levelInfo.Prefab; | ||
|  |         if (!levelAssetsName.StartsWith("level")) | ||
|  |         { | ||
|  |             Debug.LogError("关卡资源名字不正确:" + levelAssetsName); | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         var levelNumberStr = levelAssetsName.Substring(5); | ||
|  |         var levelVoxName = "levelground" + levelNumberStr + ".vox"; | ||
|  |         var levelGroundPrefabName = "levelground" + levelNumberStr + ".prefab"; | ||
|  |         var levelPrefabName = "level" + levelNumberStr + ".prefab"; | ||
|  |         //检查vox文件 | ||
|  |         var voxPath = Application.dataPath + LevelVoxPath + levelVoxName; | ||
|  |         if (!File.Exists(voxPath)) | ||
|  |         { | ||
|  |             Debug.LogError("vox文件不存在:" + voxPath); | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         //检查levelground文件 | ||
|  |         var levelGroundPrefabPath = Application.dataPath + LevelGroundPrefabPath + levelGroundPrefabName; | ||
|  |         if (!File.Exists(levelGroundPrefabPath)) | ||
|  |         { | ||
|  |             Debug.LogError("levelground文件不存在:" + levelGroundPrefabPath); | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         //检查level文件 | ||
|  |         var levelPrefabPath = Application.dataPath + LevelPrefabPath + levelPrefabName; | ||
|  |         if (!File.Exists(levelPrefabPath)) | ||
|  |         { | ||
|  |             Debug.LogError("level文件不存在:" + levelPrefabPath); | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         // 调整 | ||
|  |         var levelP = AssetDatabase.LoadAssetAtPath<GameObject>("Assets" + LevelPrefabPath + levelPrefabName); | ||
|  |         if (levelP == null) | ||
|  |         { | ||
|  |             Debug.LogError("level文件不存在:" + levelPrefabPath); | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         var levelPrefab = GameObject.Instantiate(levelP); | ||
|  | 
 | ||
|  |         // 调整关卡大小 | ||
|  |         var groundBlock = levelPrefab.transform.Find("Obj/_GroundBlock"); | ||
|  |         groundBlock.localScale = new Vector3(levelInfo.LevelSizeX, 1, levelInfo.LevelSizeY); | ||
|  | 
 | ||
|  |         // 调整空气墙大小 | ||
|  |         var airWallView = levelPrefab.transform.Find("Obj/_AirWallView"); | ||
|  |         airWallView.localScale = new Vector3(levelInfo.LevelSizeX + 0.05f, 1, levelInfo.LevelSizeY + 0.05f); | ||
|  | 
 | ||
|  | 
 | ||
|  |         // 调整关卡地面引用 | ||
|  |         var groundView = levelPrefab.transform.Find("Obj/_GroundView"); | ||
|  |         foreach (Transform child in groundView) | ||
|  |         { | ||
|  |             GameObject.DestroyImmediate(child.gameObject); | ||
|  |         } | ||
|  | 
 | ||
|  |         var levelGroundPrefab = | ||
|  |             AssetDatabase.LoadAssetAtPath<GameObject>("Assets" + LevelGroundPrefabPath + levelGroundPrefabName); | ||
|  |         var levelGround = PrefabUtility.InstantiatePrefab(levelGroundPrefab, groundView); | ||
|  | 
 | ||
|  |         // 调整关卡连接 | ||
|  |         var levelConnect = levelPrefab.transform.Find("Entity/_DefaultDoor"); | ||
|  |         levelConnect.localScale = new Vector3(levelInfo.LevelSizeX, 1, levelInfo.LevelSizeY); | ||
|  |         var levelConnectRoot = levelPrefab.transform.Find("Entity/_DefaultDoor/Root"); | ||
|  |         foreach (Transform child in levelConnectRoot) | ||
|  |         { | ||
|  |             switch (child.name) | ||
|  |             { | ||
|  |                 case "LT": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_LT != null); | ||
|  |                     break; | ||
|  |                 case "LM": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_LM != null); | ||
|  |                     break; | ||
|  |                 case "LD": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_LD != null); | ||
|  |                     break; | ||
|  |                 case "RT": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_RT != null); | ||
|  |                     break; | ||
|  |                 case "RM": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_RM != null); | ||
|  |                     break; | ||
|  |                 case "RD": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_RD != null); | ||
|  |                     break; | ||
|  |                 case "TL": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_TL != null); | ||
|  |                     break; | ||
|  |                 case "TM": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_TM != null); | ||
|  |                     break; | ||
|  |                 case "TR": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_TR != null); | ||
|  |                     break; | ||
|  |                 case "DL": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_DL != null); | ||
|  |                     break; | ||
|  |                 case "DM": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_DM != null); | ||
|  |                     break; | ||
|  |                 case "DR": | ||
|  |                     child.gameObject.SetActive(levelInfo.LevelLink_DR != null); | ||
|  |                     break; | ||
|  |                 default: | ||
|  |                     Debug.LogError("门类型错误:" + child.name); | ||
|  |                     break; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         PrefabUtility.SaveAsPrefabAsset(levelPrefab, levelPrefabPath); | ||
|  |         GameObject.DestroyImmediate(levelPrefab); | ||
|  |     } | ||
|  | } |