Jelajahi Sumber

- 游龙球暂存

WGL 1 bulan lalu
induk
melakukan
5ae751fccb

+ 56 - 0
ActionTowerDefense/Assets/Resources/Prefab/Conduct/DragonController.prefab

@@ -0,0 +1,56 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &256012001268456902
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1639900831015566504}
+  - component: {fileID: 5620194202494750146}
+  m_Layer: 0
+  m_Name: DragonController
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1639900831015566504
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 256012001268456902}
+  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: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &5620194202494750146
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 256012001268456902}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8ca14e73a16649c449ccfaab936d7323, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  distance: 1
+  baseSortingOrder: 9000
+  num: 0
+  damage: 0
+  demonicId: 0
+  player: {fileID: 0}
+  demonics: []
+  targetPoss: []
+  playerOffset: {x: 0, y: 0, z: 0}
+  lerpValue: 5

+ 7 - 0
ActionTowerDefense/Assets/Resources/Prefab/Conduct/DragonController.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d682c4f893ea2364ba164892a71ceb8b
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 21 - 0
ActionTowerDefense/Assets/Resources/Prefab/GameManager.prefab

@@ -267,6 +267,27 @@ MonoBehaviour:
     - 2
     - 3
     - 4
+  wanderingDragonOrb:
+    attributeTag: 1
+    bUseFixedSacrifice: 1
+    sacrificeRatio:
+    - 100
+    - 60
+    - 50
+    - 50
+    cd:
+    - 20
+    - 15
+    - 10
+    - 5
+    sacrificeValue: 0a0000000a0000000a0000000a000000
+    power: 01000000020000000300000004000000
+    effectBonus:
+    - 1
+    - 2
+    - 3
+    - 4
+    obj: {fileID: 256012001268456902, guid: d682c4f893ea2364ba164892a71ceb8b, type: 3}
 --- !u!114 &1880576200062196086
 MonoBehaviour:
   m_ObjectHideFlags: 0

+ 19 - 0
ActionTowerDefense/Assets/Resources/Prefab/MySoldier/Demonic_Arrow.prefab

@@ -600,6 +600,7 @@ GameObject:
   m_Component:
   - component: {fileID: 3215317859961215224}
   - component: {fileID: 7144185533164728569}
+  - component: {fileID: 4793313414059827227}
   m_Layer: 7
   m_Name: BodyCollider
   m_TagString: Untagged
@@ -635,6 +636,19 @@ BoxCollider:
   serializedVersion: 2
   m_Size: {x: 0.81, y: 1.6836002, z: 2}
   m_Center: {x: 0, y: 0.83019984, z: 0}
+--- !u!114 &4793313414059827227
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2616922587087395095}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 09d9abdbf4c198446ba545e23d3f9c48, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  haveCollisionDamage: 0
 --- !u!1 &2623922659733331491
 GameObject:
   m_ObjectHideFlags: 0
@@ -1435,9 +1449,11 @@ MonoBehaviour:
   fireStacks: 0
   searchState: 0
   bigSoldier: {fileID: 8684670505913003432}
+  dragonTrigger: {fileID: 4793313414059827227}
   myName: "\u98DE\u5251"
   summonEndToDie: 0
   canSizeChange: 0
+  ignoresOnState: 0
   soldierType: 0
   player: {fileID: 0}
   playerID: 0
@@ -2087,7 +2103,10 @@ MonoBehaviour:
   giantDieNum: 0200000004000000080000000f000000
   boostNum: 0
   normalTotalHp: 0
+  origSize: 0
   normalSize: 0
   itnHP: 100
+  toSize: 0
+  nowSize: 0
   changeSizeSpeed: 0.2
   baseSortingOrder: 100

+ 19 - 0
ActionTowerDefense/Assets/Resources/Prefab/MySoldier/Demonic_Giant.prefab

@@ -496,6 +496,7 @@ GameObject:
   m_Component:
   - component: {fileID: 5669356131851076493}
   - component: {fileID: 133524724615536217}
+  - component: {fileID: 7855244179185678730}
   m_Layer: 7
   m_Name: BodyCollider
   m_TagString: Untagged
@@ -532,6 +533,19 @@ CapsuleCollider:
   m_Height: 2.47
   m_Direction: 0
   m_Center: {x: 0, y: 1.16, z: 0}
+--- !u!114 &7855244179185678730
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4543619153787591511}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 09d9abdbf4c198446ba545e23d3f9c48, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  haveCollisionDamage: 0
 --- !u!1 &5041915139224979942
 GameObject:
   m_ObjectHideFlags: 0
@@ -808,9 +822,11 @@ MonoBehaviour:
   fireStacks: 0
   searchState: 0
   bigSoldier: {fileID: 1496688819680216204}
+  dragonTrigger: {fileID: 7855244179185678730}
   myName: "\u76FE\u7532\u5175"
   summonEndToDie: 0
   canSizeChange: 0
+  ignoresOnState: 0
   soldierType: 1
   player: {fileID: 0}
   playerID: 0
@@ -1126,8 +1142,11 @@ MonoBehaviour:
   giantDieNum: 0200000004000000080000000f000000
   boostNum: 0
   normalTotalHp: 0
+  origSize: 0
   normalSize: 0
   itnHP: 100
+  toSize: 0
+  nowSize: 0
   changeSizeSpeed: 0.2
   baseSortingOrder: 100
 --- !u!1 &6139679835290116115

+ 19 - 0
ActionTowerDefense/Assets/Resources/Prefab/MySoldier/Demonic_Sword.prefab

@@ -419,9 +419,11 @@ MonoBehaviour:
   fireStacks: 0
   searchState: 0
   bigSoldier: {fileID: 1119516841680091051}
+  dragonTrigger: {fileID: 853215740739982155}
   myName: "\u6797\u51B2"
   summonEndToDie: 0
   canSizeChange: 0
+  ignoresOnState: 0
   soldierType: 2
   player: {fileID: 0}
   playerID: 0
@@ -916,8 +918,11 @@ MonoBehaviour:
   giantDieNum: 0200000004000000080000000f000000
   boostNum: 0
   normalTotalHp: 0
+  origSize: 0
   normalSize: 0
   itnHP: 100
+  toSize: 0
+  nowSize: 0
   changeSizeSpeed: 0.2
   baseSortingOrder: 100
 --- !u!1 &2437299196663985757
@@ -1596,6 +1601,7 @@ GameObject:
   m_Component:
   - component: {fileID: 1724031848734634463}
   - component: {fileID: 5749055005940368668}
+  - component: {fileID: 853215740739982155}
   m_Layer: 7
   m_Name: BodyCollider
   m_TagString: Untagged
@@ -1632,6 +1638,19 @@ CapsuleCollider:
   m_Height: 1.49
   m_Direction: 0
   m_Center: {x: 0, y: 0.65020585, z: 0}
+--- !u!114 &853215740739982155
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8367450352918568419}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 09d9abdbf4c198446ba545e23d3f9c48, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  haveCollisionDamage: 0
 --- !u!1 &8769150919382874379
 GameObject:
   m_ObjectHideFlags: 0

+ 3 - 0
ActionTowerDefense/Assets/Scripts/Characters/Demonic.cs

@@ -10,11 +10,13 @@ public class Demonic : MoveCharacter
 {
     [FoldoutGroup("组件")] [DisplayOnly]public SearchState searchState;
     [FoldoutGroup("组件")] public BigSoldier bigSoldier;
+    [FoldoutGroup("组件")] public DragonTrigger dragonTrigger;
 
     [FoldoutGroup("角色信息")] public string myName;
 
     [FoldoutGroup("条件")] [LabelText("释放起手式后死亡")] public bool summonEndToDie;
     [FoldoutGroup("条件")] [LabelText("体型是否会变化")] public bool canSizeChange;
+    [FoldoutGroup("条件")] [LabelText("是否无视OnState")] public bool ignoresOnState;
 
     [Space(30)]
     [Title("Demonic属性")]
@@ -56,6 +58,7 @@ public class Demonic : MoveCharacter
 
     public override void FixedUpdate()
     {
+        if (ignoresOnState) return;
         OnSearchState();
         OnState();
     }

+ 0 - 1
ActionTowerDefense/Assets/Scripts/Characters/PlayerController.cs

@@ -1629,7 +1629,6 @@ public class PlayerController : MoveCharacter
         demonic.playerID = playerId;
         demonicObj.transform.parent = null;
         demonicObj.transform.localEulerAngles = Vector3.zero;
-        demonicObj.transform.localScale = new Vector3(1, 1, 1);
         Vector3 offset = demonicSummonPos[id];
         //demonic.CheckTurn(-bodyTrans.localScale.x);
         if (bodyTrans.localScale.x > 0)

+ 18 - 0
ActionTowerDefense/Assets/Scripts/Conduct/ConductController.cs

@@ -70,6 +70,13 @@ public class ConductController : MonoBehaviour
                     sacrificeValue[i] = spiritBloodAggregator.sacrificeValue[demonicRarity];
                     totalCD[i] = spiritBloodAggregator.cd[demonicRarity];
                     break;
+                case ConductSkills.WanderingDragonOrb:
+                    ConductManager.WanderingDragonOrb wanderingDragonOrb = conductManager.wanderingDragonOrb;
+                    bUseFixedSacrifice[i] = wanderingDragonOrb.bUseFixedSacrifice;
+                    conversionRate[i] = wanderingDragonOrb.sacrificeRatio[demonicRarity];
+                    sacrificeValue[i] = wanderingDragonOrb.sacrificeValue[demonicRarity];
+                    totalCD[i] = wanderingDragonOrb.cd[demonicRarity];
+                    break;
             }
         }
     }
@@ -214,6 +221,17 @@ public class ConductController : MonoBehaviour
                 int order = bs.baseSortingOrder + playerController.demonicDic[demonicId].Count;
                 demonic.SetSortingOrder(order);
                 break;
+            case ConductSkills.WanderingDragonOrb:
+                ConductManager.WanderingDragonOrb wanderingDragonOrb = conductManager.wanderingDragonOrb;
+                obj = PoolManager.Instantiate(wanderingDragonOrb.obj);
+                DragonController dragonController = obj.GetComponent<DragonController>();
+                dragonController.num = dienum * wanderingDragonOrb.power[demonicRarity];
+                tagAdd += wanderingDragonOrb.effectBonus[demonicRarity] * myTreasureTag[(int)wanderingDragonOrb.attributeTag - 1] / 100;
+                dragonController.damage = (int)(attackDamage * tagAdd);
+                dragonController.demonicId = demonicId;
+                dragonController.player = playerController;
+                dragonController.Init();
+                break;
         }
     }
 }

+ 15 - 0
ActionTowerDefense/Assets/Scripts/Conduct/ConductManager.cs

@@ -12,6 +12,7 @@ public enum ConductSkills
     [LabelText("冰雨")] IceRain,
     [LabelText("保护罩")] Barrier,
     [LabelText("灵血聚合器")] SpiritBloodAggregator,
+    [LabelText("游龙球")] WanderingDragonOrb,
     
 }
 public class ConductManager : MonoBehaviour
@@ -88,6 +89,20 @@ public class ConductManager : MonoBehaviour
     }
     [LabelText("灵血聚合器")] public SpiritBloodAggregator spiritBloodAggregator;
 
+    //游龙球
+    [Serializable] public struct WanderingDragonOrb
+    {
+        [LabelText("标签")] public AttributeTag attributeTag;
+        [LabelText("献祭方式")] [Tooltip("勾选定额;不勾选百分比")] public bool bUseFixedSacrifice;
+        [ShowIf("@!bUseFixedSacrifice")] [LabelText("献祭比例(%)")] public float[] sacrificeRatio;
+        [ShowIf("@!bUseFixedSacrifice")] [LabelText("CD")] public float[] cd;
+        [ShowIf("bUseFixedSacrifice")] [LabelText("献祭数量")] public int[] sacrificeValue;
+        [LabelText("效果规模")] public int[] power;
+        [LabelText("效果加成(%)")] public float[] effectBonus;
+        public GameObject obj;
+    }
+    [LabelText("游龙球")] public WanderingDragonOrb wanderingDragonOrb;
+
     private void Awake()
     {
         if(!instance)

+ 92 - 0
ActionTowerDefense/Assets/Scripts/Conduct/DragonController.cs

@@ -0,0 +1,92 @@
+using Sirenix.OdinInspector;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DragonController : MonoBehaviour
+{
+    [LabelText("¼ä¸ô")] public float distance;
+    public int baseSortingOrder; 
+    public int num;
+    public int damage;
+    public int demonicId;
+    public PlayerController player;
+    public List<Demonic> demonics;
+    public List<Vector3> targetPoss;
+    public Vector3 playerOffset;
+    public float lerpValue;
+
+    public void Update()
+    {
+        Vector3 pos = player.transform.position + playerOffset;
+        if(Vector3.Distance(pos, targetPoss[0]) >= distance)
+        {
+            targetPoss[0] = pos;
+        }
+        for(int i = 0; i < demonics.Count; i++)
+        {
+            Demonic demonic = demonics[i];
+            Vector3 demonicPos = demonic.transform.position;
+            if(Vector3.Distance(targetPoss[i],demonicPos) >= distance)
+            {
+                targetPoss[i + 1] = demonicPos;
+            }
+            demonic.transform.position = Vector3.Lerp(demonicPos, targetPoss[i], lerpValue * Time.deltaTime);
+        }
+    }
+    public void Init()
+    {
+        Vector3 offset = Vector3.zero;
+        demonics = new List<Demonic>();
+        targetPoss = new List<Vector3>();
+        targetPoss.Add(player.transform.position + playerOffset);
+        for(int i = 0; i < num; i++)
+        {
+            Demonic demonic = CreateDemonic();
+            if(player.bodyTrans.localScale.x > 0)
+            {
+                offset = new Vector3(distance * (i + 1), 0, 0);
+            }
+            else
+            {
+                offset = new Vector3(-distance * (i + 1), 0, 0);
+            }
+            demonic.transform.position += offset;
+            int order = baseSortingOrder + i;
+            demonic.SetSortingOrder(order);
+            demonics.Add(demonic);
+            targetPoss.Add(demonic.transform.position);
+        }
+    }
+
+    public Demonic CreateDemonic()
+    {
+        GameObject demonicPrefabs = player.demonicPrefabs[demonicId];
+        GameObject demonicObj = PoolManager.Instantiate(demonicPrefabs);
+        Demonic demonic = demonicObj.GetComponent<Demonic>();
+        float dir = player.bodyTrans.localScale.x;
+        demonic.ignoresOnState = true;
+        demonic.dragonTrigger.haveCollisionDamage = true;
+        demonic.beHitTrigger.gameObject.SetActive(false);
+        demonic.beSearchTrigger.gameObject.SetActive(false);
+        Vector3 offset = player.demonicSummonPos[demonicId];
+        if (dir > 0)
+        {
+            if (demonic.bodyTrans.localScale.x < 0)
+            {
+                demonic.Turn();
+            }
+        }
+        else
+        {
+            if (demonic.bodyTrans.localScale.x > 0)
+            {
+                demonic.Turn();
+            }
+        }
+        playerOffset = new Vector3(dir > 0 ? offset.x : -offset.x, offset.y, offset.z);
+        demonicObj.transform.position = player.transform.position + playerOffset;
+        demonic.Init();
+        return demonic;
+    }
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Conduct/DragonController.cs.meta

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

+ 8 - 0
ActionTowerDefense/Assets/Scripts/Conduct/DragonTrigger.cs

@@ -0,0 +1,8 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DragonTrigger : MonoBehaviour
+{
+    public bool haveCollisionDamage;
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Conduct/DragonTrigger.cs.meta

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