케릭터를 기준으로 화면이 돌아가는 것은 쉽게 볼 수 있는 연출입니다.
그런데 '유니티는 왜이렇게 자료가 없지?'라는 생각을 했는데...제가 단어 선택을 잘 못한것 같네요 ㅎㅎㅎ
'transform.Rotate'는 객체를 자기중심으로 제자리에서 회전시키는 것입니다.
'transform.RotateAround'는 지정된 좌표를 중심으로 회전 시키는 것입니다.
(참고 : 유니티 스크립트 레퍼런스 - Transform.Rotate, Transform.RotateAround)
그래서 'transform.RotateAround'의 경우 매개변수로 전달되는 앵글만큼 오브젝트가 지정된 좌표를 기준으로 회전합니다.
이제 코드를 확인해 봅시다.
일단 큐브를 하나 추가하고 카메라가 회전하면 알수 있도록 '스카이 박스(Skybox)'도 지정 합니다.
카메라와 광원도 추가 합니다.
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); } } }
이제 '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; } } }
코드 라인끝
이제 만든 코드를 확인해 봅시다.
유니티 래퍼런스를 보고 있으면 무슨 말인지 모를때가 많습니다.
이런 간단한 자료하나 찾는 데도 시간이 오래걸리는 이유기도 하죠;;;
어찌됐건 해결입니다 ㅎㅎㅎ