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

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

3Dアクションゲームを作ろう(4)

流星咲斗さんの【3Dアクションゲーム】作り方の続き〜

今日は、
#9 『プレイヤーのHPの実装』
#10 『敵をウロウロさせる』
#12 『地形を変える』
を学習。

#11 『ゲームオーバー表示を実装』については、
見た感じ、ほぼほぼサイドビューアクションゲームと同じ感じだったので、飛ばした😁

あとは、#13 『制限時間の実装』、#14 『スコアを作る』、#15 『敵をロックオン』、#16 『ゲームを 書き出す』
だけど、
#13、#14、#16は他のゲームと同じ感じっぽいので、飛ばすと思う😁

#15はぜひやりたいので、明日これをやって、あとは自己流に修正していく感じかな〜

といっても、実はもう相当、自己流に変えてある🤣

敵がぶつかってくるだけじゃ面白くなかったので、各種アニメを実装させて、敵の攻撃モーションでダメージを受けるようにしてある。

あとは、ウロウロするところも、色々と変えてみたりしている😆

    void Update()
    {
        Timer+=Time.deltaTime;
        if(death){return;} //Playerが死んでいたらメソッドを抜ける。

        if(Target)//ターゲットを見つけていれば、
        {
            transform.LookAt(Target.transform); //ターゲットに向く
            animator.SetBool("run",true); //走りアニメに変更
            animator.SetBool("walk",false); //他のアニメBoolを念の為解除
            animator.SetBool("search",false); //他のアニメBoolを念の為解除 

            //ターゲットとの距離が1.8位下なら
            if(Vector3.Distance(Target.transform.position,transform.position)<1.8f)
            {
                speed=Vector3.zero;//移動を停止して
                animator.SetTrigger("attack"); //攻撃アニメ開始
            }
            else
            {
                speed.z=EnemySpeed*2; //距離がまだ離れているなら、歩き速度の2倍で移動
                transform.Translate(speed);
            }
        }
        else //ターゲットを見つけていないなら、
        {
            if(Timer>StateTimerMax) //現在のステータスの時間がステータスの時間以上なら
            {
                float tplus=Random.Range(3,8); //ステート時間を再定義
                StateTimerMax=Timer+tplus; //現在の時間にtplusを足して、ステータスが変わる時間を設定
                int EnemyState=Random.Range(0,100); //ステートを決める乱数

                if(EnemyState<20) //乱数が20以下なら索敵(のように見えるだけw)
                {
                        speed=Vector3.zero;
                        animator.SetBool("walk",false);
                        animator.SetBool("run",false);
                        animator.SetBool("search",true); 
                }
                else if(EnemyState>21 && EnemyState<41) //21〜40なら、ただぼーっとしている
                {
                        speed=Vector3.zero;
                        animator.SetBool("walk",false);
                        animator.SetBool("run",false);
                        animator.SetBool("search",false); 
                }
                else //41〜99は向きを変えて歩く
                {
                        animator.SetBool("run",false);
                        animator.SetBool("search",false); 
                        animator.SetBool("walk",true);

                        var rot=transform.eulerAngles;

                        rot.y=Random.Range(0,360);  //向きの変更
                        transform.eulerAngles=rot;   

                        speed.z=EnemySpeed;
                }
            }
        }
        transform.Translate(speed);
    }

攻撃アニメの設定はこんな感じ。
youtu.be

敵の攻撃モーションに合わせて、攻撃用のSphere ColliderのEnableをtrueにして、前方にぶつけるように作ってみた。

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