Unityなどでゲームを作っている時、必ずカメラを配置すると思います。
アクションゲームなどではプレイヤーが動いた分だけカメラの表示範囲を変更したいですよね。
そのような時は、プレイヤーにあわせてカメラを追従させましょう。
はじめに
Unityではカメラ内に映っているオブジェクトのみを画面に表示するのですが、必ずしもすべてのオブジェクトを画面内に表示するのは難しいです。
特にアクションゲームなどでは、プレイヤーが動くので実際に配置したカメラの範囲より大きなステージになると思います。
そこでUnityカメラをプレイヤーオブジェクトと同じ分だけ動かす方法と、カメラを動かす時の注意点を紹介します。
コードを書いてみよう
では早速「プレイヤーとカメラを一緒に動かす」コードを書いてみましょう。
新しいスクリプトを作成してください。
using UnityEngine;
using System.Collections;
public class Move : MonoBehaviour {
GameObject Player;
GameObject mainCamera;
// Use this for initialization
void Start () {
Player = GameObject.Find ("Player");
mainCamera = GameObject.Find ("Main Camera");
}
// Update is called once per frame
void Update () {
mainCamera.transform.position = new Vector3 (Player.transform.position.x, Player.transform.position.y, Player.transform.position.z - 10);
}
}
たったこれだけです。
簡単ですね。
ちなみにプレイヤーを動かしているコードは以下のようになっています。
using UnityEngine;
using System.Collections;
public class Run : MonoBehaviour {
GameObject Player;
int horizon;
int vertical;
// Use this for initialization
void Start () {
Player = GameObject.Find ("Player");
}
// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.RightArrow)) {
horizon = 10;
Player.GetComponent ().velocity = new Vector3(horizon, Player.GetComponent().velocity.y, 0);
} else if (Input.GetKey (KeyCode.LeftArrow)) {
horizon = 10;
Player.GetComponent ().velocity = new Vector3(-horizon, Player.GetComponent().velocity.y, 0);
}
if (Input.GetButtonDown ("Jump")) {
vertical = 100;
Player.GetComponent ().velocity = new Vector3 (Player.GetComponent ().velocity.x, vertical, 0);
}
}
}
とても簡易的なコードなので、他にも動きを改善する方法はあります。
例えば「カメラの移動範囲を制限する」などですね。
Unity オブジェクトの移動範囲を制限するMathf.Clampの使い方 - クリアメモリ
これを使えば、プレイヤーがステージの端に行った時はカメラの移動を抑えるなどという使い方ができます。
ぜひ試してみてください。
まとめ
今回の方法を使えば、簡単にプレイヤーにあわせてカメラを移動させることができるようになります。
そうすることで、無理してカメラ内にステージを作らなくてもよくなります。
カメラが移動してくれるので、どれだけ大きなステージを作成したとしてもカメラに映らないなどということを避けることができますね。
【Unity】iTweenで簡単にオブジェクトを動かす使い方 - クリアメモリ
ぜひ使ってみてください。
ではまた。