이 튜토리얼에서는 Unity 엔진을 사용하여 지구의 자전과 공전 효과를 구현하는 방법을 알아봅니다.
1. 프로젝트 설정
Unity Hub를 열고 New project를 클릭한 후, 3D Core 템플릿을 선택하여 새 프로젝트를 생성합니다.
2. 태양 및 지구 오브젝트 생성
- Hierarchy 창에서 마우스 오른쪽 버튼을 클릭하고 3D Object > Sphere를 선택하여 두 개의 구체 오브젝트를 생성합니다.
- 각 구체 오브젝트의 이름을 각각 Sun과 Earth로 변경합니다.
- Sun 오브젝트를 선택하고 Inspector 창에서 Transform 컴포넌트의 Scale 값을 (12, 12, 12)로 조정합니다.
- Earth 오브젝트를 선택하고 Transform 컴포넌트의 Scale 값을 (4, 4, 4)로 조정합니다.
3. 오브젝트 텍스처 적용
- 인터넷에서 태양과 지구의 고해상도 전경(equirectangular) 이미지를 다운로드합니다.
- 다운로드한 이미지 파일들을 Unity의 Project 창에 있는 Assets 폴더로 드래그 앤 드롭합니다.
- Assets 폴더에서 마우스 오른쪽 버튼을 클릭하고 Create > Material을 선택하여 새 머티리얼을 생성하고 이름을 SunMaterial로 지정합니다.
- SunMaterial을 선택하고 Inspector 창에서 Shader를 Skybox/Panoramic로 변경합니다.
- Tint Color를 노란색 또는 주황색 계열로 설정하고, Texture 필드에 다운로드한 태양 이미지를 할당합니다.
- 지구 이미지 파일을 Earth 오브젝트 위로 드래그하여 텍스처를 적용합니다.
- 생성한 SunMaterial을 Sun 오브젝트 위로 드래그하여 텍스처를 적용합니다.
4. 스카이박스 설정
- Unity 메뉴에서 Assets > Import Package > Custom Package...를 선택합니다.
- 표시되는 파일 탐색기에서 Unity 표준 에셋(Standard Assets) 또는 유사한 스카이박스 관련 패키지를 찾아 선택하고 Open을 클릭합니다.
- Import Unity Package 창이 나타나면 Import를 클릭합니다. (참고: Unity 버전에 따라 기본 제공되는 스카이박스 에셋의 유무 및 임포트 방식이 다를 수 있습니다.)
- Hierarchy 창에서 기본적으로 생성된 Directional Light를 선택하고 삭제합니다.
- Unity 메뉴에서 Window > Rendering > Lighting을 선택하여 Lighting 창을 엽니다.
- Environment 탭에서 Skybox Material에 임포트한 스카이박스 머티리얼을 할당합니다.
5. 지구 기울기 설정
지구의 자전축 기울기(약 23.5도)를 구현하는 두 가지 방법이 있습니다.
방법 1: Inspector에서 직접 설정
Earth 오브젝트를 선택하고 Inspector 창의 Transform 컴포넌트에서 Rotation의 X 값을 23.5로 설정합니다.
방법 2: 스크립트로 설정
아래 코드는 스크립트를 사용하여 지구의 기울기를 설정하는 예시입니다.
using UnityEngine;
public class EarthTilt : MonoBehaviour
{
void Start()
{
// Quaternion.Euler를 사용하여 오일러 각도를 쿼터니언으로 변환하여 회전값 설정
transform.rotation = Quaternion.Euler(23.5f, 0f, 0f);
}
}
6. 조명 추가
- Sun 오브젝트를 선택하고 Inspector 창에서 Add Component > Light를 클릭합니다.
- 추가된 Light 컴포넌트에서 Type을 Point로 변경합니다.
- Color를 주황색 계열로 설정하고, Intensity 값을 높여 광원의 밝기를 조절합니다.
- 필요에 따라 광원의 범위를 조절합니다.
7. 자전 및 공전 스크립트 작성
- Project 창의 Assets 폴더에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택한 후, 스크립트 이름을 CelestialBody로 지정합니다.
- 작성된 CelestialBody 스크립트의 내용은 다음과 같습니다.
using UnityEngine;
public class CelestialBody : MonoBehaviour
{
public Transform sunTransform; // 태양 오브젝트의 Transform을 참조할 변수
public float rotationSpeed = 10f; // 지구의 자전 속도
public float revolutionSpeed = 1f; // 지구의 공전 속도
void Start()
{
// 지구가 태양 주위를 공전할 때 기울기를 유지하도록 시작 시 회전값 설정
transform.rotation = Quaternion.Euler(23.5f, 0f, 0f);
}
void Update()
{
// 지구 자전: Y축을 기준으로 시계 반대 방향으로 회전
transform.Rotate(Vector3.up, rotationSpeed * Time.deltaTime, Space.Self);
// 지구 공전: 태양의 위치를 중심으로 지구의 Y축 방향을 기준으로 회전
if (sunTransform != null)
{
transform.RotateAround(sunTransform.position, sunTransform.up, revolutionSpeed * Time.deltaTime);
}
}
}
- 작성한 CelestialBody 스크립트를 Earth 오브젝트에 드래그 앤 드롭하여 컴포넌트로 추가합니다.
- Earth 오브젝트를 선택하고 Inspector 창의 CelestialBody 컴포넌트에서 Sun Transform 필드에 Sun 오브젝트를 드래그하여 할당합니다.
8. 실행 및 결과 확인
Unity 편집기 상단의 Play 버튼을 클릭하여 게임을 실행하면, Game 창에서 지구의 자전과 공전 효과를 확인할 수 있습니다.