東方Projectっぽいシューティング２マスタースパークの途中

第一形態のHPが0になったら、第二形態になります。


敵は、初回のみマスパ(マスタースパーク)を出す前に右上か左上にランダムに移動します。
乱数で0か1を出して、0なら左上、1なら右上にしました。
```c#: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());*/
    }
```
    
その座標にスフィアのオブジェクトを生成、敵はスフィアに向かって動きます。
```c#: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;
    }
```
スフィアのコライダーに当たったら止まります。
```c#: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;
    }
```

![スクリーンショット (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489977/fff5d2b9-f9c3-11c4-1a2b-00ed3bf8a268.png)



マスパを発射。マスパは細い状態で下に伸びていき、画面の少し外に着いたら伸びるのが止まります。
localScaleのYを大きくするんですが、それだけだと上下に伸びてしまうので、同時にpositionのYを同じだけ下に動かして、下方向に伸びているように見せます。


```c#: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");
        }
    }
```

![スクリーンショット (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3489977/7c2afb77-838e-f096-bab1-38fb9f25a206.png)


次は
・マスパが伸びるのが止まった時にマスパがだんだん太くなって、マスパの外側に、判定の無い薄い部分を作る
・二発目以降は、敵がX座標は自機に向かい、Y座標はランダム。マスパを自機狙いで発射
の予定です。