2014. 4. 8. 17:00

케릭터를 기준으로 화면이 돌아가는 것은 쉽게 볼 수 있는 연출입니다.

그런데 '유니티는 왜이렇게 자료가 없지?'라는 생각을 했는데...제가 단어 선택을 잘 못한것 같네요 ㅎㅎㅎ

 

 

1. 'transform.Rotate'와 'transform.RotateAround'의 차이

'transform.Rotate'는 객체를 자기중심으로 제자리에서 회전시키는 것입니다.

'transform.RotateAround'는 지정된 좌표를 중심으로 회전 시키는 것입니다.

(참고 : 유니티 스크립트 레퍼런스 - Transform.Rotate, Transform.RotateAround)

 

그래서 'transform.RotateAround'의 경우 매개변수로 전달되는 앵글만큼 오브젝트가 지정된 좌표를 기준으로 회전합니다.

 

 

2. 코드 작성 해보기

이제 코드를 확인해 봅시다.

 

 

2-1. 테스트용 화면 만들기

일단 큐브를 하나 추가하고 카메라가 회전하면 알수 있도록 '스카이 박스(Skybox)'도 지정 합니다.

 

 

카메라와 광원도 추가 합니다.

 

 

2-2. 테스트용 인터페이스 만들기

GUI추가를 위해 'claGUI.cs'스크립을 다음과 같이 만들고 메인 카메라에 'claGUI'를 추가 합니다.

 

using UnityEngine;
using System.Collections;

public class claGUI : MonoBehaviour 
{
	private Rect m_rectScreen;
	private Rect m_rectBtn
		= new Rect (5, 5, 30, 30);
	
	private claCamera m_insCamera;
	
	void Start()
	{
		GameObject goCamera = GameObject.Find("Main Camera");
		m_insCamera = goCamera.GetComponent<claCamera>();
	}
	
	void OnGUI()
	{
		m_rectScreen = new Rect(0f
		                        , 0f
		                        , Screen.width
		                        , Screen.height);
		
		
		//레프트 버튼.
		if (GUI.Button(new Rect(m_rectBtn.x
		                        , (Screen.height / 2) - (m_rectBtn.y / 2)
		                        , 30
		                        , 30)
		               , "◀"))
		{
			m_insCamera.ClickButton(1);
		}
		//업버튼.
		if (GUI.Button(new Rect(Screen.width / 2
		                        , 0
		                        , 30
		                        , 30)
		               , "▲"))
		{
			m_insCamera.ClickButton(2);
		}
		//라이트버튼.
		if (GUI.Button(new Rect(Screen.width - m_rectBtn.xMax
		                        , (Screen.height / 2) - (m_rectBtn.y / 2)
		                        , 30
		                        , 30)
		               , "▶"))
		{
			m_insCamera.ClickButton(3);
		}
		//다운버튼.
		if (GUI.Button(new Rect((Screen.width / 2)
		                        , Screen.height - 30
		                        , 30
		                        , 30)
		               , "▼"))
		{
			m_insCamera.ClickButton(4);
		}
		
		
	}
}

 

 

 

2-3. 카메라 회전 코드 작성

이제 'claCamera'를 아래와 같이 만들어 카메라에 추가 합니다.

 

using UnityEngine;
using System.Collections;

public class claCamera : MonoBehaviour 
{
	GameObject goTemp;


	void Start () 
	{
		goTemp = GameObject.Find ("Cube");
	}
	
	// Update is called once per frame
	void Update () 
	{
	
	}
	
	public void ClickButton(int n)
	{
		switch (n)
		{
		case 2:
			//transform.RotateAround (goTemp.transform.position, Vector3.one, 0.1f);
			transform.RotateAround(goTemp.transform.position, Vector3.left, 10f);
			break;
		case 3:
			transform.RotateAround(goTemp.transform.position, Vector3.up, 10f);
			break;
		case 4:
			transform.RotateAround(goTemp.transform.position, Vector3.right, 10f);
			break;
		case 1:
			transform.RotateAround(goTemp.transform.position, Vector3.down, 10f);
			break;
		}
	}
}

 

코드 라인끝

 

 

3. 테스트

이제 만든 코드를 확인해 봅시다.

 

 

 

 

마무리

유니티 래퍼런스를 보고 있으면 무슨 말인지 모를때가 많습니다.

이런 간단한 자료하나 찾는 데도 시간이 오래걸리는 이유기도 하죠;;;

어찌됐건 해결입니다 ㅎㅎㅎ

 

테스트에 사용한 프로젝트 다운 받기(클릭)