Unity에서 지구 자전 및 공전 구현하기

이 튜토리얼에서는 Unity 엔진을 사용하여 지구의 자전과 공전 효과를 구현하는 방법을 알아봅니다.

1. 프로젝트 설정

Unity Hub를 열고 New project를 클릭한 후, 3D Core 템플릿을 선택하여 새 프로젝트를 생성합니다.

2. 태양 및 지구 오브젝트 생성

  1. Hierarchy 창에서 마우스 오른쪽 버튼을 클릭하고 3D Object > Sphere를 선택하여 두 개의 구체 오브젝트를 생성합니다.
  2. 각 구체 오브젝트의 이름을 각각 SunEarth로 변경합니다.
  3. Sun 오브젝트를 선택하고 Inspector 창에서 Transform 컴포넌트의 Scale 값을 (12, 12, 12)로 조정합니다.
  4. Earth 오브젝트를 선택하고 Transform 컴포넌트의 Scale 값을 (4, 4, 4)로 조정합니다.

3. 오브젝트 텍스처 적용

  1. 인터넷에서 태양과 지구의 고해상도 전경(equirectangular) 이미지를 다운로드합니다.
  2. 다운로드한 이미지 파일들을 Unity의 Project 창에 있는 Assets 폴더로 드래그 앤 드롭합니다.
  3. Assets 폴더에서 마우스 오른쪽 버튼을 클릭하고 Create > Material을 선택하여 새 머티리얼을 생성하고 이름을 SunMaterial로 지정합니다.
  4. SunMaterial을 선택하고 Inspector 창에서 ShaderSkybox/Panoramic로 변경합니다.
  5. Tint Color를 노란색 또는 주황색 계열로 설정하고, Texture 필드에 다운로드한 태양 이미지를 할당합니다.
  6. 지구 이미지 파일을 Earth 오브젝트 위로 드래그하여 텍스처를 적용합니다.
  7. 생성한 SunMaterialSun 오브젝트 위로 드래그하여 텍스처를 적용합니다.

4. 스카이박스 설정

  1. Unity 메뉴에서 Assets > Import Package > Custom Package...를 선택합니다.
  2. 표시되는 파일 탐색기에서 Unity 표준 에셋(Standard Assets) 또는 유사한 스카이박스 관련 패키지를 찾아 선택하고 Open을 클릭합니다.
  3. Import Unity Package 창이 나타나면 Import를 클릭합니다. (참고: Unity 버전에 따라 기본 제공되는 스카이박스 에셋의 유무 및 임포트 방식이 다를 수 있습니다.)
  4. Hierarchy 창에서 기본적으로 생성된 Directional Light를 선택하고 삭제합니다.
  5. Unity 메뉴에서 Window > Rendering > Lighting을 선택하여 Lighting 창을 엽니다.
  6. Environment 탭에서 Skybox Material에 임포트한 스카이박스 머티리얼을 할당합니다.

5. 지구 기울기 설정

지구의 자전축 기울기(약 23.5도)를 구현하는 두 가지 방법이 있습니다.

방법 1: Inspector에서 직접 설정

Earth 오브젝트를 선택하고 Inspector 창의 Transform 컴포넌트에서 RotationX 값을 23.5로 설정합니다.

방법 2: 스크립트로 설정

아래 코드는 스크립트를 사용하여 지구의 기울기를 설정하는 예시입니다.

using UnityEngine;

public class EarthTilt : MonoBehaviour
{
    void Start()
    {
        // Quaternion.Euler를 사용하여 오일러 각도를 쿼터니언으로 변환하여 회전값 설정
        transform.rotation = Quaternion.Euler(23.5f, 0f, 0f);
    }
}

6. 조명 추가

  1. Sun 오브젝트를 선택하고 Inspector 창에서 Add Component > Light를 클릭합니다.
  2. 추가된 Light 컴포넌트에서 TypePoint로 변경합니다.
  3. Color를 주황색 계열로 설정하고, Intensity 값을 높여 광원의 밝기를 조절합니다.
  4. 필요에 따라 광원의 범위를 조절합니다.

7. 자전 및 공전 스크립트 작성

  1. Project 창의 Assets 폴더에서 마우스 오른쪽 버튼을 클릭하고 Create > C# Script를 선택한 후, 스크립트 이름을 CelestialBody로 지정합니다.
  2. 작성된 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);
        }
    }
}
  1. 작성한 CelestialBody 스크립트를 Earth 오브젝트에 드래그 앤 드롭하여 컴포넌트로 추가합니다.
  2. Earth 오브젝트를 선택하고 Inspector 창의 CelestialBody 컴포넌트에서 Sun Transform 필드에 Sun 오브젝트를 드래그하여 할당합니다.

8. 실행 및 결과 확인

Unity 편집기 상단의 Play 버튼을 클릭하여 게임을 실행하면, Game 창에서 지구의 자전과 공전 효과를 확인할 수 있습니다.

태그: Unity 3D Celestial Mechanics Scripting C#

7월 31일 21:00에 게시됨