상세 컨텐츠

본문 제목

언리얼 엔진에서 파이썬 사용하기

언리얼엔진

by zmo 2024. 10. 12. 22:55

본문

오늘은 그토록 하고싶었던 언리얼 엔진에서 파이썬을 사용하는 방법들에 대해서 간단하게 알아보자

들어가기에 앞서 언리얼에서 파이썬은 어떤 역할을 하는데 특화되어 있다고 볼수 있다 언리얼에서 파이썬 API는 에디터에서 실행할 수 있는 다양한 기능에 접근할 수 있도록 최적화 되어 있어서 언리얼에서 파이썬은 다음과 같은 우리가 직접 손으로 작업해야하는 것들을 자동화시켜주는 역할을 한다

 

- 레벨을 생성하거나 조작

- 애셋 관리를 자동화

- 사용자 인터페이스(UI) 맞춤화

 

그렇다면 어떤 방법으로 C++과 블루프린트를 주로 사용하는 이 언리얼 엔진에서 파이썬을 사용할수 있을까?

 

오늘 알아보기

1. 언리얼 엔진에서 파이썬 콘솔 사용하기

2. 파이썬 API 사용하기

3. 에디터 외부에서 파이썬 사용하기

4. 블루프린트와 파이썬 연동하기

5. 파이프라인 통합하기(다른 소프트웨어와의 연계 Maya, Blender등등)

 

 


 

파이썬 콘솔 사용하기

언리얼 엔진 내에서 파이썬 콘솔을 사용하는 방법은 다음과 같다

  1. 언리얼 에디터를 실행한다
  2. 상단 메뉴에서 '도구(Tools)' > '파이썬(Python)' > '파이썬 콘솔(Python Console)'을 선택한다
  3. 파이썬 콘솔 창이 열린다

콘솔 창이 열렸다면 우리가 좋아하는 그 명령어를 실행해보자 Hello world!로 해도 된다

print("Hello Unreal!")

 

 

파이썬 API 사용하기

 

주요 사용되는 API로는 다음과 같다

- Unreal.EditorAssetLibrary: 애셋 불러오기, 저장, 삭제 등을 할 수 있는 기능을 사용할수 있다

- Unreal.EditorUtilityLibrary: 에디터 내 다양한 유틸리티 기능에 접근 가능하다

- Unreal.Actor: 월드 안의 액터들을 제어하는 데 사용한다

 

다음 코드와 같이 사용할수 있다

import unreal

# 현재 월드 불러오기
world = unreal.EditorLevelLibrary.get_editor_world()

# 액터 생성하기
location = unreal.Vector(0, 0, 100)
rotation = unreal.Rotator(0, 0, 0)
unreal.EditorLevelLibrary.spawn_actor_from_class(unreal.StaticMeshActor, location, rotation)

이 코드는 Unreal.EditorAssetLibrary를 이용하여 특정 위치에 액터를 스폰하는 코드이다

 

 

에디터 외부에서 파이썬 사용하기

 

 

에디터 외부에서 파이썬을 사용하려면 다음과 같은 순서가 필요하다

  1. 먼저 언리얼 에디터에서 플러그인 메뉴로 들어가 파이썬 에디터 스크립트 플러그인(Python Editor Script Plugin)을 활성화해 주자
  2. 외부 IDE(PyCharm이나 VS Code등등)에서 언리얼 엔진 API에 접근하려면 언리얼 엔진이 제공하는 파이썬 인터프리터를 사용할수 있도록 설정해 주어야한다
    (일반적으로는 다음과 같은 경로에 위치해 있다고 한다UnrealEngine/Engine/Binaries/ThirdParty/Python3/Win64/python.exe)
  3. 잘 연결이 되었는지 외부 IDE에서 스크립트를 작성하고 실행해보자 (아래 코드는 언리얼 내에서 실행되어야 한다)
import unreal
unreal.log("This is from an external Python IDE!")

먼저 다음과 같은 코드를 작성하고 내가 이 코드를 실행하고자 하는 언리얼 프로젝트의 스크립트 폴더에 저장해주자

그리고 다음 명령을 언리얼 에디터 하단에 위치한 Output Log 창에 입력해주고 결과를 확인하자(자세한 위치나 프로젝트 이름, 스크립트 이름등은 자신의 것으로 입력하자)

py C:/YourProject/Content/Scripts/MyScript.py
 # 이 코드는 Plain Text이다

 

 

블루프린트와 파이썬 연동하기

 

블루 프린트와 파이썬을 연동하는 것은 간단하게 알아볼수 있다 블루프린터에서 파이썬 함수의 호출해서 사용하는 것으로

블루프린트에서 파이썬 스크립트를 실행하는 노드를 만들어 블루프린트가 작동할때 파이썬으로 계산을 처리할수 있다

 

 

파이프라인 통합하기(다른 소프트웨어와의 연계 Maya, Blender등등)

 

언리얼 엔진에서 물체를 모델링 하는 것이 아닌 블랜더에서 모델링하여 가져올수 있다 물론 수동으로 내보내고 가져오는 방법이 있지만 블랜더에서 자동으로 언리얼 엔진에 모델 파일을 추가할수 있도록 자동화 시켜보자

먼저 모델 파일을 불러오려면 블랜더 내에서 FBX파일로 내보낸 후 언리얼 프로젝트의 Content 폴더에 넣어줘야 하는 과정이 필요하다는 것을 알고 알아보도록 하자

 

다음 코드로 블렌더에서 선택된 오브젝트를 FBX로 내보내주자

import bpy
import os

# 내보낼 FBX 파일 경로를 설정한다
output_path = os.path.join("C:/YourProject/Exports", "blender_object.fbx")

# 선택된 오브젝트를 FBX로 내보낸다
bpy.ops.export_scene.fbx(filepath=output_path, use_selection=True)

print(f"FBX file exported to: {output_path}")

 

이제 언리얼 엔진에서 자동으로 FBX 파일을 가져와보자

import unreal

# FBX 파일 경로 지정하기
fbx_file_path = "C:/YourProject/Exports/blender_object.fbx"

# 임포트 작업을 위한 임포터 생성하기
fbx_import_options = unreal.FbxImportUI()
fbx_import_options.import_mesh = True  # 메쉬 임포트 활성화
fbx_import_options.import_textures = False  # 텍스처는 제외
fbx_import_options.import_materials = False  # 머티리얼 제외

# 임포트할 경로 설정하기 (경로를 잘 모르겠다면 아래 접은 글을 참고한다)
import_asset_path = "/Game/ImportedBlenderAssets"

# FBX 파일을 언리얼 엔진으로 임포트하기
unreal.AssetToolsHelpers.get_asset_tools().import_assets_auto(fbx_file_path)

unreal.log(f"FBX file imported from: {fbx_file_path}")

 

이제 블랜더에서 자동으로 언리얼 엔진에 모델 파일을 불러올수 있는 자동화 기능이 완성되었다

더보기

많은 파일들을 관리하다 보면 경로를 지정해주는 것도 어려울 때가 있다 특히 언리얼 엔진에서는 다른 방식으로 무언가를 지정해주는 방식이 많아서 잘 알아두어야 한다 

 

우리가 에디터 외부에서 파이썬 사용하기에서 사용했던 경로인 YourProject/Content/Scripts/MyScript.py 을 생각해보자 FBX파일은 Content 파일에 넣어야 한다고 했지만 여기서는 Content = Game 이라고 생각하면 된다 언리얼에서 /Game/ 경로는 실제 프로젝트의 Content 폴더와 대응하는 관계이다

고로 /Game/ImportedBlenderAssets

이런식의 경로로 작성하게 되는 것이다

 

 


 

 

이번 시간에는 언리얼 엔진에서 파이썬을 사용하는 방법에 대해서 알아보았다

사실 언리얼 엔진 프로젝트 전부를 파이썬으로 작성하고 AI기능을 넣는 것을 기대했는데 공부하면 공부할수록 이 고성능 언어인 C계열 언어에도 흥미가 가는것 같다 이번 시간에 공부한 바에 따르면 파이썬은 주로 반복적이고 귀찮은 작업. 즉 바닥의 타일을 깔아준다거나 외부에서 파일을 자동으로 추가해준다거나 하는 일들을 담당하는 것 같다

그렇다면 다음시간에는..? 공부하고자 했던 것에서는 조금 멀어질수 있지만 언리얼 엔진에서 AI를 사용하는 방법에 대해서 특별편으로 알아보고자 한다 (C++을 사용하여 AI 캐릭터의 움직임을 제어하는 것에 대해 알아보자)

관련글 더보기