SZAND\msx_2 10 kuukautta sitten
vanhempi
commit
636204495a

+ 233 - 0
ActionTowerDefense/Assets/Resources/Prefab/Conduct/AngryBullet.prefab

@@ -0,0 +1,233 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2457990364073403684
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8618146012370266183}
+  - component: {fileID: 4463968343755598858}
+  - component: {fileID: 2069529063800026293}
+  m_Layer: 0
+  m_Name: searchTrigger
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &8618146012370266183
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2457990364073403684}
+  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: 6428003715898112146}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &4463968343755598858
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2457990364073403684}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &2069529063800026293
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2457990364073403684}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0d83a3c86ec283644a3652639966e99b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  ab: {fileID: 6259350382205049001}
+--- !u!1 &3584230841871599468
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6428003715898112146}
+  - component: {fileID: 3384884084360692612}
+  - component: {fileID: 6259350382205049001}
+  m_Layer: 0
+  m_Name: AngryBullet
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &6428003715898112146
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3584230841871599468}
+  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:
+  - {fileID: 8618146012370266183}
+  - {fileID: 5220228654762703489}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &3384884084360692612
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3584230841871599468}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 0
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: 046cffcb367e1e244891c1a15891cd4a, type: 3}
+  m_Color: {r: 1, g: 0, b: 0.8540764, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1, y: 1}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!114 &6259350382205049001
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3584230841871599468}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: ba75180b2a54854449941fd2475d6eee, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  owner: {fileID: 0}
+  conductId: 0
+  damage: 100
+  ens: []
+  hasTarget: 0
+  searchCol: {fileID: 4463968343755598858}
+  maxTime: 0.2
+  maxTimes: 7
+  curTimes: 0
+  firstMaxDis: 20
+  maxDistance: 10
+  self: {fileID: 322494267869588354}
+  speed: 20
+  fx: 1
+--- !u!1 &6047974222243823388
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5220228654762703489}
+  - component: {fileID: 322494267869588354}
+  - component: {fileID: 2508810515332869708}
+  m_Layer: 0
+  m_Name: self
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &5220228654762703489
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6047974222243823388}
+  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: 6428003715898112146}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &322494267869588354
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6047974222243823388}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!114 &2508810515332869708
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6047974222243823388}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1d96ad6d20f38b545b77e3361c9a56c1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  ab: {fileID: 6259350382205049001}

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

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

+ 51 - 0
ActionTowerDefense/Assets/Resources/Prefab/Conduct/AngryBulletController.prefab

@@ -0,0 +1,51 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &8625694250200680089
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1606292805419130208}
+  - component: {fileID: 8323168888786228519}
+  m_Layer: 0
+  m_Name: AngryBulletController
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1606292805419130208
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8625694250200680089}
+  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 &8323168888786228519
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8625694250200680089}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6ecc00a983c171c4dba273f670cb6c61, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  angryBulletObj: {fileID: 3584230841871599468, guid: 781fd505403106740a57d2980611eb38, type: 3}
+  playerController: {fileID: 0}
+  cacheConductId: 0
+  invokeTime: 0.2
+  maxNum: 0

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

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

+ 28 - 18
ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Cook.prefab

@@ -9,7 +9,7 @@ GameObject:
   serializedVersion: 6
   m_Component:
   - component: {fileID: 6459001683917408033}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: Body
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -44,7 +44,7 @@ GameObject:
   - component: {fileID: 8927539278125731317}
   - component: {fileID: 77275286589392561}
   - component: {fileID: 7729941002223262554}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: AttackTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -112,7 +112,7 @@ GameObject:
   - component: {fileID: 3761193981374988805}
   - component: {fileID: 8821918095573329622}
   - component: {fileID: 5991788786426416620}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: HP
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -217,7 +217,7 @@ GameObject:
   - component: {fileID: 6069085609270885073}
   - component: {fileID: 5217712517297835056}
   - component: {fileID: 3377671071202039733}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: BeHitTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -277,7 +277,7 @@ GameObject:
   - component: {fileID: 1709837802563954221}
   - component: {fileID: 5459908402034348056}
   - component: {fileID: 5578178439417386548}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: EffectTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -347,7 +347,7 @@ GameObject:
   - component: {fileID: 5649507295576249902}
   - component: {fileID: 8522714288557735753}
   - component: {fileID: 979388067414062712}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: restMeat
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -482,7 +482,7 @@ GameObject:
   - component: {fileID: 6207242290232856985}
   - component: {fileID: 637278332454425733}
   - component: {fileID: 4259433079752244006}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: BeSearchTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -540,7 +540,7 @@ GameObject:
   m_Component:
   - component: {fileID: 5669356131851076493}
   - component: {fileID: 925594141286007562}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: BodyCollider
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -585,7 +585,7 @@ GameObject:
   m_Component:
   - component: {fileID: 8922289277778709813}
   - component: {fileID: 8092833306629620455}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: ground
   m_TagString: Plane
   m_Icon: {fileID: 0}
@@ -630,7 +630,7 @@ GameObject:
   m_Component:
   - component: {fileID: 901824162977467732}
   - component: {fileID: 2776251058442384869}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: Colliders
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -688,7 +688,7 @@ GameObject:
   - component: {fileID: 5440846222604650428}
   - component: {fileID: 5440846222604650429}
   - component: {fileID: 5440846222604650418}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: Foot
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -751,7 +751,7 @@ GameObject:
   - component: {fileID: 5440846222648032754}
   - component: {fileID: 5440846222648032765}
   - component: {fileID: 6081378874369820973}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: ESpirits_Cook
   m_TagString: Enemy
   m_Icon: {fileID: 0}
@@ -856,6 +856,8 @@ MonoBehaviour:
     repelValue: 10
   attackTriggers:
   - {fileID: 7729941002223262554}
+  addAttackEffect: {fileID: 0}
+  curDamage: 
   targetTypes: 010000000300000004000000
   targetCharacter: {fileID: 0}
   attackTarget: {fileID: 0}
@@ -908,6 +910,7 @@ MonoBehaviour:
   minRotateSpeed: 5
   isFloat: 0
   normalFallSpeed: 10
+  effect: {fileID: 0}
   playerMe: {fileID: 0}
   playerAni: {fileID: 0}
   playerCol: {fileID: 0}
@@ -946,6 +949,13 @@ MonoBehaviour:
   isBeBlownUp: 0
   isBeReboundedX: 0
   isBeReboundedY: 0
+  reboundXSpeed: 0
+  reboundYSpeed: 0
+  wallDamage: 0
+  willBeComa: 0
+  willComaTime: 0
+  comaDamage: 0
+  willBeFly: 0
   type: 2
   searchState: 0
   attackDistance: 1.5
@@ -986,7 +996,7 @@ GameObject:
   - component: {fileID: 1544714013328383648}
   - component: {fileID: 3678245064167135595}
   - component: {fileID: 2659450120544468328}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: dialog
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -1063,7 +1073,7 @@ GameObject:
   - component: {fileID: 770599430276839403}
   - component: {fileID: 2932762729738363159}
   - component: {fileID: 826799689842861252}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: SearchTrigger
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -1130,7 +1140,7 @@ GameObject:
   - component: {fileID: 2964200084326350432}
   - component: {fileID: 2178347225627672996}
   - component: {fileID: 1927691970271605732}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: Progress
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -1208,7 +1218,7 @@ GameObject:
   - component: {fileID: 9134347361501008817}
   - component: {fileID: 3333436509305836838}
   - component: {fileID: 7573527827155227431}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: Spine
   m_TagString: Untagged
   m_Icon: {fileID: 0}
@@ -1354,7 +1364,7 @@ GameObject:
   m_Component:
   - component: {fileID: 2332805625535433500}
   - component: {fileID: 4017189360880258370}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: ground (1)
   m_TagString: Plane
   m_Icon: {fileID: 0}
@@ -1401,7 +1411,7 @@ GameObject:
   - component: {fileID: 3837615663371647561}
   - component: {fileID: 5872138694498903774}
   - component: {fileID: 7461681167498147446}
-  m_Layer: 7
+  m_Layer: 8
   m_Name: UI
   m_TagString: Untagged
   m_Icon: {fileID: 0}

+ 2 - 1
ActionTowerDefense/Assets/Resources/Prefab/Player.prefab

@@ -1003,7 +1003,7 @@ MonoBehaviour:
   - 0
   - 0
   - 0
-  conductSkills: 000000000000000004000000
+  conductSkills: 060000000000000004000000
   conductCanRelease: 010101
   conductReadyTip: {fileID: 946637326309089849}
   bigGiant: {fileID: 5440846222648032759, guid: d64528a2dcc945b4a9ea5d5a859679f3, type: 3}
@@ -1021,6 +1021,7 @@ MonoBehaviour:
   mountainTime: 5
   wavePowerObj: {fileID: 8625694250200680089, guid: 2ee85ceccd170b94b8ba929f3b58af5f, type: 3}
   flyingSwordsObj: {fileID: 256012001268456902, guid: 28fffa39583087344b7b2620e7284dd5, type: 3}
+  angryBulletObj: {fileID: 8625694250200680089, guid: 4a30da3dcf83256468df404f06d44533, type: 3}
   isClickBtnJump: 0
   isClickBtnRush: 0
   isKeepBtnRush: 0

+ 129 - 0
ActionTowerDefense/Assets/Scripts/Conduct/AngryBullet.cs

@@ -0,0 +1,129 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class AngryBullet : MonoBehaviour
+{
+    public enum BulletState
+    {
+        findTarget,
+        traceTarget,
+        die,
+    }
+
+    private BulletState state;
+
+    public PlayerController owner;
+    public int conductId;
+
+    [Header("伤害")]
+    public int damage;
+
+    [Header("目标单位")]
+    public Enemy[] ens;
+    public bool hasTarget;
+    public BoxCollider searchCol;
+
+    [Header("索敌时间")]
+    public float maxTime;
+    private float curTime;
+
+    [Header("次数上限")]
+    public int maxTimes;
+    public int curTimes;
+
+    [Header("最远可弹射距离")]
+    public float firstMaxDis;
+    private bool isFirst;
+    public float maxDistance;
+    public Collider self;
+    private float curDis;
+
+    [Header("速度")]
+    public float speed;
+    public int fx = 1;
+
+    private void Start()
+    {
+        Vector3 size = searchCol.size;
+        size.x = maxDistance * 2;
+        searchCol.size = size;
+        ens = new Enemy[maxTimes];
+        if (owner.bodyTrans.localScale.x < 0)
+        {
+            fx = 1;
+        }
+        else
+        {
+            fx = -1;
+        }
+    }
+
+    public void ChangeState(BulletState bs)
+    {
+        if (bs == state)
+        {
+            return;
+        }
+        switch (bs)
+        {
+            case BulletState.findTarget:
+                searchCol.enabled = false;
+                break;
+            case BulletState.traceTarget:
+                self.enabled = false;
+                break;
+            default:
+                break;
+        }
+        state = bs;
+        switch (state)
+        {
+            case BulletState.findTarget:
+                hasTarget = false;
+                searchCol.enabled = true;
+                curTime = maxTime;
+                break;
+            case BulletState.traceTarget:
+                fx = -fx;
+                transform.localScale = new Vector3(fx, 1, 1);
+                self.enabled = true;
+                break;
+            case BulletState.die:
+                owner.conductCanRelease[conductId] = true;
+                gameObject.SetActive(false);
+                break;
+            default:
+                break;
+        }
+    }
+
+    private void OnState()
+    {
+        switch (state)
+        {
+            case BulletState.findTarget:
+                curTime -= Time.deltaTime;
+                if (curTime <= 0)
+                {
+                    ChangeState(BulletState.die);
+                }
+                break;
+            case BulletState.traceTarget:
+                curDis = fx * speed * Time.deltaTime;
+                transform.position += new Vector3(curDis, 0, 0);
+                if (isFirst && Mathf.Abs(curDis) >= firstMaxDis)
+                {
+                    ChangeState(BulletState.die);
+                }
+                break;
+            default:
+                break;
+        }
+    }
+
+    private void Update()
+    {
+        OnState();
+    }
+}

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

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

+ 39 - 0
ActionTowerDefense/Assets/Scripts/Conduct/AngryBulletControl.cs

@@ -0,0 +1,39 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class AngryBulletControl : MonoBehaviour
+{
+    public GameObject angryBulletObj;
+    public PlayerController playerController;
+    public int cacheConductId;
+    [Header("¼ä¸ôʱ¼ä")] public float invokeTime;
+    public int maxNum;
+    private float time;
+    private int num;
+
+    void Update()
+    {
+        time += Time.deltaTime;
+        if(time >= invokeTime)
+        {
+            ShootAngryBullet();
+            num += 1;
+            time = 0;
+            if (num >= maxNum)
+            {
+                gameObject.SetActive(false);
+            }
+        }
+    }
+
+    private void ShootAngryBullet()
+    {
+        GameObject obj = GameObject.Instantiate(angryBulletObj, null);
+        obj.transform.position = playerController.transform.position + Vector3.up;
+        AngryBullet ab = obj.GetComponent<AngryBullet>();
+        ab.owner = playerController;
+        ab.conductId = cacheConductId;
+        ab.ChangeState(AngryBullet.BulletState.traceTarget);
+    }
+}

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

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

+ 22 - 0
ActionTowerDefense/Assets/Scripts/Conduct/AngryBulletSearch.cs

@@ -0,0 +1,22 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using System;
+
+public class AngryBulletSearch : MonoBehaviour
+{
+    public AngryBullet ab;
+
+    private void OnTriggerEnter(Collider other)
+    {
+        if (other.gameObject.layer == 8 && Array.IndexOf(ab.ens, other.GetComponentInParent<Enemy>()) == -1)
+        {
+            if (ab.fx == -1 && other.gameObject.transform.position.x >= transform.position.x ||
+                ab.fx == 1 && other.gameObject.transform.position.x <= transform.position.x)
+            {
+                ab.hasTarget = true;
+                ab.ChangeState(AngryBullet.BulletState.traceTarget);
+            }
+        }
+    }
+}

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

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

+ 28 - 0
ActionTowerDefense/Assets/Scripts/Conduct/AngryBulletSelf.cs

@@ -0,0 +1,28 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using System;
+
+public class AngryBulletSelf : MonoBehaviour
+{
+    public AngryBullet ab;
+
+    private void OnTriggerEnter(Collider other)
+    {
+        if (other.gameObject.layer == 8 && Array.IndexOf(ab.ens, other.GetComponentInParent<Enemy>()) == -1)
+        {
+            Enemy en = other.GetComponentInParent<Enemy>();
+            ab.ens[ab.curTimes] = en;
+            en.BeHit(ab.damage, Vector3.zero, false, 0);
+            ab.curTimes++;
+            if (ab.curTimes == ab.maxTimes)
+            {
+                ab.ChangeState(AngryBullet.BulletState.die);
+            }
+            else
+            {
+                ab.ChangeState(AngryBullet.BulletState.findTarget);
+            }
+        }
+    }
+}

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

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

+ 54 - 31
ActionTowerDefense/Assets/Scripts/PlayerController.cs

@@ -125,7 +125,7 @@ public class PlayerController : MoveCharacter
     public float cacheSummonTime; //无法召唤时按下召唤键不会召唤,手感不好,缓存几帧,在这几帧内落地会立即召唤;
     [HideInInspector]
     public int cacheSummonId;
-    
+
 
     [Header("召唤使魔")]
     public List<GameObject> demonicPrefabs;
@@ -187,6 +187,8 @@ public class PlayerController : MoveCharacter
     public GameObject wavePowerObj;
     //御剑术
     public GameObject flyingSwordsObj;
+    //怨气弹
+    public GameObject angryBulletObj;
 
     public enum ConductSkills
     {
@@ -198,6 +200,7 @@ public class PlayerController : MoveCharacter
         WavePower,          //气功师:气功波
         SwordsControl,      //气功师:御剑术
 
+        AngryBullet,        //弓箭手:怨气弹
     }
 
 
@@ -426,7 +429,7 @@ public class PlayerController : MoveCharacter
         }
         skeletonMecanim.skeletonDataAsset = playerSpine[playerId];
         demonicDic = new Dictionary<int, List<Demonic>>();
-        for(int i = 0; i < 3; i++)
+        for (int i = 0; i < 3; i++)
         {
             demonicDic.Add(i, new List<Demonic>());
         }
@@ -478,11 +481,11 @@ public class PlayerController : MoveCharacter
                 portalsController.rbs.Remove(rb);
             }
         }
-        if(rightDir.x<-0.5 || rightDir.x > 0.5)
+        if (rightDir.x < -0.5 || rightDir.x > 0.5)
         {
             ChangeSpirit();
         }
-        
+
     }
 
 
@@ -532,7 +535,7 @@ public class PlayerController : MoveCharacter
 
     void OnSummon0Up()
     {
-        if(nowConductButton == 0)
+        if (nowConductButton == 0)
         {
             isBtnWestUp = true;
             cacheConductId = nowConductButton;
@@ -604,7 +607,7 @@ public class PlayerController : MoveCharacter
     }
 
     //召唤英灵
-    void OnTransfigurate() 
+    void OnTransfigurate()
     {
         if (!keyTransfigurateRelease && !isFloat && canMove && !isBaseBtnOut)
         {
@@ -647,7 +650,7 @@ public class PlayerController : MoveCharacter
     {
         if (btnTransfiguratePress)
         {
-            if(spirits.ultimateTimes[spirits.nowSpirit] > 0)
+            if (spirits.ultimateTimes[spirits.nowSpirit] > 0)
             {
                 Summon((int)spirits.ownSpirits[spirits.nowSpirit] + 3);
                 return true;
@@ -663,7 +666,7 @@ public class PlayerController : MoveCharacter
                 return true;
             }
         }
-        if (state!=CharacterState.Conduct && nowConductButton != -1 && conductTime >= 0)
+        if (state != CharacterState.Conduct && nowConductButton != -1 && conductTime >= 0)
         {
             CheckTurn();
             if (conductCanRelease[nowConductButton])
@@ -671,7 +674,7 @@ public class PlayerController : MoveCharacter
                 ChangeState(CharacterState.Conduct);
                 return true;
             }
-            
+
         }
         return false;
     }
@@ -726,7 +729,7 @@ public class PlayerController : MoveCharacter
                     {
                         int dienum = demonicDic[1].Count;
                         int tempthp = giantNum * 1000;
-                        foreach(Demonic d in giants)
+                        foreach (Demonic d in giants)
                         {
                             d.ChangeState(CharacterState.Die);
                         }
@@ -772,7 +775,7 @@ public class PlayerController : MoveCharacter
                     }
                     break;
                 case ConductSkills.Photosphere:
-                    if(demonicDic[1].Count > 0)
+                    if (demonicDic[1].Count > 0)
                     {
                         conductCanRelease[cacheConductId] = false;
                         GameObject obj = GameObject.Instantiate(photosphereObj, transform);
@@ -791,7 +794,7 @@ public class PlayerController : MoveCharacter
                     if (demonicDic[1].Count > 0)
                     {
                         List<Demonic> newGiants = new List<Demonic>();
-                        foreach(Demonic d in giants)
+                        foreach (Demonic d in giants)
                         {
                             if (!d.isDie)
                             {
@@ -804,10 +807,10 @@ public class PlayerController : MoveCharacter
                             }
                         }
                         giants = newGiants;
-                        foreach(Demonic d in giants)
+                        foreach (Demonic d in giants)
                         {
                             int[] damages = d.curDamage;
-                            for(int i = 0; i < damages.Length; i++)
+                            for (int i = 0; i < damages.Length; i++)
                             {
                                 damages[i] += giantNum * swordNum;
                             }
@@ -825,7 +828,7 @@ public class PlayerController : MoveCharacter
                         conductCanRelease[cacheConductId] = false;
                         if (curMountain == null)
                         {
-                            curMountain= GameObject.Instantiate(mountain, transform);
+                            curMountain = GameObject.Instantiate(mountain, transform);
                             curMountain.transform.position = transform.position + offset;
                             curMountain.GetComponent<Mountain>().pc = this;
                             curMountain.GetComponent<Mountain>().id = cacheConductId;
@@ -870,6 +873,23 @@ public class PlayerController : MoveCharacter
                         costMp = false;
                     }
                     break;
+                //弓箭手
+                case ConductSkills.AngryBullet:
+                    if (demonicDic[0].Count > 0)
+                    {
+                        conductCanRelease[cacheConductId] = false;
+                        GameObject obj = Instantiate(angryBulletObj);
+                        AngryBulletControl angryBulletControl = obj.GetComponent<AngryBulletControl>();
+                        angryBulletControl.playerController = this;
+                        angryBulletControl.cacheConductId = cacheConductId;
+                        angryBulletControl.maxNum = demonicDic[0].Count * 7;
+                        //InvokeRepeating("ShootAngryBullet", demonicDic[0].Count * 7, 0.2f);
+                    }
+                    else
+                    {
+                        costMp = false;
+                    }
+                    break;
             }
             if (costMp)
             {
@@ -886,6 +906,9 @@ public class PlayerController : MoveCharacter
             print("蓝量不足");
         }
     }
+
+
+
     //角色处于可自由活动状态时的通用切换状态逻辑,如Idle、Run状态,以及别的状态结束时准备回到Idle状态前
     public bool CheckPlayerChangeState(CharacterState excludeState = CharacterState.None)
     {
@@ -898,7 +921,7 @@ public class PlayerController : MoveCharacter
             //        return true;
             //    }
             //}
-            if(excludeState != CharacterState.Summon || excludeState != CharacterState.Conduct)
+            if (excludeState != CharacterState.Summon || excludeState != CharacterState.Conduct)
             {
                 if (CheckSummon())
                 {
@@ -973,7 +996,7 @@ public class PlayerController : MoveCharacter
                     return true;
                 }
             }
-            if(leftDir.y< -0.5)
+            if (leftDir.y < -0.5)
             {
                 Platform platform = foot.trigGroundList[0].GetComponent<Platform>();
                 if (platform != null && platform.canDown)
@@ -1098,7 +1121,7 @@ public class PlayerController : MoveCharacter
         dieKeepTime -= Time.deltaTime;
         weakTime -= Time.deltaTime;
         beRepelValue += Time.deltaTime;
-        if(nowConductButton != -1)
+        if (nowConductButton != -1)
         {
             conductTime += Time.deltaTime;
         }
@@ -1112,7 +1135,7 @@ public class PlayerController : MoveCharacter
                     break;
                 }
                 rb.velocity = Vector3.right * velocityAddition;
-                
+
                 break;
             case CharacterState.Run:
                 if (CheckPlayerChangeState(CharacterState.Run))
@@ -1128,11 +1151,11 @@ public class PlayerController : MoveCharacter
                 {
                     if (leftDir.x > 0.3f)
                     {
-                        rb.velocity = new Vector3(moveSpeed+velocityAddition,0,0);
+                        rb.velocity = new Vector3(moveSpeed + velocityAddition, 0, 0);
                     }
                     else if (leftDir.x < -0.3f)
                     {
-                        rb.velocity = new Vector3(-moveSpeed + velocityAddition,0,0);
+                        rb.velocity = new Vector3(-moveSpeed + velocityAddition, 0, 0);
                     }
                 }
 
@@ -1230,7 +1253,7 @@ public class PlayerController : MoveCharacter
             //        {
             //            vel += Vector3.up * extraFallGravity * Time.deltaTime;
             //        }
-                    
+
             //    }
             //    vel.x = vel.x * (1 - decelerationRatio * Time.deltaTime);
             //    rb.velocity = vel;
@@ -1493,7 +1516,7 @@ public class PlayerController : MoveCharacter
                     if (isRevive)
                     {
                         reviveTime += Time.deltaTime;
-                        if(reviveTime >= totalReviveTime)
+                        if (reviveTime >= totalReviveTime)
                         {
                             PlayerRevive();
                         }
@@ -1712,7 +1735,7 @@ public class PlayerController : MoveCharacter
         {
             return;
         }
-        if(newState == CharacterState.Weak)
+        if (newState == CharacterState.Weak)
         {
             return;
         }
@@ -1742,7 +1765,7 @@ public class PlayerController : MoveCharacter
                 break;
             case CharacterState.Summon:
                 rb.isKinematic = false;
-                if(cacheDir != 0)
+                if (cacheDir != 0)
                 {
                     if (cacheDir > 0.3f && bodyTrans.localScale.x > 0)
                     {
@@ -1765,7 +1788,7 @@ public class PlayerController : MoveCharacter
                 velocity = Vector3.zero;
                 break;
             case CharacterState.Die:
-                if(isRevive)
+                if (isRevive)
                 {
                     return;
                 }
@@ -1775,7 +1798,7 @@ public class PlayerController : MoveCharacter
                 beRepelValue = totalBeRepelValue;
                 break;
             case CharacterState.Conduct:
-                rb.isKinematic =false;
+                rb.isKinematic = false;
                 break;
             default:
                 break;
@@ -2040,7 +2063,7 @@ public class PlayerController : MoveCharacter
         {
             prefab = demonicPrefabs[id];
         }
-        
+
         if (!CheckCanSummon(id))
         {
             return;
@@ -2087,12 +2110,12 @@ public class PlayerController : MoveCharacter
         demonic.Init();
         int order = prefab.GetComponent<Demonic>().baseSortingOrder + demonicDic[demonic.id].Count;
         demonic.SetSortingOrder(order);
-        if(id != 4)
+        if (id != 4)
         {
             demonic.Attack1();
         }
         //id 3~6 为四个英灵
-        if(id >= 3 && id <= 6)
+        if (id >= 3 && id <= 6)
         {
             spirits.ultimateTimes[spirits.nowSpirit] -= 1;
         }
@@ -2145,7 +2168,7 @@ public class PlayerController : MoveCharacter
         {
             prefab = demonicPrefabs[id];
         }
-        
+
         float costMp = prefab.GetComponent<Demonic>().costMp;
         if (mp < costMp)
         {