이번 장에서는 EndPoint 객체를 회전시키는 기능을 만들면서, 오브젝트의 회전과 시간 간격에 대한 내용을 정리할 것이다.
오브젝트를 회전시키려면 Unity에서 제공하는 회전 함수를 사용해야 한다. Transform
컴포넌트의 Rotate
메서드를 사용하면 특정 각도만큼 회전시킬 수 있다. 여기서는 EndPoint 객체를 회전시키는 예제를 살펴볼 것이다.
먼저, C# 스크립트를 생성하고 Rotator
라는 이름을 지정한다. 그리고 다음과 같이 작성한다:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotator : MonoBehaviour
{
public Transform myTransform; // Transform 컴포넌트 참조 변수
void Start()
{
// 시작 시 60도씩 회전
myTransform.Rotate(60, 60, 60);
}
void Update()
{
// 매 프레임마다의 로직은 여기에
}
}
여기서 myTransform
은 회전을 적용하려는 오브젝트의 Transform 컴포넌트를 참조하는 변수이다. Start
함수에서 Rotate
메서드를 호출하여 x, y, z 축에 대해 각각 60도 회전시킨다.
모든 오브젝트가 Transform 컴포넌트를 디폴트로 갖고 있으므로, 변수 선언과 할당 없이 소문자 transform
을 바로 사용하여 회전을 적용할 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotator : MonoBehaviour
{
void Start()
{
// 소문자 transform을 사용하여 60도씩 회전
transform.Rotate(60, 60, 60);
}
void Update()
{
}
}
소문자 transform
을 사용하면 해당 스크립트가 붙어 있는 오브젝트의 Transform 컴포넌트에 바로 접근할 수 있다. 이를 통해 회전, 위치 이동, 크기 조절 등의 작업을 수행할 수 있다.
게임에서는 종종 오브젝트를 계속 회전시켜야 하는 경우가 있다. 이를 위해 Update
함수 내에서 회전 로직을 구현하면 된다. 아래 예제에서는 매 프레임마다 오브젝트를 60도씩 회전시킨다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotator : MonoBehaviour
{
void Start()
{
}
void Update()
{
// 매 프레임마다 x, y, z축을 각각 60도씩 회전
transform.Rotate(60, 60, 60);
}
}
이러한 방식은 1초에 60도가 아닌, 1초에 3600번 돌게 되는 문제를 초래할 수 있다. 이 문제를 해결하기 위해서는 시간 간격을 고려해야 한다.
게임 개발에서 시간 간격은 중요한 역할을 한다. Unity의 Update
함수는 화면이 한 번 깜빡일 때마다 실행되는데, 이 깜빡임의 횟수는 컴퓨터의 성능에 따라 다르다. 예를 들어, 1초에 30번 또는 60번 깜빡일 수 있다.
이러한 프레임 속도의 차이는 오브젝트의 움직임에 영향을 미친다. 예를 들어, 오브젝트를 1초에 1m 움직이게 하고 싶다면, 30 프레임 컴퓨터에서는 매 프레임마다 ( frac{1}{30} )을 곱하고, 60 프레임 컴퓨터에서는 매 프레임마다 ( frac{1}{60} )을 곱해야 한다.
Unity는 이를 쉽게 처리하기 위해 Time.deltaTime
변수를 제공한다. 이 변수는 마지막 프레임을 완료하는 데 걸린 시간을 반환하므로, 특정 오브젝트가 1초에 3m 움직이게 하려면 3 * Time.deltaTime
을 사용하면 된다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotator : MonoBehaviour
{
void Start()
{
}
void Update()
{
// 시간 간격을 고려하여 x, y, z축을 각각 60도씩 회전
transform.Rotate(60 * Time.deltaTime, 60 * Time.deltaTime, 60 * Time.deltaTime);
}
}
이 방식을 사용하면 다양한 컴퓨터 사양에서도 오브젝트의 움직임이 일관되게 유지된다. 프레임 속도와 독립적으로 움직임을 제어할 수 있어, 게임의 품질을 높이는 데 기여한다.
이번 장에서는 오브젝트의 연속적인 회전을 다루었다. 회전을 적용하는 방법과 이를 매 프레임마다 연속적으로 적용하는 방법, 그리고 시간 간격을 고려하여 부드러운 움직임을 구현하는 방법을 배웠다.