Unityでゲーム開発しているとマウスの動きにキャラクターが追従するようなインタラクティブな要素を入れたくなることがありますよね。
でも、どうやって作るの?と思う初心者の方、心配しないでください。このガイドでは、Unityでマウス座標にキャラクターを追従させる方法をわかりやすく解説します。
基本ステップ: Unityでマウス追従キャラクターを作成する方法
Unityでマウス追従キャラクターを作るのは、実はそんなに難しくありません。基本的なステップを押さえておけば、あなたのゲームにもすぐに取り入れることができますよ。
初心者向け: マウスカーソルにキャラクターを動かす基本的な手順
まずは、Unityのプロジェクトを開いて、新しいシーンを作成しましょう。キャラクターを追従させたいオブジェクトをシーンに追加します。試しにHierarchy画面で右クリックして3d > Cubeオブジェクトを作成しましょう。
これが、マウスの動きに反応するキャラクターになります。
次に、キャラクターにスクリプトを追加します。C#で書かれたスクリプトを使って、マウスの座標を取得しその座標にキャラクターを移動させます。
プロジェクトフォルダで右クリック > 新しいC#スクリプトを作成。名前はMouseMoveと名付けておきましょう。
基本的なコードは以下のようになります:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseMove : MonoBehaviour { Vector3 mousePos, pos; //マウスとゲームオブジェクトの座標データを格納 void Update() { //マウスの座標を取得する mousePos = Input.mousePosition; //スクリーン座標をワールド座標に変換する pos = Camera.main.ScreenToWorldPoint(mousePos); //ワールド座標をゲームオブジェクトの座標に設定する transform.position = pos; } } |
このコードでは、毎フレームごとにマウスの位置を取得し、キャラクターの位置をそのマウスの位置に更新します。キャラクターの位置とマウスの位置は座標系が異なるので座標変換を行っています。
以下がUnityの座標系の種類です。
座標名 | 意味 | 例 |
ワールド座標 | 3D空間上の座標 | ゲームオブジェクトの絶対位置 |
ローカル座標 | ある座標からの相対座標 | 親オブジェクトからの相対位置 |
スクリーン座標 | 画面上の座標 | マウスカーソルの位置 |
ではこのスクリプトを先ほど作成したCubeオブジェクトにアタッチしてみましょう。
さあ、再生してみてください。
あれ?マウスの動きにUnityで作ったゲームオブジェクトが追随してくれないですね・・・
ゲームオブジェクトがマウスについてきてくれない・・・解決法は?
実はこの原因はz座標にあります。
以下のスクリプトに修正してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseMove : MonoBehaviour { Vector3 mousePos, pos; //マウスとゲームオブジェクトの座標データを格納 void Update() { //マウスの座標を取得する mousePos = Input.mousePosition; //マウス位置を確認 Debug.Log(mousePos); //スクリーン座標をワールド座標に変換する pos = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, 10f)); //ワールド座標をゲームオブジェクトの座標に設定する transform.position = pos; } } |
これでちゃんとゲームオブジェクトがマウスに追随してくれます。
なぜ最初のUnity C#スクリプトではマウスに追随しなかったのか?
スクリプトを修正する前はCubeオブジェクトのz座標を指定していませんでしたが、修正後のスクリプトではCubeのz座標を明示的に10fとして与えました。
マウスの座標は2次元なので3次元目はこちらで指定してあげる必要があります。Debug.LogでConsole画面に出力している結果から、マウスのz座標は0であることがわかります。
Unityではz座標は奥行きを表現しています。今回は10fという値にしましたが、試しに0fや-10fにして再生してみてください。またCubeが見えなくなるはずです。
上の画像のようにMain Cameraが映し出している領域の外に出ている場合、ゲームオブジェクトはカメラから見えなくなります。Unityではゲームシーンに表示されるのはカメラから見える領域です。
MainCameraオブジェクトは初期設定では最初z=-10の位置から角度(0, 0, 0)の方向に向いてます。
最初のスクリプトではCubeオブジェクトのz座標を指定していなかったのでカメラが映し出す範囲にオブジェクトが入っていなかったわけです。
z座標を10fと指定することでCubeの位置がカメラの映し出す領域内に入り、マウスの(x, y)座標に追随する動きを映し出せるようになりました。
コメント