Unityに関連する記事です

敵の設計 その1

 プレイヤーの場合と同じように、敵用のゲームオブジェクトをCubeにて作成し、プロトタイプを作成していきます。
Cubeを敵に見立ててプレイヤーの攻撃に対して判定を作成します。これらの動作に問題がなくなったら、敵のモデルと差し替えましょう。

 敵の目的、挙動として期待するものを考えていきます。
・プレイヤーと敵とは同じ位置には存在できない(壁のようにぶつかり、すり抜けられない)  <= ここで扱います。

・敵同士も同様(敵と敵はすり抜けられない)  <= ここで扱います。

・プレイヤーは敵に対して攻撃できる。  <= ここで扱います。
  .廛譽ぅ筺爾旅況發紡个靴董武器や蹴りなどが敵にぶつかった際にヒット判定を行う。ヒットした場合には敵のHPを減少させる。減少する値はプレイヤーの攻撃力とする。
  ▲劵奪犯縦蟷には一定の確率でクリティカルが発生する。その場合には、プレイヤーの攻撃力に対して倍率をかけた値をHPが減少させる。
   クリティカルの確率と攻撃力の倍率は、それぞれ設定できる。
  E┐HPが0以下になった場合、その敵はダウンし、消滅する。

・敵は地面の上を移動する。そのため、移動の速度があり、設定できる。

・敵は攻撃という行動を持ち、敵の攻撃に対して、プレイヤーはヒット判定を行う。
 ヒットした場合には、プレイヤーのHPを減少させる。減少する値は敵の攻撃力とする。
 敵とプレイヤーがぶつかっただけではヒット判定は行わない。
 敵が攻撃し、その武器がプレイヤーに当たった際に、ヒット判定を行う。
 
・敵の移動速度、攻撃力、HPは最小値と最大値が設定でき、敵が生成されるたびに、この範囲内でランダムな値を設定するようにする。
 これにより同じ敵でも個体差が表現できるようにする。
 索敵範囲は設定はできるがランダムな値は取らない。

・敵がプレイヤーに対して攻撃する場合のロジックを設計する。
  ‐錣帽況發垢襪里任呂覆ぁ
  ∈敵範囲がある。範囲は設定できる。この範囲はゲーム内では見えない。
  索敵範囲内にプレイヤーが入ったら、敵はプレイヤーを発見状態とする。
  と見したら、索敵範囲内でのみプレイヤーの方向に移動を開始し、一定の間隔で攻撃する。攻撃までの間隔は設定できる。
  ズ敵範囲外にプレイヤーが移動した場合には、そこで発見状態は終了し、移動をやめる。
  索敵範囲内にプレイヤーがいない場合には、その場で待機、あるいはウロウロ歩く、を一定の間隔で交互に行う。これらの各間隔は設定できる。

・敵のHPは敵の頭上に横ゲージ表示し、現在値がグラフィカルに伝えられるようにデザインする。ゲージは右端がHP最大、左端がHP最小とする。

 これを元に順番に設計し、実装のためのプログラムを考えていきましょう。

敵用のゲームオブジェクトの作成

 上記の設計を元に、新規のCubeを1つ作成して、名称をEnemyに変更します。また、新しくTagを1つ追加し、そちらの名称も[Enemy]にします。
追加したTagはそのままではまだセットされていませんので、もう一度ヒエラルキーでEnemyを選択して、TagをEnemyに設定しましょう。
 敵の挙動にも物理演算を利用したいので、CubeにRigidbodyコンポーネントを追加します。

・プレイヤーと敵とは同じ位置には存在できない(壁のようにぶつかり、すり抜けられない)

・敵同士も同様(敵と敵はすり抜けられない)

 この2つの実装については、CubeのゲームオブジェクトにBoxColliderがアタッチされていますので、こちらはすでに実装されている状態ですね。


 

敵用のクラスの作成

・プレイヤーは敵に対して攻撃できる。

 Playerのクラスには攻撃用のメソッドを用意してありますので、今度はヒットした判定の処理を設計しましょう。

  .廛譽ぅ筺爾旅況發紡个靴董武器や蹴りなどが敵にぶつかった際にヒット判定を行う。ヒットした場合には敵のHPを減少させる。減少する値はプレイヤーの攻撃力とする。
  ▲劵奪犯縦蟷には一定の確率でクリティカルが発生する。その場合には、プレイヤーの攻撃力に対して倍率をかけた値をHPが減少させる。
   クリティカルの確率と攻撃力の倍率は、それぞれ設定できる。
  E┐HPが0以下になった場合、その敵はダウンし、消滅する。

 まずは敵に、固定のHPを持たせてみます。(後々はランダムな値を取るようにします)
それから、プレイヤーの持つ武器と、敵とのヒットした当たり判定の取り方ですが、これはColision同士の接触の判定を使えばよいですね。
この場合、プレイヤー側のクラスに設定する方法と敵側のクラスに設定する方法が考えられます。

 今回は敵側に当たり判定を用意し、プレイヤーの持つゲームオブジェクトのうち、Weaponというタグを持つゲームオブジェクト(武器)とのみ当たり判定を取れるようにします。
こうすれば、プレイヤーと敵が接触しただけでは、当たり判定が発生しませんので、敵のHPが減少することはありません。

 Weaponのゲームオブジェクトと敵が接触した場合には、PlayerControllerの持つAttackPowerの分だけ、HPを減少させましょう。
そしてHPが0以下になったら、敵のゲームオブジェクトを破壊するようにします。

 まずは、ここまでの処理を実装することを考えます。上記の,鉢の実装ですね。

 敵用のコントローラークラスのスクリプトです。EnemyControllerクラスとします。

<= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。

▲劵奪犯縦蟷には一定の確率でクリティカルが発生する。

 ,鉢が組み込めたら、次はその処理の中に△寮澤廚鮃佑┐董⊇萢を組み込んでいきましょう。

 一定の確率というのは、どのように扱うべきかを考えます。
すでに学習している処理の中から実装をしてもよいですし、新しい方法を考えてもよいです。

 ヒット〜クリティカルまでの全体の流れを見ていくと、まずはColliderによる当たり判定があり、そこでWeaponタグのみを当たりと扱うようにしましたので
そのあとにクリティカルが発生したかどうかを判定する処理を追加していくようにすればよさそうですね。

 ここで考えておくことは、判定時に使用するクリティカルの発生確率、それからクリティカル時の攻撃力にかける倍率ですね。
どちらも変数で用意しておくことで、その後、値を変更して調整する作業が楽になります。

 これらの変数の値を、だれが管理するのかが大切な設計要素になります。

 例えば、敵用のクラスにこれらの変数を用意することになれば、敵ごとに発生確率やクリティカルの倍率を設定していくようになります。
キャラのクラスに変数を用意すれば、キャラごとに発生確率やクリティカルの倍率を設定していくようになります。
今回は武器にもクラスがありますから、そちらに用意すれば、武器ごとに発生確率やクリティカルの倍率を設定していくようになります。

 どれを採用してもよいと思いますが、一長一短が考えられます。ご自分の考えに即した内容で設計を確定し、実装をしましょう。
今回は敵のクラスにpublicな変数を用意し、そちらをクリティカルの発生確率と倍率を設定できるようにします。
新しい処理として、クリティカルの判定にはメソッドの戻り値を利用するように設計しています。

 それからクリティカル時の攻撃倍率ですが、こちらはFloat型の変数で用意をします。
Playerの攻撃力はInt型であるため、計算を行うと小数点の値が発生しますので、小数点の端数処理が必要になります。
今回は小数点はすべて切り捨てをする仕様とします。
そのためのMathf系メソッドと、それに伴う型変換の処理(キャスト)についても採用しています。

なお、今後は以下の仕様が実装予定としますので、よければそれも念頭に置いて、クリティカルの設計と実装を考えてみてください。

 ・武器のクラスに「打撃」「刺突」などの、武器の形状による属性を変数として持たせたいこと
 ・敵のクラスにも同じ分類の属性を変数として持たせて、その属性を「弱点」として扱いたいこと
 ・武器の属性と敵の属性が同じ場合には、「弱点」と判定するようにしたいこと
 ・「弱点」の場合には、特別な処理を行うこと。(クリティカルの確率とダメージの倍率が3倍になる、など)
 
敵用のコントローラークラスのスクリプトです。

<= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。


 ※ 例文として変数を多く作っていますが、これらを省略して書けるのであれば、適宜、省略しても構いません。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます