소스 검색

修改厨师索敌逻辑

SZAND\msx_2 1 년 전
부모
커밋
f42bdc09c0

+ 8 - 3
ActionTowerDefense/Assets/Resources/Prefab/ESpirits_Cook.prefab

@@ -869,6 +869,8 @@ MonoBehaviour:
   hasHpUp: 0
   beLarger: 0
   attackToFloat: 0
+  isSoulUnstable: 0
+  soulUnstableTime: 0
   canMove: 0
   foot: {fileID: 5440846222604650418}
   extraRiseGravity: -28.8
@@ -905,6 +907,7 @@ MonoBehaviour:
   outlineMats:
   - {fileID: 2100000, guid: 30969c92738eb7d4da3885e08f1ec2f0, type: 2}
   - {fileID: 2100000, guid: 98fc94309ab120b4c83b2cebb9226222, type: 2}
+  outline1Mats: []
   playerMe: {fileID: 0}
   playerAni: {fileID: 0}
   playerCol: {fileID: 0}
@@ -919,6 +922,8 @@ MonoBehaviour:
   playerOut: []
   isInvisible: 0
   canNotChangeHurt: 0
+  soulPrefab: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
+  soulStartSpeed: 1
   id: 0
   jumpSpeed: 9
   searchState: 0
@@ -935,8 +940,6 @@ MonoBehaviour:
   minMoveSpeed: 1
   runSpeed: 4
   dropSoul: 3
-  soulPrefab: {fileID: 1723151111827507807, guid: e2b65aa482f2f1447a4074208d72b778, type: 3}
-  soulStartSpeed: 1
   dropSoulAngle: 90
   noOnSearchState: 0
   isFindingPlayer: 0
@@ -1081,8 +1084,10 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
   isCook: 1
+  isEnemy: 1
   trigObjList: []
-  cook: {fileID: 5578178439417386548}
+  eCook: {fileID: 5578178439417386548}
+  dCook: {fileID: 0}
   needToChange: 0
   maxLen: 0
   minLen: 0

+ 31 - 61
ActionTowerDefense/Assets/Resources/Prefab/FX/CooksBird.prefab

@@ -10,9 +10,6 @@ GameObject:
   m_Component:
   - component: {fileID: 7240019403788142967}
   - component: {fileID: 9150179999288272914}
-  - component: {fileID: 8964830733979099315}
-  - component: {fileID: 532949143690979670}
-  - component: {fileID: 2340042655124115048}
   m_Layer: 0
   m_Name: bird
   m_TagString: Untagged
@@ -87,64 +84,6 @@ SpriteRenderer:
   m_WasSpriteAssigned: 1
   m_MaskInteraction: 0
   m_SpriteSortPoint: 0
---- !u!114 &8964830733979099315
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 4360465988804635779}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 9a4a2dbc1e482cd4b9f1532e1fddcb30, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  owner: {fileID: 0}
-  rb: {fileID: 0}
-  trigedObjs: []
-  damage: 0
-  force: 0
-  changeHurt: 0
-  repelValue: 0
-  bulletType: 1
-  isGetTarget: 0
-  speed: 40
-  maxFlyTime: 1
-  flyTime: 0
-  isTrack: 0
-  trackTarget: {fileID: 0}
-  isBack: 1
-  stayTime: 1
-  toFloat: 0
---- !u!65 &532949143690979670
-BoxCollider:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 4360465988804635779}
-  m_Material: {fileID: 0}
-  m_IsTrigger: 0
-  m_Enabled: 1
-  serializedVersion: 2
-  m_Size: {x: 0.3652328, y: 0.2842206, z: 0.2}
-  m_Center: {x: 0.0033755542, y: -0.016877556, z: 0}
---- !u!54 &2340042655124115048
-Rigidbody:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 4360465988804635779}
-  serializedVersion: 2
-  m_Mass: 1
-  m_Drag: 0
-  m_AngularDrag: 0.05
-  m_UseGravity: 1
-  m_IsKinematic: 0
-  m_Interpolate: 0
-  m_Constraints: 120
-  m_CollisionDetection: 0
 --- !u!1 &6827689530009399248
 GameObject:
   m_ObjectHideFlags: 0
@@ -154,6 +93,8 @@ GameObject:
   serializedVersion: 6
   m_Component:
   - component: {fileID: 5739536514358716996}
+  - component: {fileID: 8736694251664551225}
+  - component: {fileID: 2361129339030397111}
   m_Layer: 0
   m_Name: CooksBird
   m_TagString: Untagged
@@ -177,3 +118,32 @@ Transform:
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &8736694251664551225
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6827689530009399248}
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_Enabled: 1
+  serializedVersion: 2
+  m_Size: {x: 1.7852101, y: 1.3337144, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!54 &2361129339030397111
+Rigidbody:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6827689530009399248}
+  serializedVersion: 2
+  m_Mass: 1
+  m_Drag: 0
+  m_AngularDrag: 0.05
+  m_UseGravity: 1
+  m_IsKinematic: 0
+  m_Interpolate: 0
+  m_Constraints: 120
+  m_CollisionDetection: 0

+ 34 - 19
ActionTowerDefense/Assets/Resources/Prefab/MySpirit/Spirits_Cook.prefab

@@ -332,14 +332,20 @@ MonoBehaviour:
   - {fileID: 4480734502875862885}
   - {fileID: 1322232727721152541}
   - {fileID: 2460330936527559963}
-  walkSpeed: 0
-  runSpeed: 0
-  value: 50
+  intervalTimeSell: 1
+  minX: 110
+  maxX: 135
+  value: 20
   effect: {fileID: 417478504669294145, guid: 07c7a53ff610e0b45898f0f09276d995, type: 3}
-  activeAniTime: 3.3
+  activeAniTime: 1.3
   larger: 1.2
-  canMove: 1
+  customers: []
+  target: {fileID: 0}
+  searchtrigger: {fileID: 2932762729738363159}
   lockEffect: {fileID: 2123904437201259524, guid: 24cf2b33715a9e04b9aabcb789c31067, type: 3}
+  cookTime: 2
+  seizeTime: 2
+  chargeTime: 2
 --- !u!1 &3483054690158852324
 GameObject:
   m_ObjectHideFlags: 0
@@ -814,7 +820,8 @@ MonoBehaviour:
   hp: 0
   attack1Infos: []
   attack2Infos: []
-  attackTriggers: []
+  attackTriggers:
+  - {fileID: 7729941002223262554}
   attackType: 0
   bulletPrefab: {fileID: 0}
   shootPos: []
@@ -827,28 +834,30 @@ MonoBehaviour:
   targetCharacter: {fileID: 0}
   beTargetCharacter: []
   searchTrigger: {fileID: 2932762729738363159}
-  targetTypes: 
-  canHitFly: 0
+  targetTypes: 010000000300000004000000
+  canHitFly: 1
   linked: 0
   joint: {fileID: 0}
   rope: {fileID: 0}
   hasHpUp: 0
   beLarger: 0
   attackToFloat: 0
+  isSoulUnstable: 0
+  soulUnstableTime: 0
   canMove: 0
   foot: {fileID: 5440846222604650418}
-  extraRiseGravity: 0
-  extraFallGravity: 0
+  extraRiseGravity: -28.8
+  extraFallGravity: -14.4
   moveSpeed: 1
   beRepelValue: 0
-  totalBeRepelValue: 0
+  totalBeRepelValue: 100
   weakTime: 0
-  totalWeakTime: 0
-  weakUpSpeed: 0
-  decelerationRatio: 0
-  minHurtKeepTime: 0
+  totalWeakTime: 3
+  weakUpSpeed: 10
+  decelerationRatio: 1
+  minHurtKeepTime: 0.2
   hurtKeepTime: 0
-  hurtChangeVelocity: 0
+  hurtChangeVelocity: 1
   comaTime: 5
   pastComaTime: 0
   isCaughtByCook: 0
@@ -872,6 +881,7 @@ MonoBehaviour:
   - {fileID: 2100000, guid: 30969c92738eb7d4da3885e08f1ec2f0, type: 2}
   - {fileID: 2100000, guid: 98fc94309ab120b4c83b2cebb9226222, type: 2}
   - {fileID: 2100000, guid: 30969c92738eb7d4da3885e08f1ec2f0, type: 2}
+  outline1Mats: []
   playerMe: {fileID: 0}
   playerAni: {fileID: 0}
   playerCol: {fileID: 0}
@@ -886,6 +896,8 @@ MonoBehaviour:
   playerOut: []
   isInvisible: 0
   canNotChangeHurt: 0
+  soulPrefab: {fileID: 0}
+  soulStartSpeed: 1
   id: 0
   costMp: 1
   totalSummonTime: 0.5
@@ -901,6 +913,7 @@ MonoBehaviour:
   playerID: 0
   hasEffect: 0
   soulCollector: {fileID: 0}
+  isBack: 0
 --- !u!54 &5440846222648032765
 Rigidbody:
   m_ObjectHideFlags: 0
@@ -1011,7 +1024,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!4 &770599430276839403
 Transform:
   m_ObjectHideFlags: 0
@@ -1040,9 +1053,11 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   owner: {fileID: 0}
-  isCook: 0
+  isCook: 1
+  isEnemy: 0
   trigObjList: []
-  cook: {fileID: 0}
+  eCook: {fileID: 0}
+  dCook: {fileID: 6880746539854057010}
   needToChange: 0
   maxLen: 0
   minLen: 0

+ 54 - 8
ActionTowerDefense/Assets/Resources/Prefab/Transfiguration/Trans_Cook.prefab

@@ -19,7 +19,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &1104288316767999960
 RectTransform:
   m_ObjectHideFlags: 0
@@ -320,7 +320,7 @@ MonoBehaviour:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 2885380845639701439}
-  m_Enabled: 1
+  m_Enabled: 0
   m_EditorHideFlags: 0
   m_Script: {fileID: 11500000, guid: ae4045519d0e38e48a91f50e3593ed41, type: 3}
   m_Name: 
@@ -332,14 +332,20 @@ MonoBehaviour:
   - {fileID: 4480734502875862885}
   - {fileID: 1322232727721152541}
   - {fileID: 2460330936527559963}
-  walkSpeed: 0
-  runSpeed: 0
+  intervalTimeSell: 0
+  minX: 0
+  maxX: 0
   value: 50
   effect: {fileID: 417478504669294145, guid: 07c7a53ff610e0b45898f0f09276d995, type: 3}
   activeAniTime: 3.3
   larger: 1.2
-  canMove: 1
+  customers: []
+  target: {fileID: 0}
+  searchtrigger: {fileID: 0}
   lockEffect: {fileID: 2123904437201259524, guid: 24cf2b33715a9e04b9aabcb789c31067, type: 3}
+  cookTime: 0
+  seizeTime: 0
+  chargeTime: 0
 --- !u!1 &3483054690158852324
 GameObject:
   m_ObjectHideFlags: 0
@@ -665,6 +671,7 @@ GameObject:
   m_Component:
   - component: {fileID: 901824162977467732}
   - component: {fileID: 2776251058442384869}
+  - component: {fileID: 741016000238553314}
   m_Layer: 0
   m_Name: Colliders
   m_TagString: Untagged
@@ -715,6 +722,19 @@ Animator:
   m_HasTransformHierarchy: 1
   m_AllowConstantClipSamplingOptimization: 1
   m_KeepAnimatorControllerStateOnDisable: 0
+--- !u!114 &741016000238553314
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5041915139224979942}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 492983f5b77df7e4b82cba32bc74fb94, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  owner: {fileID: 0}
 --- !u!1 &5440846222604650419
 GameObject:
   m_ObjectHideFlags: 0
@@ -784,6 +804,7 @@ GameObject:
   m_Component:
   - component: {fileID: 5440846222648032754}
   - component: {fileID: 5440846222648032767}
+  - component: {fileID: 1527607760671059063}
   m_Layer: 0
   m_Name: Trans_Cook
   m_TagString: Demonic
@@ -819,7 +840,7 @@ MonoBehaviour:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5440846222648032759}
-  m_Enabled: 1
+  m_Enabled: 0
   m_EditorHideFlags: 0
   m_Script: {fileID: 11500000, guid: c1bedfb340186164dbac1499b49b879e, type: 3}
   m_Name: 
@@ -850,7 +871,7 @@ MonoBehaviour:
   attack1Infos: []
   attack2Infos:
   - damage: 100
-    attackDir: {x: 0, y: 0, z: 0}
+    attackDir: {x: -1, y: 0, z: 0}
     force: 0
     changeHurt: 0
     repelValue: 10
@@ -865,7 +886,7 @@ MonoBehaviour:
   dieKeepTime: 0
   totalDieKeepTime: 1.34
   attackTarget: {fileID: 0}
-  shootTrack: 0
+  shootTrack: 1
   invincibleTime: 0
   totalInvincibleTime: 0
   targetCharacter: {fileID: 0}
@@ -879,6 +900,8 @@ MonoBehaviour:
   hasHpUp: 0
   beLarger: 0
   attackToFloat: 0
+  isSoulUnstable: 0
+  soulUnstableTime: 0
   canMove: 0
   foot: {fileID: 5440846222604650418}
   extraRiseGravity: -28.8
@@ -916,6 +939,7 @@ MonoBehaviour:
   - {fileID: 2100000, guid: 30969c92738eb7d4da3885e08f1ec2f0, type: 2}
   - {fileID: 2100000, guid: 98fc94309ab120b4c83b2cebb9226222, type: 2}
   - {fileID: 2100000, guid: 30969c92738eb7d4da3885e08f1ec2f0, type: 2}
+  outline1Mats: []
   playerMe: {fileID: 0}
   playerAni: {fileID: 0}
   playerCol: {fileID: 0}
@@ -930,6 +954,8 @@ MonoBehaviour:
   playerOut: []
   isInvisible: 0
   canNotChangeHurt: 0
+  soulPrefab: {fileID: 0}
+  soulStartSpeed: 1
   id: 0
   costMp: 1
   totalSummonTime: 0.5
@@ -945,6 +971,26 @@ MonoBehaviour:
   playerID: 0
   hasEffect: 0
   soulCollector: {fileID: 0}
+  isBack: 0
+--- !u!114 &1527607760671059063
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5440846222648032759}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5adf6402dec23ec4e971c72cea57ab65, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  controller: {fileID: 0}
+  changeTime: 5
+  UIoffset: {x: 0, y: 2, z: 0}
+  bottle: {fileID: 6827689530009399248, guid: 263e3d90178b89146933e46f2fce55df, type: 3}
+  intervalTime: 0.5
+  throwForce: {x: -2, y: 1, z: 0}
+  throwPos: {fileID: 4737949113454210572}
 --- !u!1 &6026815487321357762
 GameObject:
   m_ObjectHideFlags: 0

+ 24 - 9
ActionTowerDefense/Assets/Scripts/Bullet.cs

@@ -5,9 +5,9 @@ using UnityEngine;
 
 public enum BulletType
 {
-    Single = 0,//单体目标,触发后即销毁
-    Penetrate = 1,//穿透,可击中多个目标
-    Bomb = 2,//击中目标后爆炸
+    Single = 0,             //单体目标,触发后即销毁
+    Penetrate = 1,          //穿透,可击中多个目标
+    Bomb = 2,               //击中目标后爆炸
 }
 public class Bullet : MonoBehaviour
 {
@@ -29,7 +29,6 @@ public class Bullet : MonoBehaviour
     [Header("回旋镖")]
     public bool isBack;                 //回旋镖,会回来
     public float stayTime;              //在极点处停留时长
-    private float hasStayTime;
     private bool isStay = false;
     private Vector3 curDir;
     private bool hasBack = false;       //已经回来了
@@ -48,7 +47,7 @@ public class Bullet : MonoBehaviour
         flyTime += Time.deltaTime;
         if (!isStay && flyTime >= maxFlyTime)
         {
-            if (!isBack || isBack && hasBack)
+            if (!isBack)
             {
                 isGetTarget = true;
                 gameObject.SetActive(false);
@@ -56,6 +55,7 @@ public class Bullet : MonoBehaviour
             }
             else
             {
+                isStay = true;
                 flyTime = 0;
                 rb.velocity = Vector3.zero;
             }
@@ -63,11 +63,17 @@ public class Bullet : MonoBehaviour
         if(isStay && flyTime >= stayTime)
         {
             isStay = false;
-            flyTime = 0;
-            rb.velocity = -curDir * speed;
             hasBack = true;
-            Vector3 origScale = transform.localScale;
-            transform.localScale = new Vector3(-origScale.x, origScale.y, origScale.z);
+            trackTarget = owner;
+        }
+        if (hasBack)
+        {
+            if (owner.gameObject.activeSelf == false)
+            {
+                isStay = true;
+                flyTime = 0;
+                rb.velocity = Vector3.zero;
+            }
         }
         if (isTrack && trackTarget != null && !trackTarget.isDie && trackTarget.gameObject.activeInHierarchy)
         {
@@ -97,6 +103,15 @@ public class Bullet : MonoBehaviour
 
     private void OnTriggerEnter(Collider other)
     {
+        if (other.GetComponentInParent<Character>() == owner)
+        {
+            if (hasBack)
+            {
+                isGetTarget = true;
+                gameObject.SetActive(false);
+                return;
+            }
+        }
         if (other.CompareTag("Plane"))
         {
             isGetTarget = true;

+ 6 - 1
ActionTowerDefense/Assets/Scripts/Demonic.cs

@@ -22,6 +22,7 @@ public class Demonic : MoveCharacter
     public bool hasEffect = false;
 
     public Collider soulCollector;
+    public bool isBack = false;         //Íù·´·½Ïò×ß
 
     private void Awake()
     {
@@ -201,7 +202,11 @@ public class Demonic : MoveCharacter
                 moveDir = pc.GetMoveDir();
             }
         }
-        return moveDir;
+        if (!isBack)
+        {
+            return moveDir;
+        }
+        return -moveDir;
     }
 
     public bool GetAttack()

+ 5 - 2
ActionTowerDefense/Assets/Scripts/SearchTrigger.cs

@@ -8,9 +8,11 @@ public class SearchTrigger : MonoBehaviour
 {
     public Character owner;
     public bool isCook;
+    public bool isEnemy;
 
     public List<BeSearchTrigger> trigObjList;
-    public ESpirits_Cook cook;
+    public ESpirits_Cook eCook;
+    public Spirits_Cook dCook;
 
     public bool needToChange;
     public float maxLen, minLen;    //col´óС
@@ -79,7 +81,8 @@ public class SearchTrigger : MonoBehaviour
         {
             if (isCook)
             {
-                if(cook.customers.Exists(T => T == trigObjList[i].owner))
+                if ((isEnemy && eCook.customers.Exists(T => T == trigObjList[i].owner)) ||
+                    (!isEnemy && dCook.customers.Exists(T => T == trigObjList[i].owner)))
                 {
                     continue;
                 }

+ 168 - 84
ActionTowerDefense/Assets/Scripts/Spirits/Spirits_Cook.cs

@@ -2,58 +2,61 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using TMPro;
-using System;
 
 public class Spirits_Cook : MonoBehaviour
 {
-    public TextMeshProUGUI text;    //剩余串的数量文本
-    private GameObject dia;         //文本框
+    public TextMeshProUGUI text;        //剩余串的数量文本
+    private GameObject dia;             //文本框
 
-    private Transform cook;         //厨子
-    private Animator ani;           //厨子动画
-    private Collider col;           //厨子的碰撞体
-    public int chuan;               //厨子拥有多少串
-    public bool isGood;             //厨子是否是好厨子
-    public GameObject[] colliders;  //一些要开要关的collider
-    public float walkSpeed;         //走路速度
-    public float runSpeed;          //冲刺速度
+    private float offset;
 
-    public float value;             //加血程度百分比
-    public GameObject effect;       //加血效果
+    private Transform cook;             //厨子
+    private Animator ani;               //厨子动画
+    private Collider col;               //厨子的碰撞体
+    public int chuan;                   //厨子拥有多少串
+    public bool isGood;                 //厨子是否是好厨子
+    public GameObject[] colliders;      //一些要开要关的collider
 
-    private Demonic dem;            //厨子的demonic脚本
+    private float intervalTimePast;
+    public float intervalTimeSell;      //卖串的间隔时间
+    private bool isInterval = false;    //开始计算间隔时间
 
-    private bool once = false;      //死一次
-    private bool die = false;       //厨子命尽
-    private bool toCatch = false;   //没串了去抓人
-    private bool isRunning = false; //开跑
+    public float minX;                  //厨子卖串的最小地址站
+    public float maxX;                  //厨子卖串的最大地址站
 
-    private float activeTime;       //厨子已出现的时长
-    public float activeAniTime;     //厨子出现动画的时长
-    private bool isAct = false;     //厨子已经完整出现
+    public float value;                 //加血程度百分比
+    public GameObject effect;           //加血效果
 
-    private GameObject[] customers; //厨子的所有顾客
-    private int count;              //顾客数量
+    private Demonic dem;                //厨子的enemy脚本
 
-    public float larger;            //顾客变大的程度
+    private float activeTime;           //厨子已出现的时长
+    public float activeAniTime;         //厨子出现动画的时长
+    private bool isAct = false;         //厨子已经完整出现
 
-    public bool canMove = false;    //厨师可移动
+    public float larger;                //顾客变大的程度
+    public List<Character> customers;   //所有顾客
 
-    private GameObject player1;
-    private GameObject player2;
-    private GameObject target;
+    public Character target;
+    public SearchTrigger searchtrigger;
 
     public GameObject lockEffect;
     private GameObject curLock;
+    //public GameObject cookKillEffect;
+
+    private float pastTime;
+    public float cookTime;
+    public float seizeTime;
+    public float chargeTime;
+
+    private float destX;
 
     public enum cookState
     {
         sell = 0,
-        walk = 1,
-        find = 2,
-        run = 3,
+        run = 1,
+        seize = 2,  //抓住
+        back = 3,
         cook = 4,
-        back = 5,
     }
 
     private cookState state;
@@ -68,45 +71,90 @@ public class Spirits_Cook : MonoBehaviour
         col.enabled = false;
         dia = text.transform.parent.gameObject;
         dia.SetActive(false);
-        customers = new GameObject[chuan];
-        state = 0;
-        curLock = Instantiate(lockEffect, cook.transform.position, new Quaternion(0, 0, 0, 0), cook.transform);
+        //customers = new List<GameObject>();
+        text.text = chuan.ToString();
+        dem.isNonAttack = true;
+        //curLock = Instantiate(lockEffect, cook.transform.position, new Quaternion(0, 0, 0, 0), cook.transform);
+    }
+
+    private float DestinationX()
+    {
+        float x = Random.Range(minX, maxX);
+        return x;
     }
 
-    private void OnTriggerEnter(Collider other)
+    public void ReleaseFood()
     {
-        //路过发串
-        if (state == cookState.sell && !die && other.gameObject.layer == 7 || other.gameObject.layer == 8 || other.gameObject.layer == 6)
+        if (food.layer == 8)
         {
-            if (chuan > 0)
+            Enemy ene = food.GetComponent<Enemy>();
+            ene.isCaughtByCook = false;
+        }
+    }
+
+    private void ToRush()
+    {
+        ChangeState(cookState.run);
+    }
+
+    private void TargetInteract()
+    {
+        target = searchtrigger.GetMinDisTarget(dem.targetTypes, dem.canHitFly);
+        if (target != null)
+        {
+            if (state == cookState.sell && (target.gameObject.layer == 7 || target.gameObject.layer == 8 || target.gameObject.layer == 6))
             {
-                GameObject ga = other.transform.parent.parent.parent.gameObject;
-                Character ca = ga.GetComponent<Character>();
-                if (Array.IndexOf(customers, ga) == -1)
+                if (!isInterval && chuan > 0)
                 {
-                    chuan -= 1;
-                    text.text = chuan.ToString();
-                    ani.Play("attack_march", 0, 0);
-                    ca.HpUp(value, larger);
-                    customers[count] = ga;
-                    count += 1;
-                    Instantiate(effect, ga.transform.position, new Quaternion(0, 0, 0, 0), ga.transform);
-                    if (chuan == 0)
+                    if (!customers.Exists(T => T == target))
                     {
-                        toCatch = true;
-                        dem.ChangeState(CharacterState.Die);
+                        isInterval = true;
+                        chuan -= 1;
+                        text.text = chuan.ToString();
+                        ani.Play("attack_march", 0, 0);
+                        target.HpUp(value, larger);
+                        customers.Add(target);
+                        //count += 1;
+                        //Instantiate(effect, ga.transform.position, new Quaternion(0, 0, 0, 0), ga.transform);
+                        if (chuan == 0)
+                        {
+                            customers = new List<Character>();
+                            ani.Play("charge", 0, 0);
+                            Invoke("ToRush", chargeTime);
+                        }
                     }
                 }
             }
-        }
-        //抓人
-        else if (state == cookState.run || state == cookState.find || state == cookState.walk && !once)
-        {
-            if (other.gameObject.layer == 8)
+            //抓人
+            else if (state == cookState.run)
             {
-                food = other.gameObject;
-                ChangeState(cookState.cook);
+                if (target.gameObject.layer == 8)
+                {
+                    food = target.gameObject;
+                    if (!target.isDie)
+                    {
+                        Enemy fEne = food.GetComponent<Enemy>();
+                        fEne.isCaughtByCook = true;
+                        fEne.ChangeState(CharacterState.Coma);
+                        //food.GetComponent<Demonic>().ChangeState(CharacterState.Die);
+                        //cookKillEffect.SetActive(true);
+                        ChangeState(cookState.seize);
+                    }
+                    chuan = food.GetComponent<Character>().cookNum;
+                    offset = cook.transform.position.x - food.transform.position.x;
+                    text.text = chuan.ToString();
+                }
             }
+            //回家卖串
+            /*
+            else if (state == cookState.back && target.gameObject.layer == 8)
+            {
+                ChangeState(cookState.cook);
+                if (food.layer == 8 && !target.isDie)
+                {
+                    food.GetComponent<Demonic>().ChangeState(CharacterState.Die);
+                }
+            }*/
         }
     }
 
@@ -116,39 +164,38 @@ public class Spirits_Cook : MonoBehaviour
         {
             //卖串中
             case cookState.sell:
-                canMove = false;
+                dia.SetActive(true);
+                dem.isBack = false;
+                dem.canMove = false;
                 //不能被攻击
                 foreach (GameObject g in colliders)
                 {
                     g.SetActive(false);
                 }
                 break;
-            //走路中
-            case cookState.walk:
-                canMove = true;
-                dia.SetActive(false);
-                //能被攻击
-                foreach (GameObject g in colliders)
-                {
-                    g.SetActive(true);
-                }
-                break;
-            //发现目标
-            case cookState.find:
-                break;
             //冲刺中
             case cookState.run:
-                canMove = true;
+                dia.SetActive(false);
                 foreach (GameObject g in colliders)
                 {
                     g.SetActive(true);
                 }
+                dem.canMove = true;
+                dem.ChangeState(CharacterState.Rush);
+                break;
+            //抓住你啦
+            case cookState.seize:
+                dem.canMove = false;
                 break;
             //鲨人中
             case cookState.cook:
+                dem.canMove = false;
+                ani.Play("attack_march", 0, 0);
                 break;
             //返回中
             case cookState.back:
+                dem.canMove = true;
+                dem.isBack = true;
                 break;
             default:
                 break;
@@ -156,22 +203,43 @@ public class Spirits_Cook : MonoBehaviour
         state = cs;
     }
 
-    private void AimAt()
-    {
-        lockEffect.transform.position = transform.position;
-    }
-
     private void StateAct(cookState cs)
     {
         switch (cs)
         {
+            case cookState.back:
+                if (cook.transform.position.x <= destX)
+                {
+                    ChangeState(cookState.cook);
+                    if (food.layer == 8 && !target.isDie)
+                    {
+                        food.GetComponent<Enemy>().ChangeState(CharacterState.Die);
+                    }
+                }
+                food.transform.position = new Vector3(cook.transform.position.x - offset, food.transform.position.y,
+                    food.transform.position.z);
+                break;
             case cookState.cook:
-
+                pastTime += Time.deltaTime;
+                if (pastTime >= cookTime)
+                {
+                    pastTime = 0;
+                    ChangeState(cookState.sell);
+                }
                 break;
             case cookState.run:
+                //ene.targetCharacter = target.GetComponent<Character>();
                 break;
             case cookState.sell:
                 break;
+            case cookState.seize:
+                pastTime += Time.deltaTime;
+                if (pastTime >= seizeTime)
+                {
+                    pastTime = 0;
+                    ChangeState(cookState.back);
+                }
+                break;
             default:
                 break;
         }
@@ -187,13 +255,29 @@ public class Spirits_Cook : MonoBehaviour
                 dia.SetActive(true);
                 isAct = true;
                 col.enabled = true;
+                ChangeState(cookState.sell);
             }
         }
-        if (die && !once)
+        else
+        {
+            StateAct(state);
+        }
+        if (isInterval)
+        {
+            intervalTimePast += Time.deltaTime;
+            if (intervalTimePast >= intervalTimeSell)
+            {
+                intervalTimePast = 0;
+                isInterval = false;
+            }
+        }
+    }
+
+    private void FixedUpdate()
+    {
+        if (isAct)
         {
-            once = true;
-            col.enabled = false;
-            dem.ChangeState(CharacterState.Die);
+            TargetInteract();
         }
     }
 }

+ 14 - 1
ActionTowerDefense/Assets/Scripts/Spirits/Trans_Cook.cs

@@ -10,9 +10,14 @@ public class Trans_Cook : MonoBehaviour
 
     private Demonic dem;
 
+    [Header("J技能:撒辣椒粉")]
+    public GameObject bottle;
     public float intervalTime;              //攻击硬直
     private float pastAttackTime;
     private bool canAttack = true;
+    private Rigidbody rb;
+    public Vector3 throwForce;              //抛出辣椒粉调料瓶的力
+    public GameObject throwPos;
 
     private void Start()
     {
@@ -29,6 +34,13 @@ public class Trans_Cook : MonoBehaviour
         controller.uiMp.transform.position -= UIoffset;
     }
 
+    private void SprinklePaprika()  //J技能:撒辣椒粉
+    {
+        Instantiate(bottle, throwPos.transform.position, new Quaternion(0, 0, 0, 0), null);
+        rb = bottle.GetComponent<Rigidbody>();
+        rb.AddForce(throwForce);
+    }
+
     private void Update()
     {
         if (!canAttack)
@@ -44,7 +56,8 @@ public class Trans_Cook : MonoBehaviour
         {
             canAttack = false;
             controller.isinputJ = false;
-            dem.Attack2();
+            SprinklePaprika();
+
         }
         if (controller.isinputK)
         {