見出し画像

UnityアセットのSceneやTerrain鑑賞用に座標を見ながら空中カメラを自由に動かしたい


環境 Unity Editor 2019.4.11f1 / Win10

Unityアセットとかのデモシーンを気軽にカメラだけで自由自在に散策したい。ついでに座標もとれると個人的に都合がよく、さらにワープできるともっといい。

ということでその方法
コードは基本すべてコピペしてくるか、ちょっとカスタムさせてもらう

結果はこちら


全体の手順


1, Hierarchyウィンドウで右クリック->CreateEmptyで適当なオブジェクト例えばCameraRigを作成する。

2, CameraRigにCameraMover.csのスクリプトをアタッチする。(カメラの基本操作)※CameraMover.csについては後述

3, CameraRigにTeleport.csのスクリプトをアタッチする。(適当なボタンにワープ先の座標登録)※Teleport.csについては後述

4, 座標表示用UIを作成する(CameraRigオブジェクトのリアルタイム座標取得用)※UI作成詳細は後述

5, MainCameraをこのCameraRigオブジェクトの子オブジェクトにする。

6, 4で生成したUI(CanvasとついでにEventSystem)もCameraRigオブジェクトの子オブジェクトにする。


2,カメラの基本操作


https://qiita.com/Nekomasu/items/f195db36a2516e0dd460
こちらで公開されているCameraMover.csを弄らないでそのままinspectorウィンドウでAdd componentする。

基本操作は
WASD:前後左右の移動
QE:上昇・降下
右ドラッグ:カメラの回転
左ドラッグ:前後左右の移動
スペース:カメラ操作の有効・無効の切り替え
P:回転を実行時の状態に初期化する。


3,ワープ先(任意)の座標登録

https://squmarigames.com/2018/11/29/unity-beginner-vector3/
を参考にTeleport.cs は下記

=====Teleport.cs=====

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Teleport : MonoBehaviour {
   //ワープ先座標の指定
   public Vector3 default_pos = new Vector3(60f, 60f, 60f);
   // Use this for initialization
   void Start () {
       transform.position = default_pos;
	}
	
	// Update is called once per frame
	void Update () {
      //キーボードのY(任意)を押すと、default_posで設定したXYZ座標にワープする
      if (Input.GetKey(KeyCode.Y)) {
           transform.position = default_pos;
      }
   }
}


4,座標表示用UIを作成する

https://qiita.com/Nattouumai1075/items/43f4b0293df423588cfc
こちらで公開されているスクリプトをちょこっと改造。

Hierarchウィンドウで右クリック
UI->Textを選択

作成された
Canvas-Textに下記スクリプトdisp_res.csをアタッチする

Assetsウィンドウで右クリックCreate->C#Scriptで作成したものを下記に置き換える

=====disp_res.cs=====

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class disp_res : MonoBehaviour {
   //変数設定
   int i_X;
   int i_Y;
   int i_Z;
   //知りたい座標のCameraの設定 public変数なのでinspectorウィンドウのTargetから指定する
   public GameObject target;
   // Use this for initialization
   void Start () {
   }
   // Update is called once per frame
   void Update () {
       //それぞれに座標を挿入、intにキャストして小数点以下を切り捨て
       i_X = (int) target.transform.position.x;
       i_Y = (int) target.transform.position.y;
       i_Z = (int) target.transform.position.z;
       //テキストに表示
       this.GetComponent<Text> ().text = "X:" + i_X.ToString() + " Y:" + i_Y.ToString() + " Z:" + i_Z.ToString() + "\n";
   }
}


5,6の手順で出来たCameraRigオブジェクトをプレハブ化しておけば、各シーンのHierarchyにドロップするだけですぐ動かせる。
Assetsストアでダウンロードしてきたデモ用のSceneやTerrainをすぐに神の視点で探索可能になる。

いいなと思ったら応援しよう!

この記事が参加している募集