[Unity] 사용자가 지정한 Hotkey로 카메라 뷰 전환하기

Filed under tutorials, unity | Comments Off

(Changing Scene Camera Orientation With Custom Hotkeys)

유니티 에디터에서는 기본적으로 Scene Gizmo를 이용해서 카메라 뷰를 전환한다. 복수의 창에 각각의 뷰를 지정해서 사용할 수도 있다. 그러나  레벨 작업 같이 전체 화면에서 빈번하게 뷰를 전환할 때, Scene Gizmo를 통한 조작은 번거롭고 불편한 것이 사실이다. 특히 Orthographic과 Perspective 를 오고갈 경우에는 더욱 번거롭다. 유니티가 제공하는 Hotkey를 찾아봤지만, 뷰포트 변환키는 없다.

hotkey_01

이때 유니티 Editor Class를 이용하면  3ds Max에서 T,F,R,P 등의 키로 뷰를 전환하듯, 사용자가 지정한 hotkey를 통해 뷰를 전환할 수 있다.

다음 스크립트를 Editor 폴더에 넣는다 [출처:http://forum.unity3d.com/threads/81673-Unity-Editor-Viewport-Navigation-Hotkeys].

using System.Collections;

using UnityEngine;

using UnityEditor;

///

/// Adds a 'Camera' menu containing various views to switch between in the current SceneView

///
public class CameraHotkey : MonoBehaviour

{

	///

	/// The rotation to restore when going back to perspective view. If we don't have anything,

	/// default to the 'Front' view. This avoids the problem of an invalid rotation locking out

	/// any further mouse rotation

	///
	static Quaternion sPerspectiveRotation = Quaternion.Euler(0, 0, 0);

	///

	/// Whether the camera should tween between views or snap directly to them

	///
	static bool sShouldTween = true;

	///

	/// When switching from a perspective view to an orthographic view, record the rotation so

	/// we can restore it later

	///
	static private void StorePerspective()

	{

		if (SceneView.lastActiveSceneView.orthographic == false)

		{

			sPerspectiveRotation = SceneView.lastActiveSceneView.rotation;

		}

	}

	///

	/// Apply an orthographic view to the scene views camera. This stores the previously active

	/// perspective rotation if required

	///
	///The new rotation for the orthographic camera

	static private void ApplyOrthoRotation(Quaternion newRotation)

	{

		StorePerspective();

		SceneView.lastActiveSceneView.orthographic = true;

		if (sShouldTween)

		{

			SceneView.lastActiveSceneView.LookAt(SceneView.lastActiveSceneView.pivot, newRotation);

		}

		else

		{

			SceneView.lastActiveSceneView.LookAtDirect(SceneView.lastActiveSceneView.pivot, newRotation);

		}

		SceneView.lastActiveSceneView.Repaint();

	}

	[MenuItem("Camera/Top #&1")]

	static void TopCamera()

	{

		ApplyOrthoRotation(Quaternion.Euler(90, 0, 0));

	}

	[MenuItem("Camera/Bottom #&2")]

	static void BottomCamera()

	{

		ApplyOrthoRotation(Quaternion.Euler(-90, 0, 0));

	}

	[MenuItem("Camera/Left #&3")]

	static void LeftCamera()

	{

		ApplyOrthoRotation(Quaternion.Euler(0, 90, 0));

	}

	[MenuItem("Camera/Right #&4")]

	static void RightCamera()

	{

		ApplyOrthoRotation(Quaternion.Euler(0, -90, 0));

	}

	[MenuItem("Camera/Front #&5")]

	static void FrontCamera()

	{

		ApplyOrthoRotation(Quaternion.Euler(0, 0, 0));

	}

	[MenuItem("Camera/Back #&6")]

	static void BackCamera()

	{

		ApplyOrthoRotation(Quaternion.Euler(0, 180, 0));

	}

	[MenuItem("Camera/Persp Camera #&7")]

	static void PerspCamera()

	{

		if (SceneView.lastActiveSceneView.camera.orthographic == true)

		{

			if (sShouldTween)

			{

				SceneView.lastActiveSceneView.LookAt(SceneView.lastActiveSceneView.pivot, sPerspectiveRotation);

			}

			else

			{

				SceneView.lastActiveSceneView.LookAtDirect(SceneView.lastActiveSceneView.pivot, sPerspectiveRotation);

			}

			SceneView.lastActiveSceneView.orthographic = false;

			SceneView.lastActiveSceneView.Repaint();

		}

	}

}

에디터 상단에 Camera 라는 메뉴가 생기고, 표시된 hotkey로 카메라 뷰를 전환할 수 있다.

hotkey_02

여기서 지정된 hotkey는 스크립트 상에서 [MenuItem("Camera/Top #&1")] (밑줄 친 부분) 가 지정한다. 스크립트 레퍼런스의 MenuItem에 관한 내용(http://docs.unity3d.com/Documentation/ScriptReference/MenuItem.html)을 찾아보면 hotkey에 사용할 키를 지정하는 방법을 찾을 수 있다.

 

To create a hotkey you can use the following special characters: % (ctrl on Windows, cmd on OS X), # (shift), & (alt), _ (no key modifiers). For example to create a menu with hotkey shift-alt-g use “MyMenu/Do Something #&g”. To create a menu with hotkey g and no key modifiers pressed use “MyMenu/Do Something _g”.

 

위 내용에 따라서 Alt+숫자키로 단축키를 전환할 경우,

[MenuItem("Camera/Top &1")]

다음과 같이 단축키가 바뀐다.

hotkey_03

Comments are closed.