ゲーム制作勉強中!あこがれだったプログラマーに今からなろう!

昔、あこがれていたプログラマー。今からでも勉強してみようと思い立ち、チャレンジ開始! 勉強メモや、悪戦苦闘な日々の記録です。

サイドビューアクションゲームを作ろう(14):遠隔攻撃してくる敵

レベルアップもできる様なったので、罠をサクッと作成。

youtu.be

この辺りは特に悩む事もなく実装できる様になったのが嬉しい😄
ダメージをあたえるダメージトラップと、一撃死のデストラップを作成する。
とりあえず、現段階では動作はアニメーション機能に任せることにした。

次は遠隔攻撃してくる敵。
実はこれも、そんなに悩まずに実装できた。
基本の動きは他のEnemyと同じなので、他のEnemyのスクリプトをちょこちょこっと改造するだけで良い。
違うのは、遠隔攻撃の矢を生成してやるのと、生成時のEnemyの向きに応じて、矢の向きを変える事、そして、矢の方向に動かしてやること。

まず、アーチャーのスクリプト(例によって関係ない部分は省略)

   public void EnemyAttack()
    {
        moveDirection=MOVE_DIRECTION.STOP; //まずenemyの動きを止めてやる。
        anim.SetTrigger("Attack"); //enemyの攻撃アニメを再生。
        Attacking=false;
        return;
    }

    public void ShootAroow()
    {
        //矢を生成。
        GameObject shoot_arrow=Instantiate(arrow,arrowpoint.transform.position,Quaternion.identity);
 
        //矢の向きをアーチャーの向きに変えてやる。
        //Mashf.SignでアーチャーのlocalScale.xを+1/-1に変換して、
        //矢のlocalScale.x にかけることでアーチャーと矢が同じ向きになる。
        shoot_arrow.transform.localScale=new Vector3(1.5f*Mathf.Sign(transform.localScale.x),2,0);
        
        //更に、矢に作成しているSetArrowメソッドにも方向を引数で渡してやる。
        shoot_arrow.GetComponent<ArrowWeapon>().SetArrow(Mathf.Sign(transform.localScale.x));
    }

次は矢のスクリプト

using UnityEngine;

public class ArrowWeapon : MonoBehaviour
{
    int arrowspeed;
    float direction;
    float arrowtimer=0f;
    public void SetArrow(float dir)
    {
        arrowspeed=5;
        direction=dir; //引数で受け取った方向を、このメソッド内用の変数に格納
    }    

    private void FixedUpdate()
    {
        arrowtimer+=Time.deltaTime;

        if(arrowtimer<5f)
        {
            if(direction==1)//受け取った向きで矢を向きを変える。
            {
                transform.Translate (Vector3.right*arrowspeed*Time.deltaTime);
            }
            else
            {
                transform.Translate (Vector3.left*arrowspeed*Time.deltaTime);
            }
        }
        else
        {
            Destroy(gameObject);
        }
    }

    private void OnCollisionEnter2D(Collision2D other)
    {
         if (other.gameObject.tag=="Player")
        {   
            other.gameObject.GetComponent<PlayerManager>().Ondamage(20,this.transform.position);
            Destroy(gameObject);
        }
    }
}

アーチャーのアニメーションの設定はこんな感じ。

今、みたらShootArrowじゃなくShoot Aroowになってる😂
まぁ、いいか🤣

結果はこんな感じ。
youtu.be

あとは、ステージボスを作ろうかな〜

使用アセット
Pixel Fantasy Caves
Hero Knight - Pixel Art
Slime Character
Pixel Potions (with Animation)
Animated 2D Coins
Bandits - Pixel Art
Hero nad Opponents Animation
2D Death Traps - Free

使用画像
七三ゆきのアトリエ:https://nanamiyuki.com/