|
|
@@ -1,11 +1,18 @@
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
using UnityEngine;
|
|
|
-
|
|
|
+public enum InvisibleState
|
|
|
+{
|
|
|
+ None = -1,
|
|
|
+ Normal = 0, //Õý³£×´Ì¬
|
|
|
+ Hurt = 1, //±»´ò״̬
|
|
|
+}
|
|
|
public class ESpirits_Invisible : MonoBehaviour
|
|
|
{
|
|
|
+ public InvisibleState state;
|
|
|
public Rigidbody rb;
|
|
|
public float moveSpeed;
|
|
|
+ public float upMoveSpeed;
|
|
|
public float altitude;
|
|
|
public float randomRageY;
|
|
|
public float randomRageX;
|
|
|
@@ -20,27 +27,71 @@ public class ESpirits_Invisible : MonoBehaviour
|
|
|
public int nowNumber;
|
|
|
[HideInInspector]
|
|
|
public int nowPlayer;
|
|
|
+ public float back;
|
|
|
+ [HideInInspector]
|
|
|
+ public int hp;
|
|
|
+ public Enemy enemy;
|
|
|
+ [HideInInspector]
|
|
|
+ public float posx;
|
|
|
+ private void Awake()
|
|
|
+ {
|
|
|
+ hp = enemy.hp;
|
|
|
+ }
|
|
|
private void Update()
|
|
|
{
|
|
|
- targetPos =
|
|
|
- new Vector3(PlayersInput.instance[nowPlayer].transform.position.x + offsetX, altitude + offsetY, 0);
|
|
|
- Goto(targetPos);
|
|
|
- if (Vector3.Distance(targetPos, transform.position) < 1)
|
|
|
+ OnState();
|
|
|
+ }
|
|
|
+ void OnState()
|
|
|
+ {
|
|
|
+
|
|
|
+ switch (state)
|
|
|
{
|
|
|
-
|
|
|
- offsetY = Random.Range(-randomRageY, randomRageY);
|
|
|
- offsetX = Random.Range(-randomRageX, randomRageX);
|
|
|
- nowNumber++;
|
|
|
- if (nowNumber > stopsNumber)
|
|
|
- {
|
|
|
- nowNumber = 0;
|
|
|
- nowPlayer = 1 - nowPlayer;
|
|
|
- }
|
|
|
+ case InvisibleState.Normal:
|
|
|
+ if (hp != enemy.hp)
|
|
|
+ {
|
|
|
+ posx = transform.position.x;
|
|
|
+ state = InvisibleState.Hurt;
|
|
|
+ }
|
|
|
+ posx = Mathf.Min(PlayersInput.instance[0].transform.position.x,
|
|
|
+ PlayersInput.instance[1].transform.position.x);
|
|
|
+
|
|
|
+
|
|
|
+ targetPos = new Vector3(posx + offsetX,altitude + offsetY, 0);
|
|
|
+ Goto(targetPos,moveSpeed);
|
|
|
+ if (Vector3.Distance(targetPos, transform.position) < 1)
|
|
|
+ {
|
|
|
+
|
|
|
+ offsetY = Random.Range(-randomRageY, randomRageY);
|
|
|
+ offsetX = Random.Range(-randomRageX, randomRageX);
|
|
|
+ nowNumber++;
|
|
|
+ if (nowNumber > stopsNumber)
|
|
|
+ {
|
|
|
+ nowNumber = 0;
|
|
|
+ nowPlayer = 1 - nowPlayer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case InvisibleState.Hurt:
|
|
|
+ targetPos = new Vector3(posx + offsetX - back,
|
|
|
+ altitude + offsetY, 0);
|
|
|
+ Goto(targetPos, moveSpeed);
|
|
|
+ if (Vector3.Distance(targetPos, transform.position) < 1)
|
|
|
+ {
|
|
|
+
|
|
|
+ offsetY = Random.Range(-randomRageY, randomRageY);
|
|
|
+ offsetX = Random.Range(-randomRageX, randomRageX);
|
|
|
+ hp = enemy.hp;
|
|
|
+ state = InvisibleState.Normal;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
- public void Goto(Vector3 pos)
|
|
|
+ public void Goto(Vector3 pos,float speed)
|
|
|
{
|
|
|
Vector3 target = (pos - transform.position).normalized;
|
|
|
- rb.velocity = target * moveSpeed;
|
|
|
+ rb.velocity = target * speed;
|
|
|
}
|
|
|
}
|