새 Unity 프로젝트 생성
Unity에서 로봇 시뮬레이션을 시작하기 위해서는 먼저 새로운 프로젝트를 생성해야 한다. 다음 단계를 따라 프로젝트를 설정하라.
- Unity Hub 실행
- Unity Hub를 실행한다. Unity Hub는 여러 Unity 버전을 관리하고 프로젝트를 쉽게 생성 및 관리할 수 있는 도구이다.
-
만약 Unity Hub가 설치되어 있지 않다면 Unity 공식 사이트에서 다운로드하여 설치하라.
-
새로운 프로젝트 생성
- Unity Hub의 메인 화면에서 '새로운 프로젝트' 버튼을 클릭한다.
-
프로젝트 템플릿 선택 화면이 나타난다. 로봇 시뮬레이션의 경우 '3D' 템플릿을 선택하는 것이 일반적이다. '3D' 템플릿은 3D 환경을 쉽게 구성할 수 있는 기본 설정을 제공한다.
-
프로젝트 이름 및 위치 설정
- 프로젝트 이름: 예를 들어,
RobotSimulation
과 같이 명확하고 직관적인 이름을 입력한다. -
저장 위치: 프로젝트 파일을 저장할 디렉토리를 선택한다. 예를 들어,
C:\UnityProjects\RobotSimulation
과 같이 지정할 수 있다. -
Unity 버전 선택
-
프로젝트에 사용할 Unity 버전을 선택한다. 최신 안정 버전을 사용하는 것이 권장된다. 만약 특정 버전이 필요하다면 해당 버전을 선택하라.
-
프로젝트 생성
- 모든 설정을 확인한 후 '생성' 버튼을 클릭하여 프로젝트 생성을 시작한다.
- Unity가 프로젝트를 초기화하고 필요한 파일들을 생성한다. 이 과정은 몇 분이 소요될 수 있다.
프로젝트 폴더 구조 설정
효율적인 프로젝트 관리를 위해 적절한 폴더 구조를 설정하는 것이 중요하다. 명확한 폴더 구조는 팀 협업 시 혼란을 줄이고, 필요한 자원을 빠르게 찾을 수 있도록 도와준다. 아래는 추천하는 기본 폴더 구조이다.
Assets/
├── Animations/
├── Materials/
├── Models/
├── Prefabs/
├── Scenes/
├── Scripts/
├── Textures/
└── Plugins/
- Animations: 애니메이션 파일을 저장한다. 로봇의 움직임을 정의하는 애니메이션 클립을 여기에 보관한다.
- Materials: 머티리얼 파일을 저장한다. 로봇 모델에 적용할 머티리얼(색상, 텍스처 등)을 관리한다.
- Models: 3D 모델 파일을 저장한다. 로봇 및 환경의 3D 모델을 이 폴더에 배치한다.
- Prefabs: 프리팹 파일을 저장한다. 재사용 가능한 오브젝트를 프리팹으로 만들어 관리한다.
- Scenes: Unity 씬 파일을 저장한다. 각 시뮬레이션 환경을 별도의 씬으로 관리할 수 있다.
- Scripts: C# 스크립트 파일을 저장한다. 로봇의 동작, 센서 데이터 처리 등 로직을 이곳에 작성한다.
- Textures: 텍스처 이미지 파일을 저장한다. 3D 모델에 적용할 텍스처 이미지를 보관한다.
- Plugins: 외부 플러그인 및 패키지를 저장한다. 필요한 Unity Asset Store 패키지나 외부 라이브러리를 이곳에 추가한다.
초기 씬 설정
프로젝트의 초기 씬을 설정하여 기본 환경을 구축한다. 이는 로봇 시뮬레이션을 시작하기 위한 기본적인 환경을 마련하는 단계이다.
- 씬 파일 생성
Scenes
폴더 내에서 마우스 오른쪽 버튼을 클릭하고 'Create' > 'Scene'을 선택하여 새로운 씬 파일을 생성한다.-
씬 이름을
MainScene.unity
로 지정한다. 이는 기본 씬으로 사용될 것이다. -
씬 열기
- 생성한
MainScene
을 더블 클릭하여 씬을 엽니다. -
Unity 에디터의 Hierarchy 창에서 기본으로 제공되는 Main Camera와 Directional Light가 있는 것을 확인할 수 있다.
-
기본 오브젝트 배치
- 바닥 Plane 추가
- Hierarchy 창에서 마우스 오른쪽 버튼을 클릭하고 '3D Object' > 'Plane'을 선택하여 바닥을 추가한다.
- Plane의 위치를
y = 0
으로 설정하여 바닥이 중앙에 위치하도록 한다.
-
조명 설정
- 기존의 Directional Light를 선택하여 조명 설정을 조정한다.
- 필요에 따라 조명의 강도(intensity)를 변경하거나 방향을 조정하여 최적의 조명 환경을 만든다.
-
기본 로봇 모델 배치
Models
폴더에 로봇의 3D 모델 파일을 추가한다. 예를 들어,robot_model.fbx
파일을 임포트한다.- Hierarchy 창으로 드래그하여 로봇 모델을 배치한다.
- 로봇 모델의 위치를
y = 0.5
로 설정하여 바닥 위에 올바르게 위치하도록 한다.
// 예시 스크립트: 기본 조명 설정
using UnityEngine;
public class SetupScene : MonoBehaviour
{
void Start()
{
// Directional Light 추가
GameObject lightGameObject = new GameObject("Directional Light");
Light lightComp = lightGameObject.AddComponent<Light>();
lightComp.type = LightType.Directional;
lightComp.intensity = 1.0f;
}
}
기본 설정 확인
프로젝트가 올바르게 설정되었는지 확인하기 위해 몇 가지 기본 설정을 점검한다.
- 빌드 설정
- File > Build Settings로 이동하여 현재 플랫폼이 올바르게 설정되었는지 확인한다.
-
로봇 시뮬레이션의 경우 주로 PC 플랫폼을 사용하므로 PC, Mac & Linux Standalone이 선택되어 있는지 확인한다.
-
Quality Settings
- Edit > Project Settings > Quality로 이동하여 품질 설정을 확인한다.
-
시뮬레이션의 성능과 그래픽 품질 간의 균형을 맞추기 위해 적절한 품질 레벨을 선택한다.
-
Physics Settings
- Edit > Project Settings > Physics로 이동하여 물리 엔진 설정을 점검한다.
- 로봇의 움직임과 상호작용에 필요한 물리 설정(예: 중력, 충돌 레이어 등)을 조정한다.
패키지 및 에셋 임포트
로봇 시뮬레이션을 효과적으로 진행하기 위해서는 필요한 패키지와 에셋을 사전에 임포트하는 것이 중요하다. Unity는 다양한 기능을 확장할 수 있는 패키지 매니저를 제공하며, 이를 통해 필요한 도구와 라이브러리를 쉽게 추가할 수 있다.
- 패키지 매니저 열기
- Window > Package Manager로 이동하여 패키지 매니저 창을 엽니다.
-
최신 버전의 패키지를 사용하기 위해 'Packages: Unity Registry'를 선택한다.
-
필수 패키지 설치
- Cinemachine: 카메라 제어를 용이하게 해주는 패키지로, 로봇 시뮬레이션에서 다양한 카메라 뷰를 설정하는 데 유용하다.
- 검색창에 'Cinemachine'을 입력하고 설치 버튼을 클릭한다.
- ProBuilder: 3D 모델링을 Unity 내에서 직접 할 수 있게 해주는 도구로, 간단한 환경 요소를 빠르게 생성할 때 유용하다.
- 검색창에 'ProBuilder'를 입력하고 설치 버튼을 클릭한다.
-
Visual Scripting: 로봇의 동작을 스크립팅 없이도 시각적으로 제어할 수 있게 해주는 도구이다.
- 검색창에 'Visual Scripting'을 입력하고 설치 버튼을 클릭한다.
-
에셋 스토어 활용
- Unity Asset Store를 통해 추가적인 에셋을 다운로드할 수 있다.
- Window > Asset Store로 이동하여 필요한 에셋을 검색하고 프로젝트에 임포트한다.
- 예를 들어, 로봇 모델, 텍스처, 애니메이션 등 다양한 에셋을 활용할 수 있다.
버전 관리 설정
프로젝트가 커지면서 버전 관리는 필수적이다. Git과 같은 버전 관리 시스템을 통해 코드와 에셋의 변경 사항을 추적하고, 팀원 간의 협업을 원활하게 할 수 있다.
- .gitignore 파일 생성
- 프로젝트 루트 디렉토리에 .gitignore 파일을 생성하고, 다음과 같은 내용을 추가한다:
[Ll]ibrary/ [Tt]emp/ [Oo]bj/ [Bb]uild/ [Bb]uilds/ [Ll]ogs/ [Mm]emoryCaptures/ *.csproj *.unityproj *.sln *.suo *.tmp *.user *.userprefs *.pidb *.booproj
-
이는 Git이 불필요한 파일을 추적하지 않도록 한다.
-
Git 초기화 및 커밋
- 터미널 또는 명령 프롬프트에서 프로젝트 루트 디렉토리로 이동한 후, 다음 명령어를 실행한다:
bash git init git add . git commit -m "Initial commit: Project setup with basic configuration"
- 이후 GitHub, GitLab 등의 원격 저장소에 연결하여 원격으로 푸시할 수 있다.
프로젝트 설정 최적화
효율적인 개발을 위해 Unity의 프로젝트 설정을 최적화하는 것이 중요하다. 이는 성능 향상과 개발 편의성을 높이는 데 기여한다.
- 레이어 및 태그 설정
- 레이어(Layers): 로봇, 환경, 센서 등 다양한 오브젝트를 구분하기 위해 레이어를 설정한다.
- Edit > Project Settings > Tags and Layers로 이동한다.
- 예를 들어, 'Robot', 'Sensor', 'Environment' 등의 레이어를 추가한다.
-
태그(Tags): 특정 오브젝트를 식별하기 위한 태그를 설정한다.
- Tags and Layers 창에서 필요한 태그를 추가한다.
-
물리 설정 조정
- Edit > Project Settings > Physics로 이동하여 물리 엔진의 설정을 조정한다.
- Gravity: 로봇이 현실적인 움직임을 가지도록 중력 값을 설정한다.
-
Layer Collision Matrix: 서로 충돌할 필요가 없는 레이어 간의 충돌을 비활성화하여 성능을 최적화한다.
-
품질 설정 조정
- Edit > Project Settings > Quality로 이동하여 품질 설정을 조정한다.
- 시뮬레이션의 목적에 맞게 Realtime Global Illumination, Anti-Aliasing, Texture Quality 등을 설정한다.
- 각 플랫폼별로 다른 품질 설정을 적용할 수 있다.
스크립팅 환경 설정
로봇 시뮬레이션의 핵심은 로봇의 동작과 센서 데이터를 제어하는 스크립트이다. 따라서 스크립팅 환경을 적절히 설정하는 것이 중요하다.
- C# 스크립트 템플릿 설정
- Edit > Project Settings > Editor로 이동한다.
- C# Project Settings에서 External Script Editor를 선택한다. Visual Studio 또는 Visual Studio Code와 같은 외부 에디터를 설정할 수 있다.
-
Generate .csproj files for 옵션에서 필요한 항목을 선택하여 프로젝트 파일을 생성한다.
-
네임스페이스 및 코드 구조 정의
- 프로젝트의 코드가 체계적으로 관리되도록 네임스페이스를 정의한다.
csharp namespace RobotSimulation.Controllers { public class RobotController : MonoBehaviour { // 로봇 제어 코드 } }
-
각 기능별로 폴더를 구분하여 스크립트를 관리한다. 예를 들어, Controllers, Sensors, Utilities 등의 폴더를 생성한다.
-
기본 스크립트 템플릿 작성
-
Scripts 폴더 내에 기본적인 로봇 제어 스크립트를 작성한다. ```csharp using UnityEngine;
namespace RobotSimulation.Controllers { public class RobotController : MonoBehaviour { public float speed = 5.0f;
void Update() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); transform.Translate(movement * speed * Time.deltaTime, Space.World); } }
} ``` - 이 스크립트는 로봇이 키보드 입력에 따라 이동하도록 기본적인 제어를 제공한다.
입력 시스템 설정
로봇 시뮬레이션에서 사용자 입력을 효과적으로 처리하기 위해 Unity의 입력 시스템을 설정한다.
- 새 입력 시스템 설치
- Package Manager에서 'Input System' 패키지를 검색하고 설치한다.
-
설치 후 Unity가 재시작되면 새로운 입력 시스템을 활성화하겠다는 메시지가 나타난다. 'Yes'를 선택한다.
-
입력 액션 설정
- Assets > Scripts 폴더 내에 InputActions 파일을 생성한다.
-
Input Actions 창에서 로봇의 이동, 회전, 센서 데이터 수집 등에 필요한 액션을 정의한다.
- 예: Move, Rotate, CollectSensorData
-
스크립트와 입력 시스템 연동
-
입력 액션을 로봇 제어 스크립트와 연동하여 실시간으로 로봇을 제어할 수 있도록 한다. ```csharp using UnityEngine; using UnityEngine.InputSystem;
namespace RobotSimulation.Controllers { public class RobotController : MonoBehaviour { public float speed = 5.0f; private Vector2 movementInput;
public void OnMove(InputAction.CallbackContext context) { movementInput = context.ReadValue<Vector2>(); } void Update() { Vector3 movement = new Vector3(movementInput.x, 0.0f, movementInput.y); transform.Translate(movement * speed * Time.deltaTime, Space.World); } }
} ``` - Input Actions와 스크립트를 연결하여 사용자가 입력할 때마다 로봇이 움직이도록 설정한다.
초기 테스트 및 검증
모든 설정이 완료되면, 초기 테스트를 통해 프로젝트가 올바르게 구성되었는지 검증한다.
- 로봇 제어 테스트
- Hierarchy 창에서 로봇 오브젝트를 선택하고 RobotController 스크립트를 추가한다.
-
Play 버튼을 눌러 시뮬레이션을 실행하고, 키보드 입력에 따라 로봇이 움직이는지 확인한다.
-
충돌 및 물리 반응 확인
- 바닥 Plane 외에 추가적인 장애물을 배치하고, 로봇이 충돌 시 올바르게 반응하는지 테스트한다.
-
장애물로 3D Object > Cube를 추가하고, 적절한 위치에 배치한다.
-
카메라 및 조명 검토
- Cinemachine을 활용하여 다양한 카메라 뷰를 설정하고, 로봇의 움직임을 다양한 각도에서 관찰한다.
- 조명 설정이 적절한지 확인하고, 필요 시 조명의 강도나 방향을 조정한다.