개요
본인은 파이썬에서 학습한 딥러닝 모델들을 유니티에서 돌려보는 작업을 목표로 Unity를 공부하고 있다. GPT-4o와 공식 문서를 이용하여 유니티 내에서 카메라를 다루는 예제를 작성해보려한다.
프로젝트 만들기
- 유니티 허브(Unity Hub) 창에서 좌측에 Projects 선택 후 우상단의 New project를 클릭하였다.
- GPT-4o는 카메라 다루는 예제를 작성하기 위해선 2D, 3D 상관없다고 해서 2D (Built-In Render Pipeline)을 선택하고 Project name, location을 설정.
- 좌하단의 Create project 버튼을 눌러 프로젝트를 생성하였다.
2D 프로젝트에서 카메라 화면 표시하기
씬 설정(Setting Scene)
- 기존 프로젝트를 만들고 나면 좌측
Hierarchy
에는Main Camera
만 있는 상황이다. Hierarchy
창에서 빈 공간을 우클릭하여UI > Canvas
를 클릭하여Canvas
오브젝트를 추가한다.Canvas
가 추가되면MainCamera
와 같은 레벨에Canvas
가 추가된 것을 확인할 수 있다.Canvas
를 클릭하면 우측에Inspector
창(세부 요소를 볼 수 있는)이 뜬다. 여기서Render Mode
항목이Screen Space - Overlay
로 되어있는지 확인한다.
- 방금 추가한
Canvas
를Hierarchy
창에서 선택 후 해당Canvas
를 마우스 우클릭하여UI > RawImage
를 선택한다.- Tree 구조 상
Canvas
하단으로RawImage
가 들어가게 된다. RawImage
는 카메라 영상을 표시하는데에 사용된다.
- Tree 구조 상
RawImage
를 클릭하고Inspector
창의 하단의Add Component
버튼을 눌러AspectRatioFitter
를 검색하여 추가한다.- 추가하면
Inspector
창 하단에 해당 요소가 나타나며Aspect Mode
를Fit In Parent
로 설정한다.
- 추가하면
스크립트 작성
UI 요소가 빌드되고 앱 실행 시 작동할 액션을 코드로 정의한다. 유니티는 주로 C#
언어로 작성된다. 본인은 대학생 시절 유니티를 전공과목으로 1과목 딱 해봤지만, 요즘엔 공식 문서를 보는 능력과 GPT에게 물어보는 능력이 있다면 적절한 스크립트를 알아낼 수 있다.
- 프로젝트의
Assets
폴더 내에Scritps
폴더를 생성(마우스 우클릭)하고CameraFeed.cs
라는 새 C# 스크립트를 작성한다. CameraFeed.cs
을 열고 아래 코드를 작성- 본인의 경우 Visual Studio Code가 설치되어 있어 바로 연동되어 열렸다.
using UnityEngine;
using UnityEngine.UI;
public class CameraFeed : MonoBehaviour
{
private WebCamTexture webCamTexture;
public RawImage rawImage;
public AspectRatioFitter aspectRatioFitter;
void Start()
{
// 연결된 카메라를 찾기
WebCamDevice[] devices = WebCamTexture.devices;
if (devices.Length > 0)
{
webCamTexture = new WebCamTexture(devices[0].name);
rawImage.texture = webCamTexture;
webCamTexture.Play();
}
}
void Update()
{
// 카메라 비율 조정
if (webCamTexture != null)
{
float aspectRatio = (float)webCamTexture.width / (float)webCamTexture.height;
aspectRatioFitter.aspectRatio = aspectRatio;
}
}
}
- 기본 클래스의 구조,
Start()
,Update()
메소드의 원형은 구축되어있고 내용만 채우면 된다.
스크립트 컴포넌트 추가 및 변수 연결
Canvas
를 선택하고Inspector
창에서Add Component
를 클릭하여CameraFeed
를 검색하여 추가한다.- 우리가 작성해준 C# 스크립트가 컴포넌트로 추가되는 것으로 보인다. 아래와 같이 컴포넌트가 추가되고 코드에 작성되어있는 변수들(
RawImage
,Aspect Ratio Fitter
)이 보인다.
- 우리가 작성해준 C# 스크립트가 컴포넌트로 추가되는 것으로 보인다. 아래와 같이 컴포넌트가 추가되고 코드에 작성되어있는 변수들(
Hierarchy
창의Canvas
아래에 있는RawImage
를 드래그 앤 드롭으로 끌고와Inspector
창의Camera Feed(Script)
안에 있는Raw Image
에 연결 시켜준다.- 이어서
RawImage
의AspectRatioFitter
를 동일하게Camera Feed(Script)
안에 있는Aspect Ratio Fitter
에 연결시킨다.- 본인은 여기서 처음에 해맸는데
Hierarchy
창의RawImage
를 마우스 우클릭하여Properties...
창을 띄우면 팝업으로Inspector
창을 볼 수 있다. 이러면 두 요소간 드래그 앤 드롭이 가능해진다.
- 본인은 여기서 처음에 해맸는데
- 각 요소를 연결하면 아래와 같이 컴포넌트 항목에 변수들이 채워진 걸 볼 수 있다.
프로젝트 빌드
빌드는 빌드 설정을 열어서 한다. 본인은 지금 다루고 있는 Ubuntu 에서 바로 실행해보도록 Linux
환경 빌드를 해본다.
File
>Build Settings
로 이동Platform
목록에서Linux
를 선택하고Switch Platform
버튼을 클릭- 기본으로 선택되어 있다면 해당 버튼 대신
Build
로 떠있을 것이다. 그러면 클릭하지 말고 필요한 셋팅을 잡아준다.
- 기본으로 선택되어 있다면 해당 버튼 대신
부가 셋팅 설정
추가적인 셋팅은 Build Settings
창 하단의 Player Settings
버튼을 클릭하여 해당 창에서 실시한다.
- 기본 설정 확인
- Product Name: 프로젝트의 이름을 입력.
- Company Name: 회사 또는 개발자의 이름을 입력.
- Version: 버전을 설정. 예:
1.0.0
- Resolution and Presentation
- 기본 해상도 설정 및 풀스크린 모드를 지정한다.
- 본인의 경우
Fullscreen Mode
를Windowed
로 설정하고 아래의Resizable Window
를 체크하여 크기를 자유롭게 조정할 수 있도록 했다.
- Other Settings
- 해당 파트의 셋팅은 GPT-4o가 알려주는 내용대로 해보았다. 상세 내용은 다음과 같다.
(친절하게 존댓말로 차근차근 알려주시는 GPT 선생님) - Rendering:
- Color Space: Linear 또는 Gamma 중 하나를 선택합니다. 대부분의 경우 Linear를 권장합니다.
- Auto Graphics API for Linux: 기본적으로 활성화되어 있어야 합니다. 특정 API (예: OpenGL)만 사용하고자 할 경우 비활성화하고 API 목록을 설정할 수 있습니다.
- Configuration:
- Scripting Backend: Mono 또는 IL2CPP 중 하나를 선택합니다. 일반적으로 Mono를 사용하지만 성능 최적화를 위해 IL2CPP를 사용할 수도 있습니다.
- API Compatibility Level: 대부분의 경우 NET Standard 2.0을 사용합니다.
- Optimization:
- Managed Stripping Level: Low 또는 Medium으로 설정합니다. 더 높은 수준의 스트리핑은 빌드 크기를 줄이지만, 호환성에 영향을 줄 수 있습니다.
- 해당 파트의 셋팅은 GPT-4o가 알려주는 내용대로 해보았다. 상세 내용은 다음과 같다.
이 이후 Project Settings
창을 닫고 나와 빌드를 수행한다.
Build Settings
창의 상단Scenes In Build
에 내가 작업한 씬이 제대로 포함되어 있는지 확인한다.- 지금까지 한 설정에서 변경한 것이 없다면
Build
버튼을 클릭. - 빌드 파일 경로 및 파일명을 설정하면 빌드가 시작된다.
빌드 결과 확인
본인의 경우 설정한 경로에 Sample2DProject0_Linux_v1.0.0_240806_Data
, Sample2DProject0_Linux_v1.0.0_240806.x86_64
, UnityPlayer.so
과 같이 3개 혹은 Sample2DProject0_BurstDebugInformation_DoNotShip
어쩌고 파일까지해서 4개의 파일이 생성되었다. 해당 파일들의 역할을 GPT에게 물어보니 다음과 같이 말해준다.
- Sample2DProject0_Linux_v1.0.0_240806_Data 폴더
- 역할: 게임의 리소스와 데이터 파일들이 포함된 폴더입니다. 이 폴더에는 씬 데이터, 에셋, 스크립트, 셰이더, 텍스처 등이 포함되어 있습니다.
- 사용 방법: 이 폴더는 빌드된 실행 파일과 함께 있어야 하며, 실행 파일이 이 폴더를 참조하여 게임 데이터를 로드합니다.
- Sample2DProject0_Linux_v1.0.0_240806.x86_64 파일
- 역할: 빌드된 실행 파일입니다. 이 파일은 64비트 리눅스 운영 체제에서 실행될 수 있는 게임의 실행 가능한 바이너리 파일입니다.
- 사용 방법: 리눅스 터미널에서 이 파일을 실행하여 게임을 시작할 수 있습니다. 파일에 실행 권한을 부여한 후, 터미널에서 파일을 실행합니다.
- UnityPlayer.so 파일
- 역할: 유니티 플레이어 라이브러리 파일입니다. 이 파일은 게임 실행에 필요한 유니티 엔진의 동적 라이브러리입니다.
- 사용 방법: 실행 파일이 이 라이브러리를 참조하여 게임을 실행합니다. 이 파일도 실행 파일과 같은 디렉토리에 있어야 합니다.
- Sample2DProject0_BurstDebugInformation_DoNotShip 파일
이 파일은 유니티에서 Burst 컴파일러를 사용할 때 생성되는 디버그 정보 파일입니다. Burst 컴파일러는 유니티의 고성능 C# 잡 시스템을 위해 만들어졌으며, 코드를 네이티브 기계어로 컴파일하여 실행 속도를 크게 향상시킵니다.
- 역할 및 용도
- 디버그 정보 포함: 이 파일에는 Burst 컴파일러로 생성된 네이티브 코드를 디버그하는 데 필요한 정보가 포함되어 있습니다.
- 디버깅 목적으로만 사용: 이름에서도 알 수 있듯이, 이 파일은 디버깅 목적으로만 사용되며, 실제 배포 시에는 포함시키지 않아야 합니다.
- 배포 시 주의사항
- Do Not Ship: 이 파일은 최종 사용자에게 제공되는 빌드에 포함하지 않도록 주의해야 합니다. 파일명에 포함된 “DoNotShip”이라는 문구는 배포용 빌드에 이 파일을 포함시키지 말라는 의미입니다.
- 보안: 디버그 정보는 보안상의 이유로 배포 시 제거되어야 합니다. 디버그 정보가 포함된 파일이 사용자에게 제공될 경우, 잠재적으로 악의적인 사용자가 내부 구조를 분석하는 데 도움이 될 수 있습니다.
- 역할 및 용도
그래서 결론적으로 다른 파일들을 삭제하지 않은 채 실행 파일을 터미널에서 실행하였다.
$ ./Sample2DProject0_Linux_v1.0.0_240806.x86_64
프로그램이 실행되며 처음에 유니티 로고가 뜨고 다음과 같이 내 PC에 연결되어 있는 웹캠의 화면이 정상적으로 받아와지는 것을 확인하였다. (얼굴 스티커는 후처리)
댓글남기기