こんにちは!今日はUnityでプレイヤーを追跡するオブジェクトの作り方を解説します。ゲームを作っていると、敵キャラやアイテムがプレイヤーを追いかける動きを実装したい時がありますよね。それを簡単に実現する方法を紹介します。
プレイヤーオブジェクトの作成
- ヒエラルキー(Hierarchy)ウィンドウで右クリックして、「3D Object」→「Cube」を選びます。これがプレイヤーになります。
- インスペクター画面のAddComponentから「Rigidbody」を検索して追加します。
追跡オブジェクトの作成
- 同じく「Cube」で良いですが、区別しやすいように「Material」で色を変更することをお勧めします。これがプレイヤーを追いかけるオブジェクトです。
- 追跡オブジェクトにも「Rigidbody」コンポーネントを追加します。
追跡スクリプトの作成
スクリプトを作成する
- ヒエラルキーウィンドウで追跡オブジェクトを選択します。
- インスペクターウィンドウで「Add Component」ボタンを押し、「New Script」と入力して「Create and Add」ボタンを押します。スクリプトの名前は「ChasePlayer」にします。
- プロジェクト(Project)ウィンドウで「ChasePlayer」スクリプトをダブルクリックして、コードエディタを開き、以下のコードを入力します。
コード全体の説明
このスクリプトは、ChasePlayer
という名前のクラスを定義していて、プレイヤーの位置を取得し、それに向かってオブジェクトを動かします。スクリプトはUnityのMonoBehaviour
を継承しているので、Unityのゲームオブジェクトにアタッチすることができます。
各部分の説明
using UnityEngine;
これは、Unityの機能を使うためのおまじないみたいなものです。これを使うことで、Unityのいろいろな機能をスクリプトで使えるようになります。public class ChasePlayer : MonoBehaviour
ここではChasePlayer
という新しいクラスを作っています。このクラスはMonoBehaviour
を継承しているので、Unityのゲームオブジェクトにアタッチできます。public Transform player;
player
という名前の変数を作っています。Transform
は、オブジェクトの位置や回転、スケールを表すものです。この変数は公開されているので、Unityのインスペクターから設定できます。public float speed = 5.0f;
speed
という名前の変数を作っています。これはオブジェクトがプレイヤーを追いかける速さを決めるものです。初期値は5.0fに設定されています。void Update()
Update
メソッドは、毎フレーム呼ばれる特別なメソッドです。この中のコードは、1秒間に何度も実行されます。Vector3 direction = player.position - transform.position;
ここでは、プレイヤーの位置と自分の位置の差を計算して、プレイヤーへの方向を求めています。direction.Normalize();
この行では、方向ベクトルを正規化しています。正規化すると、ベクトルの長さが1になるので、方向だけを保持し、スピードを掛け算しても正しい移動ができます。transform.position += direction * speed * Time.deltaTime;
ここで、オブジェクトの位置を更新しています。direction
にspeed
とTime.deltaTime
を掛け算して、毎フレームごとに少しずつプレイヤーに近づくようにしています。Time.deltaTime
は、前のフレームから経過した時間を表し、これを使うことでフレームレートに関係なく一定の速さで動くようになります。
全体の動き
このスクリプトが実行されると、オブジェクトはプレイヤーの位置をチェックして、その方向に向かって移動します。Update
メソッドは毎フレーム呼ばれるので、オブジェクトはプレイヤーに追いつくまでずっと動き続けます。
using UnityEngine;
public class ChasePlayer : MonoBehaviour
{
public Transform player;
public float speed = 5.0f;
void Update()
{
Vector3 direction = player.position - transform.position;
direction.Normalize();
transform.position += direction * speed * Time.deltaTime;
}
}
- 追跡オブジェクトを選択した状態で、インスペクターウィンドウにある「Player」フィールドにプレイヤーオブジェクトをドラッグ&ドロップします。
![](https://cbagames.jp/wp-content/uploads/2024/02/2024-02-12_152458.png)
動作確認
最後に、シーンを再生して「Chaser」が「Player」を追いかけるか確認しましょう。プレイヤーのカプセルがスフィアに追いかけられるのが見えるはずです。
これで、プレイヤーを追跡するオブジェクトの作り方は完了です!簡単に実装できたでしょうか?ぜひ、自分のゲームに応用してみてくださいね。楽しんで学びましょう!
おすすめのアセット
「Car Chase And Drift Template」は、Unityでカーチェイスやドリフトシーンを作成するためのテンプレートです。初心者から上級者まで幅広く使えます。このテンプレートは、リアルな車の動きやドリフトアクションを簡単に再現できるのが特徴です。
このテンプレートには、すぐに使える車両モデルやコントローラー、エフェクトなどが含まれています。また、物理エンジンを利用してリアルな挙動を実現しており、簡単なカスタマイズも可能です。