0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-07-16

第一形態の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;
    }

スクリーンショット (15).png

マスパを発射。マスパは細い状態で下に伸びていき、画面の少し外に着いたら伸びるのが止まります。
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");
        }
    }

スクリーンショット (33).png

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?