2D 이미지를 사용하다 보면 Transform 관련 기능들을 많이 사용하게 되는데 Position이나 Scale에 대한 기능을 사용하기도 하지만 회전 기능도 많이 사용합니다. 유니티 엔진이 게임 엔진이다 보니 x, y, z 축으로 모두 회전이 가능합니다. 그래서 2D 이미지인데 x 축이나 y 축으로 회전시켜서, 다소 부자연스러울 수 있으나 공간감을 주는 효과를 만들기도 합니다. 기본적으로 2D 공간에서 2D 이미지를 회전 시키려면 게임 오브젝트의 z 축을 회전시키면 됩니다. z 축을 회전시키면 보통 사람들이 원하는 2D 공간에서의 회전하는 느낌을 줄 수 있으며 아이템이 돌아가며 공격하는 느낌, 전체 배경이 회전하는 느낌, 장애물이 회전해서 이동을 방해하는 느낌, 등 다양하게 구현할 수 있습니다. 이번 예제에서는 화면 크기의 나선형 2D 이미지를 일정한 속도로 무한히 회전시킵니다. 무한하게 회전시키는 방법은 유니티의 Transform 기능 중에 일정한 방향으로 회전시키는 Rotate를 반복문에 넣고 사용하여, 2D 이미지를 회전시킬 수 있습니다.
C# (UNITY 3D)
화면 전체 크기의 나선형 2D 이미지가 z 축으로 -2 속도로 돌아가는 예시입니다. Get 버튼을 누르면 현재 회전 값 z를 반환합니다.
using UnityEngine.UI;
Button, Text를 사용하기 위해 UnityEngine.UI 사용
나선형 이미지 ▼
각 변수에 맞는 컴포넌트 오브젝트 할당
public Transform rotation_target;
public Text text_rotation;
public Button button_get;
public Text text_get;
private float speed = -2;
private bool stop_rotate = false;
void Start()
{
Init_UI();
Init_Rotate();
}
private void Update()
{
if (stop_rotate)
return;
Update_Rotate();
}
private void Init_Rotate()
{
rotation_target.eulerAngles = Vector3.zero;
stop_rotate = false;
}
private void Init_UI()
{
button_get.onClick.RemoveAllListeners();
button_get.onClick.AddListener(Get_Euler);
}
private void Update_Rotate()
{
rotation_target.Rotate(Vector3.forward * speed);
text_rotation.text = ((int)rotation_target.eulerAngles.z).ToString();
}
private void Stop_Rotate()
{
stop_rotate = true;
}
public void Get_Euler()
{
string txt = string.Format("current eulerAngles z : {0}", (int)rotation_target.eulerAngles.z);
text_get.text = txt;
Debug.Log(txt);
}
변수(variable)
rotation_target(Transform) : 회전 시킬 2D 이미지
text_rotation(Text) : 현재 회전 값 업데이트로 표시
button_get(Button) : 현재 회전 값을 반환시킬 때 사용하는 버튼
text_get(Text) : 현재 회전 값
speed(float) : 회전 속도
stop_rotate(bool) : true 면 회전 일시 정지
함수(function)
Init_Rotate : 회전 관련 데이터 초기화
Init_UI : 버튼 초기화 및 기능 할당
Update_Rotate : 무한 회전 (반복문에 있어야 함)
Stop_Rotate : 회전 정지
Get_Euler : 현재 회전 값 반환
Transform / 2D Rotate / Vector3.forward / eulerAngles.z / 2D 오브젝트 회전 / 나선형
'Unity3D > C#' 카테고리의 다른 글
유니티 아날로그 시계 구현 (Quaternion.Euler, DateTime.Now) (0) | 2020.10.26 |
---|---|
유니티 디지털 시계 구현 (DateTime.Now / Time Format) (0) | 2020.10.25 |
유니티 아이템 / 스킬 쿨타임 UI 표시 in Script (0) | 2020.10.24 |
유니티 시간 기반 가짜 로딩바 구현 in Script (Time.time / fillAmount) (0) | 2020.10.23 |
Unity 체력바 fillAmount로 구현 in Script (2) | 2020.10.22 |