コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Unity エディタを終了しなくてもネイティブプラグインを更新できる「PatchLibrary」紹介

はじめに

「PatchLibrary」を Unity プロジェクトに導入することで
Unity エディタを終了しなくてもネイティブプラグインを更新できるようになります

基本的な使い方は上記サイト様で紹介されていますが
自分が試した手順も備忘録としてまとめておきます

設定

https://github.com/i-saint/PatchLibrary/archive/master.zip

上記のリンクを開いて「PatchLibrary-master.zip」をダウンロードしたら展開しておきます

f:id:baba_s:20211212212345p:plain

Visual Studio で DLL 開発用プロジェクトのプロパティを開いて

f:id:baba_s:20211212212347p:plain

左メニューで「構成プロパティ > ビルド イベント > ビルド後のイベント」を選択して
「コマンド ライン」の「<編集...>」を押します

f:id:baba_s:20211212212350p:plain

コマンドラインウィンドウが表示されたら

xcopy /Yq $(TargetPath) 【Unity プロジェクトのパス】\Assets\Plugins\x86_64\
【PatchLibrary-master のダウンロード先のフォルダ】\bin\PatchLibraryProxy64.exe /target:Unity.exe /patch:$(TargetPath)

上記のコードの 【Unity プロジェクトのパス】
【PatchLibrary-master のダウンロード先のフォルダ】 を適宜変更して貼り付けます

f:id:baba_s:20211212212353p:plain

貼り付けたら「OK」を 2 回押します
これで設定が完了です

動作確認

#include "pch.h"

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT int __stdcall get_value()
{
    return 25;
}

ネイティブプラグインの C++ のコードを適当に用意して

using System.Runtime.InteropServices;
using UnityEngine;

public class Example : MonoBehaviour
{
    [DllImport( "Dll1" )]
    private static extern int get_value();

    private void Update()
    {
        Debug.Log( get_value() );
    }
}

Unity の C# スクリプトも適当に用意して Unity を実行します

f:id:baba_s:20211212213016g:plain

Unity を実行した状態でネイティブプラグインのコードを変更してビルドすると
変更した内容が Unity に反映されるようになったことが確認できます

参考サイト様