【Unity5】オブジェクト鑑賞用簡易カメラ

今日は久しぶりにユニティねたをひとつ。

ユニティのゲームビューワ上で、対象のモデルをマウス操作で回転させたりズームイン/アウトさせるスクリプト。

ちょうど、ZBrushなんかでモデルをぐりぐり回す感じの動作。

ただし、スクリプトだけじゃだめで、下記のようにカメラを配置する。

ワールド原点に空のゲームオブジェクトを置く。名前をCameraPoleとしよう。

そのオブジェクト(CameraPole)の子供としてカメラを配置する。

カメラのローカル位置は、CameraPoleからZ軸に-10位の位置でよい。

そして、カメラに下のスクリプトを貼り付ける。

using UnityEngine;
using System.Collections;

public class MoveCameraScr : MonoBehaviour {

	public Vector3 lastMousePos;
	
	public Vector3 newMousePos;

	public float vSpeed = 0.005f;

	public float rotateSpeed = 0.5f;

	public float zoomSpeed = 10;

	public Camera camera;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
	
		if (Input.GetMouseButtonDown(0)) {
			lastMousePos = Input.mousePosition;
		}

		if (Input.GetMouseButton(0)) {
			newMousePos = Input.mousePosition;

			float hAmount = newMousePos.x - lastMousePos.x;
			transform.parent.Rotate(Vector3.up, hAmount * rotateSpeed);

			float vAmount = newMousePos.y - lastMousePos.y;
			Vector3 pos = transform.parent.position;
			pos.y -= vAmount * vSpeed;
			transform.parent.position = pos;

			lastMousePos = newMousePos;
		}

		float wheel = Input.GetAxis("Mouse ScrollWheel");
		if (wheel != 0) {
			float fieldOfView = camera.fieldOfView - wheel * zoomSpeed;
			if (fieldOfView < 3) {
				fieldOfView = 3;
			} else if (fieldOfView > 30) {
				fieldOfView = 30;
			}
			camera.fieldOfView = fieldOfView;
		}

		if (Input.GetKeyDown(KeyCode.Escape)) {
			Application.Quit();
		}
	}
}

原理は簡単で、親のオブジェクト(CameraPole)を回転させることで、半径10の同心円状をカメラが移動しているのと同じ効果を出している。

マウスの縦の移動は親のオブジェクト(CameraPole)を垂直方向に移動させている。

なので、ティルトではなく、視点の上下移動になる。

ズームはカメラ位置を移動させてもいいんだけれども、カメラの画角を狭めることで、文字通りズームさせている。

明日はいよいよスプラトゥーンの発売ですな。

俺はDL版なので、0時ごろにはフラゲできていると思う。楽しみ。

4年前

コメントを残す

メールアドレスが公開されることはありません。