流星咲斗さんの【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