Godot Engine용 Visual Studio에서 C++ 플러그인 만들기

10243 단어 C++VisualStudioGodot
Godot Engine은 GDScript 외에도 C++에서 개발할 수 있습니다.
작동 방식을 GDNative라고 하며 Godot의 엔진 기능에 액세스할 수 있습니다.
일단 공식에서는 GDNative의 빌드 툴에 SCons를 추천하고 있습니다만, Visual Studio로 C++플러그인 개발하고 싶은 분은 상당히 있지 않을까요.

이번에는 Visual Studio와 C++에서 Godot 플러그인을 개발하는 방법을 정리했습니다.

빌드 환경


  • Windows10 64bit
  • Visual Studio 2019
  • Godot Engine 3.2

  • 준비



    C++ 개발에 필요한 godot-cpp를 준비합니다.

    godot-cpp clone



    먼저 리포지토리를 GitHub에서 가져옵니다.
    "3.2"는 현재 사용하고 있는 Godot 버전과 같은 것을 지정합니다.
    git clone --recursive -b 3.2 https://github.com/GodotNativeTools/godot-cpp.git
    

    godot-cpp 빌드



    godot-cpp 빌드에는 SCons를 사용합니다.
    그렇지 않은 경우 Python을 설치 한 다음 pip install scons에서 SCons를 설치하십시오.

    32/64bit판, Debug/Release판을 각각 빌드합니다.
    scons platform=windows bits=32 generate_bindings=yes target=debug -j4
    scons platform=windows bits=32 generate_bindings=yes target=release -j4
    scons platform=windows bits=64 generate_bindings=yes target=debug -j4
    scons platform=windows bits=64 generate_bindings=yes target=release -j4
    

    Visual Studio에서 플러그인 만들기



    프로젝트 만들기



    Win32 C++ DLL 프로젝트를 만듭니다.

    프로젝트 설정



    다음 godot-cpp 헤더 경로를 포함 디렉토리에 추가합니다.
    - $(ProjectDir)godot-cpp\godot_headers
    - $(ProjectDir)godot-cpp\include
    - $(ProjectDir)godot-cpp\include\core
    - $(ProjectDir)godot-cpp\include\gen

    ※ 이번에는 프로젝트 디렉토리 내에 godot-cpp를 배치하고 있습니다. 다른 장소에 배치한 경우에는 적절히 변경해 주십시오.

    또한 다음 godot-cpp 라이브러리를 각 빌드 구성에 지정합니다.
    - [Win32/Debug] $(ProjectDir)godot-cpp\bin\libgodot-cpp.windows.debug.32.lib
    - [Win32/Release] $(ProjectDir)godot-cpp\bin\libgodot-cpp.windows.release.32.lib
    - [x64/Debug] $(ProjectDir)godot-cpp\bin\libgodot-cpp.windows.debug.64.lib
    - [x64/Release] $(ProjectDir)godot-cpp\bin\libgodot-cpp.windows.release.64.lib

    플러그인 소스 추가



    공식 튜토리얼이 되어 Sprite를 확장한 클래스를 작성합니다.
    htps : // / cs. 미안해. 오 rg / 그럼 / ㅁ st / 쓰리 아 ls / p ㅅ 긴 s / gd 나치 ゔ ぇ / gd 나 치 ゔ ぇ - ぁ ぁ mp ぇ. HTML

    MySprite.h
    #pragma once
    
    #include <Godot.hpp>
    #include <Sprite.hpp>
    
    class MySprite : public godot::Sprite
    {
        GODOT_CLASS(MySprite, godot::Sprite)
    
    private:
        float time_passed;
    
    public:
        static void _register_methods();
    
        MySprite();
        ~MySprite();
    
        void _init();
    
        void _process(float delta);
    };
    

    MySprite.cpp
    #include "MySprite.h"
    
    using namespace godot;
    
    void MySprite::_register_methods()
    {
        register_method("_process", &MySprite::_process);
    }
    
    MySprite::MySprite()
    {
    }
    
    MySprite::~MySprite()
    {
    }
    
    void MySprite::_init()
    {
        time_passed = 0.0;
    }
    
    void MySprite::_process(float delta)
    {
        time_passed += delta;
    
        Vector2 new_position = Vector2(10.0 + (10.0 * sin(time_passed * 2.0)), 10.0 + (10.0 * cos(time_passed * 1.5)));
    
        set_position(new_position);
    }
    

    그런 다음 DLL에서 내보낼 C 함수를 추가합니다.

    GDLibrary.cpp
    #include "MySprite.h"
    
    extern "C" void GDN_EXPORT godot_gdnative_init(godot_gdnative_init_options *o)
    {
        godot::Godot::gdnative_init(o);
    }
    
    extern "C" void GDN_EXPORT godot_gdnative_terminate(godot_gdnative_terminate_options *o)
    {
        godot::Godot::gdnative_terminate(o);
    }
    
    extern "C" void GDN_EXPORT godot_nativescript_init(void *handle)
    {
        godot::Godot::nativescript_init(handle);
    
        godot::register_class<MySprite>();
    }
    

    플러그인 빌드



    오류가 없으면 성공입니다.

    Godot 프로젝트에 플러그인 등록



    DLL을 Godot 프로젝트 아래에 배치합니다. 이번에는 개발 중이므로 디버그 버전 DLL을 배치합니다. (궁극적으로 Release 버전 DLL을 배치합니다)
    - myplugin/win32/libmyplugin.dll
    - myplugin/win64/libmyplugin.dll

    그런 다음 플러그인 정의 파일을 추가합니다. (새 리소스 추가)
    - myplugin/myplugin.gdnlib

    myplugin.gdnlib에 DLL을 설정합니다. (이번에는 Windows 전용)



    플러그인의 클래스에 NativeScript 추가(새 스크립트 추가)
    - MySprite.gdns

    라이브러리에 myplugin.gdnlib를 설정합니다.



    스프라이트에 MySprite를 설정하고 실행.



    잘 움직이는 것 같습니다.

    Visual Studio에서 플러그인 디버깅



    디버그 버전의 DLL을 Godot 프로젝트에 넣습니다.
    Godot에서 실행 중인 프로세스에 연결하는 방법을 수행합니다.

    Visual Studio 메뉴 디버그 → 프로세스에 연결을 선택합니다.


    프로세스에 성공적으로 연결되면 플러그인 소스 내에서 중단될 수 있습니다.



    이제 플러그인 개발이 진행됩니다!

    샘플 두는 곳



    결론



    이 기사는 Windows에서 효율적으로 Godot 용 플러그인을 개발하고 싶은 방향입니다.
    그러나 실제로는 Mac이나 모바일과 같은 멀티 플랫폼의 경우 결국 SCons에서 빌드 할 수 있어야합니다. (Mac은 Mac에서 XCode로 빌드할 수 있게 하면 다소 뒤틀릴지도 모릅니다만…)

    좋은 웹페이지 즐겨찾기