見出し画像

[Unity]向かってくる敵の処理~ゲームリリースを目指して#3~

皆さんこんばんは
最近”みんなのフォトギャラリー”でおしゃれな写真を使っているこっぺいです。

さて前回はクリックした方向にキャラが向く処理を実装しました。
そして今回はタイトルにもある通り、敵がこちらに向かってくる処理を実装します!

処理の流れ

まず初めに処理の流れを簡単に説明します。

前回に使用したキャラの振り向きを用いてまず回転させます。
そして移動に関してですが、移動量が設定されているアニメーションを使用するので移動の処理はしません。
移動のスピードを変化させたいときは、アニメーションの速度を変えれば対応出来るのでそれらもアニメーションに任せます。

プレイヤーに向く

最初にコードを書いておきます。

var _PlayerPos = GameObject.Find("Player").transform.position;

// 敵からPlayerのベクトル
var _MoveVec = _PlayerPos - transform.position;
_MoveVec.Normalize();

// 回転実行
transform.rotation = Quaternion.Slerp(
           transform.rotation,
           Quaternion.LookRotation(_MoveVec),
           1.0f
);

・プレイヤーの位置を取得

まず目標となるプレイヤーの位置を取得します。
↓の部分
var _PlayerPos = GameObject.Find("Player").transform.position;
GameObject.Find()でヒエラルキーに存在するオブジェクトを検索します。
(今回の場合はPlayerというオブジェクトを検索)
そしてtransform.positionで位置を取得出来ます。

・ベクトルを算出

わからない人のためにベクトルを説明すると、方向の事です。
例えばですが人差し指で様々な方向を指せるかと思います。その指す方向を3次元の数値的に表したのがベクトルです。
もっと詳しく知りたい人は調べてください。

var _MoveVec = _PlayerPos - transform.position;

ベクトルの算出方法としてはプレイヤーの位置から、敵の位置を引いてやると敵からプレイヤーのベクトルを取得出来ます。

_MoveVec.Normalize()

この処理は正規化という処理を行っております。
正規化を行うとベクトルとして色々と扱いやすくなるのでしておきます。
詳しく説明すると長くなるので、気になる方はご自分で調べてください。

・回転実行

// 回転実行
transform.rotation = Quaternion.Slerp(
   transform.rotation,
   Quaternion.LookRotation(_MoveVec),
   1.0f
);

_MoveVecに向きたい方向が正しくなっていれば、これで回転してくれます。
1.0fというのは回転する速度で、1.0fだと一瞬で向きたい方向に向いてくれます。
逆に0.1fとかだとゆっくり振り向きます。

アニメーション

Unityの機能を使ってアニメーションを再生させます。

・Animator Controllerの作成

Assetsの中にAnimator Controllerを作成します。
名前の通りアニメーションをコントロールする物で、これを使ってアニメーションを再生させたり、他のアニメーションに変移させたりします。
アニメーションはただのデータなので、それを使用するためのものって頭に入れておくと大丈夫かと思います。

右クリック->作成->アニメーターコントローラー
で作成できます。
(英語版だと:右クリック->Create->Animator Controller のはず)

そして敵オブジェクトのアニメーターにコントローラーとい項目があるので、そこに作成したアニメーターコントローラーをドラッグ&ドロップします。

インスペクター

・アニメーション追加

先ほど作成したアニメーターコントローラーをダブルクリックすると下のような画面が開くかと思います。

画像1

そこに使用するアニメーションをドラッグ&ドロップします。
するとEntryから追加したアニメーションに矢印が向いている事を確認し、出来ていればOKです。

こんな感じ

画像2

・速度変化

現在のままでもアニメーションは実行されるのですが、今回はアニメーションの速度をスクリプトで変更できるようにします。

先ほどと同じようにアニメーターコントローラーを開きます。
そして左側にパラメーターがあるのでSpeedというbool型の変数を追加しておきます。

画像4

そして追加したアニメーションのインスペクターに速度の乗数の欄があるので、そこにチェックを入れます。
(ちゃんとSpeedになっているか確認)

スクリプト側では以下のようにするとSpeedの値を変化させる事ができ、それでアニメーションの速度を変化出来ます。

var Animator = GetComponentInChildren<Animator>();
Animator.SetFloat("Speed", 2.0f);

ダウンロード

こんな感じで動きます。

今回はここまでです。
さようなら~

この記事が気に入ったらサポートをしてみませんか?