読者です 読者をやめる 読者になる 読者になる

Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity7】敵キャラクターのスクリプトを作成したい!【2Dローグライク10】

Unity 2D ローグライク チュートリアル

いつもひよこのたまごをご利用下さいましてありがとうございます!
おかげ様でチュートリアル数も10ゲーム目となりました!
チュートリアル一覧は
こちら からどうぞ!


スポンサーリンク

Unity5.0.0f4 Personal(2015年6月)

f:id:hiyotama:20150519220636p:plain

 

前回の続きです〜

 

今回は、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)】