【Unity7】敵キャラクターのスクリプトを作成したい!【2Dローグライク10】
Unity5.0.0f4 Personal(2015年6月)
前回の続きです〜
今回は、Enemyに付けるスクリプトを作成していきます〜
Enemyの移動、Playerへの攻撃などの機能を実装します〜
【目標】敵キャラクターのスクリプトを作成する
2D Roguelike 10 of 14 : Enemy Script - YouTube
Enemyという名前のスクリプトをScriptsフォルダに作成し、中身を書いていきます〜以下ソースです〜
Startメソッド
まずはStartメソッドです〜override修飾子が付いているので、MovingObjectクラスのStartメソッドを継承しています〜
始めにAnimatorをキャッシュしておきます〜
次にタグが「Player」のオブジェクトのTransform情報を取得します〜
最後に継承したMovingObjectクラスのStartメソッドを、baseを使い呼び出しています〜
継承元はこちらの記事で作成しています〜
MoveEnemyメソッド
こちらのメソッドでEnemyが自動的にプレイヤーを目指して動く機能を実装しています〜AIですね〜
まずはxとyの位置を保存する変数xDir、yDirを作成しておきます〜
続いてプレイヤーの現在のposition.xからEnemyの現在のpositiona.xをマイナスし、でてきた位置情報を絶対値に変更します〜その値がEpsilon(0に限りなく近い数)よりも小さい時、つまり0の時にif文の中に入っていきます〜
position.x同士を引いた絶対値が0の時というのは、つまりEnemyの上か下にプレイヤーがいるということです〜
if文の中では、今度はプレイヤーのposition.yとEnemyのposition.yの大きさを比較し、プレイヤーのほうが大きければyDirに1を、Enemyのほうが大きければ-1を代入しています〜
プレイヤーがEnemyの上下にいない場合、else文の中に入ります〜プレイヤーのposition.xとEnemyのposition.xの大きさを比較し、プレイヤーのほうが大きい、つまりプレイヤーが右にいればxDirに1を、Enemyのほうが大きい、つまりプレイヤーが左にいれば-1を代入しています〜
これらの値を引数にして、AttemptMoveメソッドを呼び出しています〜AttemptMoveメソッドはジェネリックであるため、型引数「Player」を指定しています〜
AttemptMoveメソッド
AttemptMoveメソッドもMovingObjectクラスを継承しています〜また、ジェネリックとしてPlayer型をもらっています〜
まずはじめにskipMove変数がtrueである時、skipMoveをfalseにし、メソッドを終了しています〜
Completedにあるゲームを楽しんだ人は分かると思いますが、このゲームはプレイヤーが2回行動した後、Enemyが1回行動するという流れとなっています〜それを実現させるために、Enemyの行動を1回スキップしているというわけです〜
続いて継承したAttemptMoveを呼び出しています〜<T>にはPlayer型が入り、引数としてMoveEnemyメソッドで出したxDirとyDirを指定しています〜
これで2ターンに1度、プレイヤーに向けて動くという処理が実現しました〜
メソッドの最後でskipMoveをtrueにしましたので、次のターンはスキップされます〜
OnCantMoveメソッド
継承先のAttemptMoveメソッドにて、Enemyがプレイヤーに接触した時に呼び出されるメソッドです〜
まず最初にhitPlayer変数を使って、Playerクラスを取得しています〜
次にPlayerクラスのLoseFoodメソッドを呼び出しています〜引数にはダメージが指定されます〜
今回はここまでです〜
ありがとうございました〜
【Unity開発7】Unity公式チュートリアル2Dローグライクの導入【2Dローグライク1】
【Unity開発7】アニメーションを作りたい!【2Dローグライク2】
【Unity開発7】Floorやアイテムを作成したい!【2Dローグライク3】
【Unity開発7】床や敵キャラ、アイテム等を自動生成させたい!【2Dローグライク4】
【Unity開発7】BoardManagerを呼び出すGameManagerを作成する【2Dローグライク5】
【Unity開発7】キャラクターを動かすための抽象クラス作成【2Dローグライク6】
【Unity開発7】破壊可能な壁(Wall)を作成したい!【ローグライク7】
【Unity開発7】プレイヤーのアニメーターを設定したい!【ローグライク8】
【Unity開発7】プレイヤー用のスクリプトを設定したい!【ローグライク9】
【Unity開発7】敵キャラクターのスクリプトを作成したい!【2Dローグライク10】
【Unity開発7】敵キャラクターのアニメーターを設定したい!【2Dローグライク11】
【Unity開発7】uGUIでUIの表示とレベル機能を実装したい!【2Dローグライク12】
【Unity開発7】BGMと効果音を付ける【2Dローグライク13】
【Unity開発7】タッチパネルに対応させたい!【2Dローグライク14(Fin)】