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

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

【Unity7】敵キャラクターのスクリプトを作成したい!【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)】