FPSゲームの作り方6 敵キャラクターの作成と攻撃処理の実装

Unity FPSゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
8種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

本講座では、UnityとC#を用いて3DFPSゲームを作成します。今回は第6回です。

第五回ではプレイヤーのエイム照準器による当たり判定処理や攻撃処理を作成し、敵にヒットさせることができるようになりました。

前回の記事 : 

3DFPSゲームの作り方5 当たり判定と照準器・エイムを実装しよう
本講座では、UnityとC#を用いて3DFPSゲームを作成していきます。今回はその第5回目です。 前回はFPSゲームの攻撃手段として弓矢を作成し、矢の生成、射出、再装填機能などを実装し、矢を飛ばせるようにしました。 前回の記事 ...

今回は弓矢が当たった敵の攻撃処理を作り込んでいきます。「敵のHPを減らして倒す」という基本的な処理を作成していきましょう。

また、敵の種類を増やせるように新しく「継承」というC#の機能を活用しながらゲームを開発していきましょう。

では始めます。


【Line登録者限定のプレゼントもあるよ!】

敵キャラクターの実装 攻撃が当たったらHPを減らして消滅

まずは前回作成した、簡易的な敵の処理をちゃんと作成し攻撃を当てたらダメージを受け、倒せるようにしていきましょう。

EnemyBase.csに敵キャラクターの基本となる処理を書いていこう

まずは「Assets/AppMain/Script」に「EnemyBase」という名前で新しくスクリプトを作成します。

また、この処理の追加に伴って「Arrow.cs」の処理を変更していきます。まずは「EnemyBase」の処理を見ていきましょう。

 

上から順に見ていきます。

まず追加している変数です。「maxHp」はHPの最大値を「SerializeField」を付けてInspectorから設定できるようにしています。

次に「hp」は現在のHPを表します(int型)。「canHit」は攻撃によるダメージを受けられるかどうかの状態を表すフラグです。

続いて「Start」関数内は「Init()」という処理を実行しているのみです。「Update」は何も追加していません。

では「Init」関数です。処理は「hp = maxHp」のみで初期化処理として現在のHPに最大HPを代入しています。

次の関数を抜き出します。

これは今までも出てきました、コライダーのエンター処理にInspectorから設定するための関数です。そのため引数は「Collision」型の「col」を用意します。

処理を見ていきましょう。最初はif文「if( col.gameObject.tag == “Arrow” && canHit == true )」で最初の条件はこれもここまでで見たように「コライダーのタグが”Arrow”」の時です、かつ「canHit」のフラグが「true」の時になります。

最初に「arrow」という変数にコライダーのゲームオブジェクトから「Arrow」を取得して保管します。

そして取得した「arrow」の「OnEnemyHit()」関数を実行します。この関数はこれから作成していくので、この段階ではエラーになります。関数に「public」を付けておくとこのように他のクラスから関数の実行ができるようになります。

次の処理「hp -= arrow.Attack」は現在のHPの「hp」から「arrow.Attack」を引いています。この「arrow.Attack」は「arrow」の「Attack」という「public」の変数です。これも後ほど「Arrow」クラスに追加します。この段階ではエラーになります。

A -= B   <=>  A = A – B

続いて「if( hp <= 0 )」つまり現在のHPが「0」以下の場合に「OnDead()」関数を実行します。そうでない時は(ログは飛ばして)「HitWait()」というコルーチンを実行します。

「OnDead()」関数は「Destroy( gameObject )」で自身のゲームオブジェクトを破棄してます。死亡時に自分で自分を破棄しているということです。

そしてコルーチンも抜き出して解説しておきましょう。

以前も出てきたコルーチンは返り値が「IEnumerator」になり、最初に「canHit」を「false」にして攻撃が当たらないようにします。

「yield return new WaitForSeconds( 0.5f )」でこの場合「0.5秒」待機し、最後にまた「canHit」を「true」に戻します。

実行する際は「StartCoroutine」で実行することを忘れないようにしましょう。

Arrow.csの変更

では続いて「Arrow.cs」を変更していきます。 

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.stores.jp/)で講座閲覧権を取得してね。

Unity C#の継承を活用して別の敵を作成しよう

次に別の種類の敵を作成してみましょう。

敵キャラクターの配置

まずはHierarchyに新しく空オブジェクトを作成し「EnemyBat」という名前にします。

次にインポートしたアセットを追加していきます。「Assets/Level 1 Monster Pack/Prefabs/Bat」フォルダにある「Bat_Red」をドラック&ドロップして「EnemyBat」の子に追加します。

追加した子の「Bat_Red」のTransformを下記のように設定します。

 

ここから少し先ほどとは違うところにコンポーネントを付与していきます。

少し分かりにくいので注意してください、「SphereCollider」「ColliderCallReceiver」を「EnemyBat/Bas_Red/RIG/Bat1Control」に付与します。
なぜここにつけるのかというのは理由があり、今後第8回で詳しく解説しますが後に設定するアニメーションに関係しています。

今はまだアニメーションの設定をしていないので、「コライダーをつける位置が重要になる場合もある」ということを覚えておきましょう。

「Rigidbody」は一旦付与しないで大丈夫です。必要な時にはまた設定します。「SphereCollider」は体よりひと回り大きいくらいに設定しましょう。

新しい敵キャラクタースクリプトの作成

次にこの敵用のスクリプトを作成します。

「Assets/AppMain/Script」に新しくC#スクリプトを作成し「EnemyBat」という名前にします。

内容は「EnemyCrocodile」と全く同じなので解説は飛ばしますが、「EnemyBase」を継承しています。

ではこの「EnemyBat.cs」をHierarchyの「EnemyBat」に付与しましょう。(Colliderなどが付与されている「BatControl」ではなく親のオブジェクトです)

できたら、わかりやすいカメラの前あたりに「EnemyBat」を動かしておきましょう。コウモリなのでとりあえず空中のお好きなところに置いておきましょう。

最後に「BatControl」に付与していた「ColliderCallReceiver」の「Collision Enter Event」に「On Enemy Collider Enter」を登録します。やり方は「Enemy1」の時と同じです。

では、再生して「EnemyBat」にも矢を当ててみましょう。HPは初期値の「3」のままなので3発当てれば倒せる(消える)ようになりました。

新しい敵を作成するときは同じように、「EnemyBase」を継承したスクリプトを作成して設定していけば簡単に作成ができます。

その上で、敵それぞれの独自の処理はサブクラスの方に記載していきます。

では今回はここまでにして、次回は敵ごとに行動パターンなどを作成していきましょう。

次の記事 : 

FPSゲームの作り方7 Unityで障害物を避けて徘徊する敵の移動AIをNavmeshで作る
この記事はUnityとC#を用いてFPSゲームを作成する講座の第7回です。 前回は敵を作成し、矢を当ててHPを減らし倒せるようにしました。 前回の記事: 今回は前回作成した敵キャラクターが移動などの行動をとれるようにしてい...



Unity入門の森オリジナル本格ゲーム制作講座はこちら
8種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました