ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Unreal Engine] LuaMachine : Install & Hello world
    Unreal Engine 5._ 2023. 5. 19. 17:16

    Unreal Engine에서 Lua를 쓸 수 있게 하는 플러그인 중, LuaMachine을 소개하려 합니다.

    LuaMachine

    이번 글에서는 LuaMachine의 설치 및 간단한 스크립팅에 대해 살펴보도록 하겠습니다.

     


     

    1. 설치 (Unreal Marketplace)

     

    더보기

    LuaMachine을 설치할 수 있는 경로 중 하나는 Unreal Marketplace입니다.

    Unreal Marketplace : LuaMachine

    Marketplace에서 구매하면 LuaMachine 플러그인이 설치됩니다.

     

    2. 설치 (Compile)

     

    더보기

    Marketplace외에도, Github release 페이지에 소스코드가 업로드 되어 있습니다.

    LuaMachine Releases

    릴리즈 된 버전의 소스코드(압축 상태)를 다운로드 받습니다.

     

    압축 파일을 풀면 LuaMachine이라는 폴더에 플러그인이 있습니다.

    해당 폴더를 플러그인을 적용시킬 언리얼 프로젝트 폴더 내 [Plugins] 폴더로 이동시킵니다.

    만약 Plugins 폴더가 없을 경우, 폴더를 생성하셔서 넣으시면 됩니다.

    압축을 해제한 LuaMachine폴더를 Plugins 폴더에 배치한 후, 언리얼 프로젝트를 실행하면 플러그인이 설치됩니다.

    만약 LuaMachine관련 빌드가 필요하다는 알림이 나올 경우, OK를 눌러 빌드하시면 됩니다.

    성공적으로 플러그인이 적용되었을 경우, LuaMachine 플러그인을 확인할 수 있습니다.

     

    3. Hello world 스크립트

     

    더보기

    lua 스크립트 파일은 {파일명}.lua 의 형식을 가지고 있습니다.

    프로젝트의 [Content]폴더의 하위 폴더에 스크립트 파일을 작성하면 됩니다.

     

    우선, helloworld.lua라는 파일을 생성하여 아래와 같이 스크립트를 작성하도록 하겠습니다.

    return "Hello world! " .. os.date()

    Lua는 함수형으로도, 절차형으로도 작성할 수 있습니다.

    이번에는 우선 함수 없이 return 하나만 존재하는 구문을 작성했습니다.

     

    4. 스크립트 실행 (Blueprint)

     

    더보기

    Lua 스크립트를 실행하는 블루프린트 노드는 아래와 같이 구성됩니다.

    해당 노드의 모든 인자는 필수적으로 설정되어야 합니다.

    각 인자의 용도는 다음과 같습니다.

    • State : Lua Virtual Machine을 나타내는 객체입니다.
    • Filename : .lua파일의 이름을 지정합니다. 파일 탐색은 Contnet폴더부터 시작합니다.
    • Ignore Non Existent : 파일이 존재하지 않을 때의 실행 여부를 지정합니다.

    LuaMachine 플러그인에는 기본적인 Test State가 내장되어 있습니다.

    내장되어있지 않을 경우, LuaState객체를 상속받는 객체 (C++, Blueprint 무관)를 생성하여 지정합니다.

     

    위 문단의 내용을 참고하여 적절한 값을 넣은 노드는 다음과 같습니다.

    LuaMahcin의 대부분의 노드는 LuaValue라는 구조체를 반환합니다.

    Lua 스크립트의 return값이 LuaValue로 래핑(Wrapping)되는 구조입니다.

    LuaValue구조체는 위와 같이 구성되어 있습니다.

    적절한 return값에 맞는 노드를 사용하거나, 아래와 같이 적절한 변환 함수를 사용할 수 있습니다.

     

    위 내용을 바탕으로, 3번 문단에서 작성한 Lua 스크립트를 실행할 경우 다음과 같은 출력을 확인할 수 있습니다.

     

    5. 스크립트 실행 (C++)

     

    더보기

    C++에서의 Lua스크립트 실행은 블루프린트에 비해 상대적으로 복잡합니다.

    우선, C++는 다음과 같은 API를 추가해야 합니다.

    #include "LuaMachine/Public/LuaBlueprintFunctionLibrary.h"

    해당 API의 명세는 LuaMachine 페이지에 소개되어 있습니다.

    LuaMachine LuaBlueprintFunctionLibrary

     

    이후, LuaState클래스를 추가해야 합니다.

    위와 같이 LuaState를 상속받는 클래스를 하나 추가하도록 하겠습니다.

    MyLuaState클래스는 제가 추가한 LuaState입니다.

    본 예제에서는 MyLuaState를 사용합니다.

     

    helloworld.lua를 실행하기 위해 다음과 같은 C++코드를 작성할 수 있습니다.

    void AMyActor::BeginPlay() {
        auto ReadHelloWorld = 
            ULuaBlueprintFunctionLibrary::LuaRunFile(
                GetWorld(), 
                UMyLuaState::StaticClass(),
                TEXT("helloworld.lua"), 
                false
            );
        
        GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Black,
            ULuaBlueprintFunctionLibrary::Conv_LuaValueToString(readLuaTest)
        );
    }

    MyActor는 임의로 생성한 Actor클래스입니다. 

    MyActor를 레벨에 배치하고 실행하게 되면 아래와 같은 출력을 볼 수 있습니다.

     


     

    LuaMachine 플러그인을 설치하고, 간단한 스크립트를 실행하는 방법을 알아보았습니다.

    스크립팅으로 구현할 수 있는 기능은 여러가지가 있겠지만, 저는 모딩을 구현하기 위해 이 플러그인을 찾게 되었습니다.

    이에 이어질 글들의 목표는 클라이언트 사이드의 스크립팅을 지원하는 것이 될 것 같습니다.

     

    본 글의 내용으로 구현할 수 있는 기능은 많지 않기 때문에, 최대한 빠르게 다음 글로 찾아오도록 하겠습니다.

    감사합니다.

    댓글

Designed by Tistory.