瀏覽代碼

关卡编辑器

SZAND\msx_2 11 月之前
父節點
當前提交
a0d76d720e

+ 8 - 1
ActionTowerDefense/Assets/Gen/SingleCreateBuildingConfig.cs

@@ -18,6 +18,7 @@ public sealed partial class SingleCreateBuildingConfig :  Bright.Config.BeanBase
 {
     public SingleCreateBuildingConfig(JSONNode _json) 
     {
+        { if(!_json["LevelID"].IsNumber) { throw new SerializationException(); }  LevelID = _json["LevelID"]; }
         { if(!_json["ID"].IsNumber) { throw new SerializationException(); }  ID = _json["ID"]; }
         { if(!_json["BuildingID"].IsNumber) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
         { if(!_json["PositionType"].IsNumber) { throw new SerializationException(); }  PositionType = _json["PositionType"]; }
@@ -35,8 +36,9 @@ public sealed partial class SingleCreateBuildingConfig :  Bright.Config.BeanBase
         PostInit();
     }
 
-    public SingleCreateBuildingConfig(int ID, int BuildingID, int PositionType, int Type, float Time, float RefreshBuildingHP, float DelayTime, int RefreshBuildingID, System.Collections.Generic.List<float> Position, System.Collections.Generic.List<float> Position1, System.Collections.Generic.List<float> Scale, float AttackRatio, float HPRatio, float DisappearTime ) 
+    public SingleCreateBuildingConfig(int LevelID, int ID, int BuildingID, int PositionType, int Type, float Time, float RefreshBuildingHP, float DelayTime, int RefreshBuildingID, System.Collections.Generic.List<float> Position, System.Collections.Generic.List<float> Position1, System.Collections.Generic.List<float> Scale, float AttackRatio, float HPRatio, float DisappearTime ) 
     {
+        this.LevelID = LevelID;
         this.ID = ID;
         this.BuildingID = BuildingID;
         this.PositionType = PositionType;
@@ -59,6 +61,10 @@ public sealed partial class SingleCreateBuildingConfig :  Bright.Config.BeanBase
         return new SingleCreateBuildingConfig(_json);
     }
 
+    /// <summary>
+    /// 关卡ID
+    /// </summary>
+    public int LevelID { get; private set; }
     /// <summary>
     /// 刷新批次
     /// </summary>
@@ -131,6 +137,7 @@ public sealed partial class SingleCreateBuildingConfig :  Bright.Config.BeanBase
     public override string ToString()
     {
         return "{ "
+        + "LevelID:" + LevelID + ","
         + "ID:" + ID + ","
         + "BuildingID:" + BuildingID + ","
         + "PositionType:" + PositionType + ","

+ 8 - 1
ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs

@@ -18,6 +18,7 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
 {
     public SingleCreateEnemyConfig(JSONNode _json) 
     {
+        { if(!_json["LevelID"].IsNumber) { throw new SerializationException(); }  LevelID = _json["LevelID"]; }
         { if(!_json["ID"].IsNumber) { throw new SerializationException(); }  ID = _json["ID"]; }
         { if(!_json["EnemyID"].IsNumber) { throw new SerializationException(); }  EnemyID = _json["EnemyID"]; }
         { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
@@ -35,8 +36,9 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
         PostInit();
     }
 
-    public SingleCreateEnemyConfig(int ID, int EnemyID, int Count, int Type, float Time, float BuildingHP, float DelayTime, float TimeInterval, System.Collections.Generic.List<float> Position, int BuildingID, float YRandomRange, float ZRandomRange, float AttackRatio, float HPRatio ) 
+    public SingleCreateEnemyConfig(int LevelID, int ID, int EnemyID, int Count, int Type, float Time, float BuildingHP, float DelayTime, float TimeInterval, System.Collections.Generic.List<float> Position, int BuildingID, float YRandomRange, float ZRandomRange, float AttackRatio, float HPRatio ) 
     {
+        this.LevelID = LevelID;
         this.ID = ID;
         this.EnemyID = EnemyID;
         this.Count = Count;
@@ -59,6 +61,10 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
         return new SingleCreateEnemyConfig(_json);
     }
 
+    /// <summary>
+    /// 关卡ID
+    /// </summary>
+    public int LevelID { get; private set; }
     /// <summary>
     /// 出怪批次
     /// </summary>
@@ -131,6 +137,7 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
     public override string ToString()
     {
         return "{ "
+        + "LevelID:" + LevelID + ","
         + "ID:" + ID + ","
         + "EnemyID:" + EnemyID + ","
         + "Count:" + Count + ","

+ 13 - 6
ActionTowerDefense/Assets/Gen/SingleEnemyConfig.cs

@@ -23,18 +23,20 @@ public sealed partial class SingleEnemyConfig :  Bright.Config.BeanBase
         { if(!_json["HP"].IsNumber) { throw new SerializationException(); }  HP = _json["HP"]; }
         { var __json0 = _json["Attack1"]; if(!__json0.IsArray) { throw new SerializationException(); } Attack1 = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Attack1.Add(__v0); }   }
         { var __json0 = _json["Attack2"]; if(!__json0.IsArray) { throw new SerializationException(); } Attack2 = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Attack2.Add(__v0); }   }
-        { if(!_json["MoveSpeed"].IsNumber) { throw new SerializationException(); }  MoveSpeed = _json["MoveSpeed"]; }
+        { if(!_json["MinMoveSpeed"].IsNumber) { throw new SerializationException(); }  MinMoveSpeed = _json["MinMoveSpeed"]; }
+        { if(!_json["MaxMoveSpeed"].IsNumber) { throw new SerializationException(); }  MaxMoveSpeed = _json["MaxMoveSpeed"]; }
         PostInit();
     }
 
-    public SingleEnemyConfig(int ID, string EnemyPrefab, int HP, System.Collections.Generic.List<int> Attack1, System.Collections.Generic.List<int> Attack2, float MoveSpeed ) 
+    public SingleEnemyConfig(int ID, string EnemyPrefab, int HP, System.Collections.Generic.List<int> Attack1, System.Collections.Generic.List<int> Attack2, float MinMoveSpeed, float MaxMoveSpeed ) 
     {
         this.ID = ID;
         this.EnemyPrefab = EnemyPrefab;
         this.HP = HP;
         this.Attack1 = Attack1;
         this.Attack2 = Attack2;
-        this.MoveSpeed = MoveSpeed;
+        this.MinMoveSpeed = MinMoveSpeed;
+        this.MaxMoveSpeed = MaxMoveSpeed;
         PostInit();
     }
 
@@ -64,9 +66,13 @@ public sealed partial class SingleEnemyConfig :  Bright.Config.BeanBase
     /// </summary>
     public System.Collections.Generic.List<int> Attack2 { get; private set; }
     /// <summary>
-    /// 移动速度
+    /// 最小移动速度
     /// </summary>
-    public float MoveSpeed { get; private set; }
+    public float MinMoveSpeed { get; private set; }
+    /// <summary>
+    /// 最大移动速度
+    /// </summary>
+    public float MaxMoveSpeed { get; private set; }
 
     public const int __ID__ = 491839330;
     public override int GetTypeId() => __ID__;
@@ -88,7 +94,8 @@ public sealed partial class SingleEnemyConfig :  Bright.Config.BeanBase
         + "HP:" + HP + ","
         + "Attack1:" + Bright.Common.StringUtil.CollectionToString(Attack1) + ","
         + "Attack2:" + Bright.Common.StringUtil.CollectionToString(Attack2) + ","
-        + "MoveSpeed:" + MoveSpeed + ","
+        + "MinMoveSpeed:" + MinMoveSpeed + ","
+        + "MaxMoveSpeed:" + MaxMoveSpeed + ","
         + "}";
     }
     

+ 10 - 10
ActionTowerDefense/Assets/Gen/Tables.cs

@@ -14,37 +14,37 @@ namespace cfg
    
 public sealed partial class Tables
 {
-    public CfgCreateEnemy CfgCreateEnemy {get; }
     public CfgEnemy CfgEnemy {get; }
-    public CfgCreateBuilding CfgCreateBuilding {get; }
     public CfgBuilding CfgBuilding {get; }
+    public CfgCreateEnemy CfgCreateEnemy {get; }
+    public CfgCreateBuilding CfgCreateBuilding {get; }
 
     public Tables(System.Func<string, JSONNode> loader)
     {
         var tables = new System.Collections.Generic.Dictionary<string, object>();
-        CfgCreateEnemy = new CfgCreateEnemy(loader("cfgcreateenemy")); 
-        tables.Add("CfgCreateEnemy", CfgCreateEnemy);
         CfgEnemy = new CfgEnemy(loader("cfgenemy")); 
         tables.Add("CfgEnemy", CfgEnemy);
-        CfgCreateBuilding = new CfgCreateBuilding(loader("cfgcreatebuilding")); 
-        tables.Add("CfgCreateBuilding", CfgCreateBuilding);
         CfgBuilding = new CfgBuilding(loader("cfgbuilding")); 
         tables.Add("CfgBuilding", CfgBuilding);
+        CfgCreateEnemy = new CfgCreateEnemy(loader("cfgcreateenemy")); 
+        tables.Add("CfgCreateEnemy", CfgCreateEnemy);
+        CfgCreateBuilding = new CfgCreateBuilding(loader("cfgcreatebuilding")); 
+        tables.Add("CfgCreateBuilding", CfgCreateBuilding);
         PostInit();
 
-        CfgCreateEnemy.Resolve(tables); 
         CfgEnemy.Resolve(tables); 
-        CfgCreateBuilding.Resolve(tables); 
         CfgBuilding.Resolve(tables); 
+        CfgCreateEnemy.Resolve(tables); 
+        CfgCreateBuilding.Resolve(tables); 
         PostResolve();
     }
 
     public void TranslateText(System.Func<string, string, string> translator)
     {
-        CfgCreateEnemy.TranslateText(translator); 
         CfgEnemy.TranslateText(translator); 
-        CfgCreateBuilding.TranslateText(translator); 
         CfgBuilding.TranslateText(translator); 
+        CfgCreateEnemy.TranslateText(translator); 
+        CfgCreateBuilding.TranslateText(translator); 
     }
     
     partial void PostInit();

+ 158 - 0
ActionTowerDefense/Assets/Scenes/SampleScene.unity

@@ -11285,6 +11285,141 @@ RectTransform:
   m_AnchoredPosition: {x: -104, y: 16}
   m_SizeDelta: {x: 128, y: 128}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &741372827
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 741372828}
+  - component: {fileID: 741372830}
+  - component: {fileID: 741372829}
+  m_Layer: 5
+  m_Name: LevelName
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &741372828
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 741372827}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 3490440114689228974}
+  m_RootOrder: 8
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: -688, y: -504}
+  m_SizeDelta: {x: 485.776, y: 50}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &741372829
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 741372827}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: CurLevelName
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 2e498d1c8094910479dc3e1b768306a4, type: 2}
+  m_sharedMaterial: {fileID: 2180264, guid: 2e498d1c8094910479dc3e1b768306a4, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 36
+  m_fontSizeBase: 36
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 1
+  m_HorizontalAlignment: 1
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &741372830
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 741372827}
+  m_CullTransparentMesh: 1
 --- !u!1 &798347265
 GameObject:
   m_ObjectHideFlags: 0
@@ -18498,6 +18633,7 @@ GameObject:
   - component: {fileID: 1714821086}
   - component: {fileID: 1714821085}
   - component: {fileID: 1714821087}
+  - component: {fileID: 1714821088}
   m_Layer: 0
   m_Name: GameManager
   m_TagString: Untagged
@@ -18551,6 +18687,27 @@ MonoBehaviour:
   createBuildingTime: []
   portalsCreateTime: 10
   portalUIParent: {fileID: 1512487595}
+--- !u!114 &1714821088
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1714821084}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cc3bac8dfa08dec4eb5eb9ed66ff6369, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  curLevel: {fileID: 741372829}
+  curLevelID: 1
+  levelConfig:
+  - levelName: Level_Normal_A_000_000
+    enemyExcelID: 1
+    buildingExcelID: 1
+  - levelName: Level_Normal_A_001_000
+    enemyExcelID: 2
+    buildingExcelID: 2
 --- !u!1 &1729202001
 GameObject:
   m_ObjectHideFlags: 0
@@ -30612,6 +30769,7 @@ RectTransform:
   - {fileID: 1471408788}
   - {fileID: 592218521}
   - {fileID: 1512487595}
+  - {fileID: 741372828}
   m_Father: {fileID: 0}
   m_RootOrder: 9
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

+ 4 - 0
ActionTowerDefense/Assets/Scripts/Demonic.cs

@@ -614,6 +614,10 @@ public class Demonic : MoveCharacter
                     {
                         ChangeState(CharacterState.Idle);
                     }
+                    else
+                    {
+                        isReturnSoulTower = true;
+                    }
                 }
                 else
                 {

+ 80 - 74
ActionTowerDefense/Assets/Scripts/EnemyCreater.cs

@@ -9,7 +9,7 @@ using System.Linq;
 public class EnemyCreater : MonoBehaviour
 {
     public static EnemyCreater instance;
-    public List<SingleCreateEnemyConfig> cfgCreateEnemy;
+    [SerializeField]public List<SingleCreateEnemyConfig> cfgCreateEnemy;
     public List<SingleCreateBuildingConfig> cfgCreateBuilding;
     public List<bool> createdEnemy;
     public List<float> createEnemyTime;
@@ -17,6 +17,7 @@ public class EnemyCreater : MonoBehaviour
     public List<float> createBuildingTime;
     public Dictionary<int, List<Enemy>> enemyDic;
     public Dictionary<int, GameObject> buildingDic;
+    private LevelSelect.Level curLevel;
 
     [Header("传送门")]
     public float portalsCreateTime = 10;           //传送门提前出现时间
@@ -39,6 +40,7 @@ public class EnemyCreater : MonoBehaviour
 
     private void Start()
     {
+        curLevel = GetComponent<LevelSelect>().levelConfig[GetComponent<LevelSelect>().curLevelID];
         cfgCreateEnemy = GameManager.instance.allCfgData.CfgCreateEnemy.DataList;
         cfgCreateBuilding = GameManager.instance.allCfgData.CfgCreateBuilding.DataList;
         createdEnemy = new List<bool>();
@@ -59,47 +61,50 @@ public class EnemyCreater : MonoBehaviour
     {
         for (int i = 0; i < cfgCreateEnemy.Count; i++)
         {
-            if(createEnemyTime[i] != 0)
+            if (cfgCreateEnemy[i].LevelID == curLevel.enemyExcelID)
             {
-                if (createEnemyTime[i] + cfgCreateEnemy[i].DelayTime <= gameTime && !createdEnemy[i])
+                if (createEnemyTime[i] != 0)
                 {
-                    createdEnemy[i] = true;
-                    StartCreateEnemy(i);
-                }
-            }
-            else
-            {
-                GameObject result = null;
-                buildingDic.TryGetValue(cfgCreateEnemy[i].BuildingID, out result);
-                if (result != null)
-                {
-                    //根据防御塔血量出怪
-                    EnemyTower enemyTower = result.GetComponent<EnemyTower>();
-                    if (enemyTower!= null && !createdEnemy[i] && enemyTower.hp * 100 <= enemyTower.totalHp * cfgCreateEnemy[i].BuildingHP)
+                    if (createEnemyTime[i] + cfgCreateEnemy[i].DelayTime <= gameTime && !createdEnemy[i])
                     {
-                        if (cfgCreateEnemy[i].DelayTime ==0)
-                        {
-                            createdEnemy[i] = true;
-                            StartCreateEnemy(i);
-                        }
-                        else
-                        {
-                            createEnemyTime[i] = gameTime;
-                        }
+                        createdEnemy[i] = true;
+                        StartCreateEnemy(i);
                     }
-                    //根据传送门血量出怪
-                    CoreCharacter coreCharacter = result.GetComponentInChildren<CoreCharacter>();
-                    PortalsCreater portalsCreater = result.GetComponent<PortalsCreater>();
-                    if(coreCharacter != null && !createdEnemy[i] && portalsCreater.createTimeCountDown<0 && coreCharacter.hp * 100 <= coreCharacter.totalHp * cfgCreateEnemy[i].BuildingHP)
+                }
+                else
+                {
+                    GameObject result = null;
+                    buildingDic.TryGetValue(cfgCreateEnemy[i].BuildingID, out result);
+                    if (result != null)
                     {
-                        if (cfgCreateEnemy[i].DelayTime == 0)
+                        //根据防御塔血量出怪
+                        EnemyTower enemyTower = result.GetComponent<EnemyTower>();
+                        if (enemyTower != null && !createdEnemy[i] && enemyTower.hp * 100 <= enemyTower.totalHp * cfgCreateEnemy[i].BuildingHP)
                         {
-                            createdEnemy[i] = true;
-                            StartCreateEnemy(i);
+                            if (cfgCreateEnemy[i].DelayTime == 0)
+                            {
+                                createdEnemy[i] = true;
+                                StartCreateEnemy(i);
+                            }
+                            else
+                            {
+                                createEnemyTime[i] = gameTime;
+                            }
                         }
-                        else
+                        //根据传送门血量出怪
+                        CoreCharacter coreCharacter = result.GetComponentInChildren<CoreCharacter>();
+                        PortalsCreater portalsCreater = result.GetComponent<PortalsCreater>();
+                        if (coreCharacter != null && !createdEnemy[i] && portalsCreater.createTimeCountDown < 0 && coreCharacter.hp * 100 <= coreCharacter.totalHp * cfgCreateEnemy[i].BuildingHP)
                         {
-                            createEnemyTime[i] = gameTime;
+                            if (cfgCreateEnemy[i].DelayTime == 0)
+                            {
+                                createdEnemy[i] = true;
+                                StartCreateEnemy(i);
+                            }
+                            else
+                            {
+                                createEnemyTime[i] = gameTime;
+                            }
                         }
                     }
                 }
@@ -107,63 +112,64 @@ public class EnemyCreater : MonoBehaviour
         }
         for (int i = 0; i < cfgCreateBuilding.Count; i++)
         {
-            if(createBuildingTime[i] != 0)
+            if (cfgCreateBuilding[i].LevelID == curLevel.buildingExcelID)
             {
-                if (!createdBuilding[i]
-                && (cfgCreateBuilding[i].Type == 0 && createBuildingTime[i] + cfgCreateBuilding[i].DelayTime - portalsCreateTime <= gameTime
-                || cfgCreateBuilding[i].Type == 1 && createBuildingTime[i] + cfgCreateBuilding[i].DelayTime <= gameTime))
+                if (createBuildingTime[i] != 0)
                 {
-                    createdBuilding[i] = true;
-                    if (gameTime < portalsCreateTime)
+                    if (!createdBuilding[i]
+                    && (cfgCreateBuilding[i].Type == 0 && createBuildingTime[i] + cfgCreateBuilding[i].DelayTime - portalsCreateTime <= gameTime
+                    || cfgCreateBuilding[i].Type == 1 && createBuildingTime[i] + cfgCreateBuilding[i].DelayTime <= gameTime))
                     {
-                        StartCreateBuilding(i, createBuildingTime[i] - gameTime );
-                    }
-                    else
-                    {
-                        StartCreateBuilding(i, portalsCreateTime);
-                    }
-
-                }
-            }
-            else
-            {
-                GameObject result = null;
-                buildingDic.TryGetValue(cfgCreateBuilding[i].RefreshBuildingID, out result);
-                if (result != null)
-                {
-                    //根据防御塔血量出怪
-                    EnemyTower enemyTower = result.GetComponent<EnemyTower>();
-                    if (enemyTower != null && !createdBuilding[i] && enemyTower.hp * 100 <= enemyTower.totalHp * cfgCreateBuilding[i].RefreshBuildingHP)
-                    {
-                        if (cfgCreateBuilding[i].DelayTime == 0)
+                        createdBuilding[i] = true;
+                        if (gameTime < portalsCreateTime)
                         {
-                            createdBuilding[i] = true;
-                            StartCreateBuilding(i,portalsCreateTime);
+                            StartCreateBuilding(i, createBuildingTime[i] - gameTime);
                         }
                         else
                         {
-                            createBuildingTime[i] = gameTime;
+                            StartCreateBuilding(i, portalsCreateTime);
                         }
+
                     }
-                    //根据传送门血量出怪
-                    CoreCharacter coreCharacter = result.GetComponentInChildren<CoreCharacter>();
-                    PortalsCreater portalsCreater = result.GetComponent<PortalsCreater>();
-                    if (coreCharacter != null && !createdBuilding[i] && portalsCreater.createTimeCountDown < 0 && coreCharacter.hp * 100 <= coreCharacter.totalHp * cfgCreateBuilding[i].RefreshBuildingHP)
+                }
+                else
+                {
+                    GameObject result = null;
+                    buildingDic.TryGetValue(cfgCreateBuilding[i].RefreshBuildingID, out result);
+                    if (result != null)
                     {
-                        if (cfgCreateBuilding[i].DelayTime == 0)
+                        //根据防御塔血量出怪
+                        EnemyTower enemyTower = result.GetComponent<EnemyTower>();
+                        if (enemyTower != null && !createdBuilding[i] && enemyTower.hp * 100 <= enemyTower.totalHp * cfgCreateBuilding[i].RefreshBuildingHP)
                         {
-                            createdBuilding[i] = true;
-                            StartCreateBuilding(i, portalsCreateTime);
+                            if (cfgCreateBuilding[i].DelayTime == 0)
+                            {
+                                createdBuilding[i] = true;
+                                StartCreateBuilding(i, portalsCreateTime);
+                            }
+                            else
+                            {
+                                createBuildingTime[i] = gameTime;
+                            }
                         }
-                        else
+                        //根据传送门血量出怪
+                        CoreCharacter coreCharacter = result.GetComponentInChildren<CoreCharacter>();
+                        PortalsCreater portalsCreater = result.GetComponent<PortalsCreater>();
+                        if (coreCharacter != null && !createdBuilding[i] && portalsCreater.createTimeCountDown < 0 && coreCharacter.hp * 100 <= coreCharacter.totalHp * cfgCreateBuilding[i].RefreshBuildingHP)
                         {
-                            createBuildingTime[i] = gameTime;
+                            if (cfgCreateBuilding[i].DelayTime == 0)
+                            {
+                                createdBuilding[i] = true;
+                                StartCreateBuilding(i, portalsCreateTime);
+                            }
+                            else
+                            {
+                                createBuildingTime[i] = gameTime;
+                            }
                         }
                     }
                 }
-
             }
-
         }
     }
 

+ 8 - 0
ActionTowerDefense/Assets/Scripts/Levels.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c5273d5618d943247964c2a4ffc563bb
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 18 - 0
ActionTowerDefense/Assets/Scripts/Levels/InspectorLevel.cs

@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class InspectorLevel : MonoBehaviour
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Levels/InspectorLevel.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8a5594b1af12ea2488c8134043e534b8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 33 - 0
ActionTowerDefense/Assets/Scripts/Levels/LevelSelect.cs

@@ -0,0 +1,33 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UnityEngine.UI;
+using TMPro;
+
+public class LevelSelect : MonoBehaviour
+{
+    public TextMeshProUGUI curLevel;
+
+    [System.Serializable]
+    public struct Level
+    {
+        [Header("关卡名称")]
+        public string levelName;
+        [Header("出怪表sheet几")]
+        public int enemyExcelID;
+        [Header("建筑生成表sheet几")]
+        public int buildingExcelID;
+    }
+
+    [Header("当前关卡序号(从0开始)")]
+    public int curLevelID;
+
+    [Header("所有关卡配置")]
+    public Level[] levelConfig;
+
+    private void Start()
+    {
+        curLevel.text = levelConfig[curLevelID].levelName;
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Levels/LevelSelect.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cc3bac8dfa08dec4eb5eb9ed66ff6369
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

文件差異過大導致無法顯示
+ 356 - 18
ActionTowerDefense/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset


+ 25 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreatebuilding.json

@@ -1,5 +1,6 @@
 [
   {
+    "LevelID": 1,
     "ID": 4,
     "BuildingID": 4,
     "PositionType": 0,
@@ -21,5 +22,29 @@
     "AttackRatio": 1,
     "HPRatio": 1,
     "DisappearTime": 5
+  },
+  {
+    "LevelID": 2,
+    "ID": 5,
+    "BuildingID": 4,
+    "PositionType": 1,
+    "Type": 1,
+    "Time": 0,
+    "RefreshBuildingHP": 90,
+    "DelayTime": 0,
+    "RefreshBuildingID": 4,
+    "Position": [
+      30,
+      0,
+      0
+    ],
+    "Position1": [],
+    "Scale": [
+      -1,
+      1
+    ],
+    "AttackRatio": 1.5,
+    "HPRatio": 1.5,
+    "DisappearTime": 0
   }
 ]

+ 234 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json

@@ -1,5 +1,6 @@
 [
   {
+    "LevelID": 1,
     "ID": 1,
     "EnemyID": 1,
     "Count": 30,
@@ -20,6 +21,7 @@
     "HPRatio": 1
   },
   {
+    "LevelID": 1,
     "ID": 2,
     "EnemyID": 2,
     "Count": 30,
@@ -40,6 +42,7 @@
     "HPRatio": 1
   },
   {
+    "LevelID": 1,
     "ID": 3,
     "EnemyID": 3,
     "Count": 15,
@@ -60,6 +63,7 @@
     "HPRatio": 1.1
   },
   {
+    "LevelID": 1,
     "ID": 4,
     "EnemyID": 4,
     "Count": 1,
@@ -80,6 +84,7 @@
     "HPRatio": 1.2
   },
   {
+    "LevelID": 1,
     "ID": 5,
     "EnemyID": 5,
     "Count": 1,
@@ -100,6 +105,7 @@
     "HPRatio": 1.3
   },
   {
+    "LevelID": 1,
     "ID": 6,
     "EnemyID": 6,
     "Count": 1,
@@ -120,6 +126,7 @@
     "HPRatio": 1.4
   },
   {
+    "LevelID": 1,
     "ID": 7,
     "EnemyID": 7,
     "Count": 1,
@@ -140,6 +147,7 @@
     "HPRatio": 1.5
   },
   {
+    "LevelID": 1,
     "ID": 8,
     "EnemyID": 1,
     "Count": 10,
@@ -156,6 +164,7 @@
     "HPRatio": 1.6
   },
   {
+    "LevelID": 1,
     "ID": 9,
     "EnemyID": 2,
     "Count": 10,
@@ -172,6 +181,7 @@
     "HPRatio": 1.7
   },
   {
+    "LevelID": 1,
     "ID": 10,
     "EnemyID": 3,
     "Count": 4,
@@ -188,6 +198,7 @@
     "HPRatio": 1.8
   },
   {
+    "LevelID": 1,
     "ID": 11,
     "EnemyID": 4,
     "Count": 2,
@@ -204,6 +215,7 @@
     "HPRatio": 1.9
   },
   {
+    "LevelID": 1,
     "ID": 12,
     "EnemyID": 1,
     "Count": 15,
@@ -220,6 +232,7 @@
     "HPRatio": 2
   },
   {
+    "LevelID": 1,
     "ID": 13,
     "EnemyID": 2,
     "Count": 15,
@@ -236,6 +249,7 @@
     "HPRatio": 2.1
   },
   {
+    "LevelID": 1,
     "ID": 14,
     "EnemyID": 3,
     "Count": 8,
@@ -252,6 +266,7 @@
     "HPRatio": 2.2
   },
   {
+    "LevelID": 1,
     "ID": 15,
     "EnemyID": 4,
     "Count": 2,
@@ -268,6 +283,7 @@
     "HPRatio": 2.3
   },
   {
+    "LevelID": 1,
     "ID": 16,
     "EnemyID": 6,
     "Count": 2,
@@ -284,6 +300,7 @@
     "HPRatio": 2.4
   },
   {
+    "LevelID": 1,
     "ID": 17,
     "EnemyID": 1,
     "Count": 20,
@@ -300,6 +317,7 @@
     "HPRatio": 2.5
   },
   {
+    "LevelID": 1,
     "ID": 18,
     "EnemyID": 2,
     "Count": 20,
@@ -316,6 +334,7 @@
     "HPRatio": 2.6
   },
   {
+    "LevelID": 1,
     "ID": 19,
     "EnemyID": 3,
     "Count": 10,
@@ -332,6 +351,7 @@
     "HPRatio": 2.7
   },
   {
+    "LevelID": 1,
     "ID": 20,
     "EnemyID": 4,
     "Count": 3,
@@ -348,6 +368,7 @@
     "HPRatio": 2.8
   },
   {
+    "LevelID": 1,
     "ID": 21,
     "EnemyID": 5,
     "Count": 3,
@@ -364,6 +385,7 @@
     "HPRatio": 2.9
   },
   {
+    "LevelID": 1,
     "ID": 22,
     "EnemyID": 6,
     "Count": 2,
@@ -380,6 +402,7 @@
     "HPRatio": 3
   },
   {
+    "LevelID": 1,
     "ID": 23,
     "EnemyID": 7,
     "Count": 2,
@@ -396,6 +419,7 @@
     "HPRatio": 3.1
   },
   {
+    "LevelID": 1,
     "ID": 24,
     "EnemyID": 1,
     "Count": 20,
@@ -412,6 +436,7 @@
     "HPRatio": 1
   },
   {
+    "LevelID": 1,
     "ID": 25,
     "EnemyID": 2,
     "Count": 20,
@@ -428,6 +453,215 @@
     "HPRatio": 1
   },
   {
+    "LevelID": 1,
+    "ID": 26,
+    "EnemyID": 3,
+    "Count": 5,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 30,
+    "DelayTime": 0,
+    "TimeInterval": 2.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 1,
+    "HPRatio": 1
+  },
+  {
+    "LevelID": 2,
+    "ID": 1,
+    "EnemyID": 7,
+    "Count": 30,
+    "Type": 0,
+    "Time": 5,
+    "BuildingHP": 0,
+    "DelayTime": 0,
+    "TimeInterval": 15,
+    "Position": [
+      0,
+      0,
+      0
+    ],
+    "BuildingID": 0,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 1,
+    "HPRatio": 1
+  },
+  {
+    "LevelID": 2,
+    "ID": 16,
+    "EnemyID": 6,
+    "Count": 2,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 50,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 5,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 3.8,
+    "HPRatio": 2.4
+  },
+  {
+    "LevelID": 2,
+    "ID": 17,
+    "EnemyID": 1,
+    "Count": 20,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 90,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 4,
+    "HPRatio": 2.5
+  },
+  {
+    "LevelID": 2,
+    "ID": 18,
+    "EnemyID": 2,
+    "Count": 20,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 70,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 4.2,
+    "HPRatio": 2.6
+  },
+  {
+    "LevelID": 2,
+    "ID": 19,
+    "EnemyID": 3,
+    "Count": 10,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 60,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 4.4,
+    "HPRatio": 2.7
+  },
+  {
+    "LevelID": 2,
+    "ID": 20,
+    "EnemyID": 4,
+    "Count": 3,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 90,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 4.6,
+    "HPRatio": 2.8
+  },
+  {
+    "LevelID": 2,
+    "ID": 21,
+    "EnemyID": 5,
+    "Count": 3,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 70,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 4.8,
+    "HPRatio": 2.9
+  },
+  {
+    "LevelID": 2,
+    "ID": 22,
+    "EnemyID": 6,
+    "Count": 2,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 60,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 5,
+    "HPRatio": 3
+  },
+  {
+    "LevelID": 2,
+    "ID": 23,
+    "EnemyID": 7,
+    "Count": 2,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 60,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 5.2,
+    "HPRatio": 3.1
+  },
+  {
+    "LevelID": 2,
+    "ID": 24,
+    "EnemyID": 1,
+    "Count": 20,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 30,
+    "DelayTime": 0,
+    "TimeInterval": 0.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 1,
+    "HPRatio": 1
+  },
+  {
+    "LevelID": 2,
+    "ID": 25,
+    "EnemyID": 2,
+    "Count": 20,
+    "Type": 1,
+    "Time": 0,
+    "BuildingHP": 30,
+    "DelayTime": 0,
+    "TimeInterval": 1.1,
+    "Position": [],
+    "BuildingID": 6,
+    "YRandomRange": 0,
+    "ZRandomRange": 0,
+    "AttackRatio": 1,
+    "HPRatio": 1
+  },
+  {
+    "LevelID": 2,
     "ID": 26,
     "EnemyID": 3,
     "Count": 5,

+ 16 - 8
ActionTowerDefense/GenerateDatas/json/cfgenemy.json

@@ -9,7 +9,8 @@
     "Attack2": [
       100
     ],
-    "MoveSpeed": 5
+    "MinMoveSpeed": 4,
+    "MaxMoveSpeed": 6
   },
   {
     "ID": 2,
@@ -21,7 +22,8 @@
     "Attack2": [
       40
     ],
-    "MoveSpeed": 5
+    "MinMoveSpeed": 4,
+    "MaxMoveSpeed": 6
   },
   {
     "ID": 3,
@@ -33,7 +35,8 @@
     "Attack2": [
       110
     ],
-    "MoveSpeed": 2
+    "MinMoveSpeed": 1,
+    "MaxMoveSpeed": 3
   },
   {
     "ID": 4,
@@ -45,7 +48,8 @@
     "Attack2": [
       100
     ],
-    "MoveSpeed": 15
+    "MinMoveSpeed": 14,
+    "MaxMoveSpeed": 16
   },
   {
     "ID": 5,
@@ -57,7 +61,8 @@
     "Attack2": [
       110
     ],
-    "MoveSpeed": 5
+    "MinMoveSpeed": 4,
+    "MaxMoveSpeed": 6
   },
   {
     "ID": 6,
@@ -69,7 +74,8 @@
     "Attack2": [
       100
     ],
-    "MoveSpeed": 2
+    "MinMoveSpeed": 1,
+    "MaxMoveSpeed": 3
   },
   {
     "ID": 7,
@@ -81,7 +87,8 @@
     "Attack2": [
       0
     ],
-    "MoveSpeed": 5
+    "MinMoveSpeed": 4,
+    "MaxMoveSpeed": 6
   },
   {
     "ID": 1001,
@@ -93,6 +100,7 @@
     "Attack2": [
       0
     ],
-    "MoveSpeed": 3
+    "MinMoveSpeed": 2,
+    "MaxMoveSpeed": 4
   }
 ]

+ 20 - 20
ActionTowerDefense/Luban/.cache.meta

@@ -1,20 +1,20 @@
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgBuilding.cs,B45865E94F67A1B2B9A59ADA4527217,1859,1729935158821
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgCreateBuilding.cs,B422E4BEC7D11DA1B193B26A05AA05E,1425,1729935158819
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgCreateEnemy.cs,3A9B470F9A1FA351330EA275C82C399,1404,1720757251245
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgEnemy.cs,FDE1CE1B09C67F343EE84B2F88F27A6,1820,1720757251245
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleBuildingConfig.cs,E5CE78694DF91B719BA63E763E9F43B8,2416,1729935158819
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleCreateBuildingConfig.cs,A5CEF7AD82D873DCD2FA861988424AD7,6940,1730206038536
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs,ED718E759D953241C23099CA5F9FF321,6048,1729935158819
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleEnemyConfig.cs,F946CAF5CDD6631E3684465F8D20B27D,3662,1729935158819
-D:/ActionTowerDefense/ActionTowerDefense/Assets/Gen/Tables.cs,46193A1A6CB953DBC592AFB9672A44,1830,1729935158822
-D:/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgbuilding.json,C8A0B352B2E68CD577618E26D18FA6,439,1728805809964
-D:/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgcreatebuilding.json,BFB7876EA186D0AB2B53E9CE746E37E,374,1730207447036
-D:/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json,B6F78DC21EB387EA66F1E2EA47EB8C,8011,1730207481898
-D:/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgenemy.json,EF66E9D688D904D97A9405D129C5448,1457,1728805809990
-D:/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__beans__.xlsx,98987DA7288FEE34BCD08EA883D425E,9603,1719819418545
-D:/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__enums__.xlsx,647733322F7261DFA483C2DBE2D1F9A4,10293,1719819418545
-D:/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__tables__.xlsx,F4967F4C27B521B7755BA24B6C1271,9974,1726673560554
-D:/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx,6BC37D83316F27B7DF0922F21B04A75,12238,1730207472829
-D:/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/怪物表.xlsx,A6F557E7075AC634747F53D672D38C2,10005,1728127362602
-D:/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/建筑表.xlsx,5F82FF9D22F6BD8E585646E443C0BF50,9638,1728029767222
-D:/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/建筑生成表.xlsx,A1999659BF76EB8217F2C8A51A51077,11174,1730207443683
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgBuilding.cs,B45865E94F67A1B2B9A59ADA4527217,1859,1732401186765
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgCreateBuilding.cs,B422E4BEC7D11DA1B193B26A05AA05E,1425,1732408056797
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgCreateEnemy.cs,3A9B470F9A1FA351330EA275C82C399,1404,1732408056797
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/CfgEnemy.cs,FDE1CE1B09C67F343EE84B2F88F27A6,1820,1722479246520
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleBuildingConfig.cs,E5CE78694DF91B719BA63E763E9F43B8,2416,1732401186765
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleCreateBuildingConfig.cs,9CE247AA51AF8356B8578721B05BF2,7233,1732412518707
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs,2EE8602E294AF6710D4AD80A1972638,6341,1732412518707
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/SingleEnemyConfig.cs,6A5DBD5B6B8E4DAB8DC1FC60FFADCD,4047,1732401186765
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Assets/Gen/Tables.cs,5F987F220BADBDE6D81578D96CE994,1830,1732412539277
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgbuilding.json,C8A0B352B2E68CD577618E26D18FA6,439,1728763725269
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgcreatebuilding.json,62F63BE8FF66E8C28422281ED385578,788,1732412518707
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json,97C4AFFA19BA8B98B647B352DCCAB67,12349,1732414444946
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/GenerateDatas/json/cfgenemy.json,C8CBF92EA3A1CBC21AFA5DDDE735366E,1674,1732401186788
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__beans__.xlsx,98987DA7288FEE34BCD08EA883D425E,9603,1719819495252
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__enums__.xlsx,D95915E233EB1E4EB87BE0557A2BFDD,9879,1732405824089
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/__tables__.xlsx,46C8BE63422760DC6ECB5ABD30EA4B74,9923,1732414172010
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx,E2D9614F5C639589D15572F6CB5A651F,15727,1732414439441
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/怪物表.xlsx,A85A4EFD3C7C454C9AF9BB449967CC30,10055,1732401054272
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/建筑表.xlsx,5F82FF9D22F6BD8E585646E443C0BF50,9638,1726848251661
+C:/works_Szand/ActionTowerDefense/ActionTowerDefense/Luban/Config/Datas/建筑生成表.xlsx,18F21A1B10257E7A2A496986ADBFD59,13454,1732412496700

二進制
ActionTowerDefense/Luban/Config/Datas/__enums__.xlsx


二進制
ActionTowerDefense/Luban/Config/Datas/__tables__.xlsx


二進制
ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx


二進制
ActionTowerDefense/Luban/Config/Datas/建筑生成表.xlsx


部分文件因文件數量過多而無法顯示