第一形態のHPが0になったら、第二形態になります。
敵は、初回のみマスパ(マスタースパーク)を出す前に右上か左上にランダムに移動します。
乱数で0か1を出して、0なら左上、1なら右上にしました。
Enemy.cs
int Dice = 0;
/*Vector3 F_S_Point;
Vector3 ZIKI;
Rigidbody2D rb2d;
[SerializeField] GameObject Spark_Point;*/
// Start is called before the first frame update
void Start()
{
rb2d = GetComponent<Rigidbody2D>();
Dice = UnityEngine.Random.Range(0, 2);
if (Dice == 0)
{
F_S_Point = new Vector3(-5, 4.3f, 0);
}
else if(Dice == 1)
{
F_S_Point = new Vector3(0, 4.3f, 0);
}
/*BackGround = GameObject.Find("BackGround");
HP_bar = GameObject.Find("HPCanvas").GetComponent<Canvas>();
GetVector3 = transform.position;
GetAudio = GetComponent<AudioSource>();
cc2d = GetComponent<CircleCollider2D>();
IsEnemyHP = GameObject.Find("IsEnemyHP");
StartCoroutine(StartMove());*/
}
その座標にスフィアのオブジェクトを生成、敵はスフィアに向かって動きます。
Enemy.cs
void MS_Move()
{
Instantiate(Spark_Point, F_S_Point, Quaternion.identity);
ZIKI = F_S_Point - transform.position;
transform.rotation = Quaternion.FromToRotation(Vector3.up, ZIKI);
rb2d.velocity = transform.up.normalized * 1f;
}
スフィアのコライダーに当たったら止まります。
Enemy.cs
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "P_Shot")
{
//GetAudio.volume = 0.25f;
//GetAudio.PlayOneShot(Damage);
P_Bullet = GameObject.Find("P_Bullet(Clone)");
if (HP > 0)
{
HP--;
}
else
{
S_HP -= 0.25f;
}
}
if(collision.gameObject.tag == "Spark_Point")
{
StartCoroutine(isFirst());
}
}
void isM_Spark()
{
if(Star_Stop && MS_Switch)
{
if (First_Spark)
{
MS_Now = true;
MS_Switch = false;
MS_Move();
}
}
}
IEnumerator isFirst()
{
rb2d.velocity = new Vector2(0, 0);
M_Spark_Point = new Vector3(transform.position.x, transform.position.y - 0.2f, transform.position.z);
Instantiate(M_Spark, M_Spark_Point, Quaternion.identity);
yield return null;
First_Spark = false;
}
マスパを発射。マスパは細い状態で下に伸びていき、画面の少し外に着いたら伸びるのが止まります。
localScaleのYを大きくするんですが、それだけだと上下に伸びてしまうので、同時にpositionのYを同じだけ下に動かして、下方向に伸びているように見せます。
M_Spark.cs
bool O_Freame = false;
IEnumerator Long()
{
while(!O_Freame)
{
transform.localScale += new Vector3(0, 0.0075f, 0);
transform.position += new Vector3(0, -0.0075f, 0);
yield return null;
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.tag == "E_B_DEATH")
{
O_Freame = true;
Debug.Log("STOP");
}
}
次は
・マスパが伸びるのが止まった時にマスパがだんだん太くなって、マスパの外側に、判定の無い薄い部分を作る
・二発目以降は、敵がX座標は自機に向かい、Y座標はランダム。マスパを自機狙いで発射
の予定です。