【Unity】ネイティブプラグインを作る

04/15/2020

ネイティブプラグインを作ってみる

請負やらスポットのお仕事をしているため、自分の作業時間が全く取れていないため焦っています。
スポットは、UNITYやらドキュメント化やらPJ管理の手法やら様々な技術・情報提供をしていますが、ほぼお金に代わっていないのですよ。でも、自分のためでもあるし付き合いなんでね。大事にしていきます。

さて、UNITYからNugetのパッケージをアクセスしたいのです。沢山のツールがたくさんあり、サクッと使えると便利なのですが、手動で組み込みをする必要があり、かなりいけてません。
なので、NugetのラッパーDLLをかましてしまえば、Nugetでパッケージ管理できるので楽なのかな?と思い実験してみます。今回は、Nugetは、使いません。あくまでDLLプラグインの作成実験になります。

現時点でのLTSを使って確認をします。様々なプラットフォームに対応したいので.NetCORE2.2を使います。VS2019に.netCore2.2を導入は事前にすませてください。
.netCoreではなく.NET Standardを使います。
Unity:Unity2018.4.16
VisualStadio2019 C#
.Net Core2.2

VSプロジェクトを作る

下記の通り、クラスライズラリ(.Net Standerd)を選択しましょう。.Net StanderdのDLLは、

プロジェクト名と保存場所を入力しましょう。

PluginTestとしました。

プラグイン側で、UINITYの型を扱いたくなると思います。なのでUnityEngineを組み込みます。
参照の追加を行います。
プロジェクト→参照の追加
参照マネージャより追加します。

追加するファイル:Windowsの場合は、
C:\Program Files\Unity\Hub\Editor\2018.4.16f1\Editor\Data\Managed\UnityEngine.dll
となります。
MACも調べればすぐにわかると思いますが、VS2019の操作が若干異なると思います。

下記のようにPluginTestを作りました。ビルドをして動作確認をします。

using System;
using UnityEngine;

namespace PluginTest
{
    public class PluginClass
    {
        public static String Helloworld(Vector3 sample)
        {
            float x, y, z;
            x = sample.x;
            y = sample.y;
            z = sample.z;
            string t = "HelloWorld " + " X=" + x.ToString()
                                     + " Y=" + y.ToString()
                                     + " Z=" + z.ToString();
            return t;
        }
    }
}

作成した、DLLをUNITYに組み込みします。

PluginsのフォルダにCOPYします。
プラグインインスペクターにこんな感じで表示されます。

次にUnity上で動作確認します。

using UnityEngine;
using PluginTest;

public class TestUseDLL : MonoBehaviour
{
    private void Start()
    {
        Vector3 test = new Vector3(10, 20, 30);
        Debug.Log("TEST=" +  PluginClass.Helloworld(test));
    }
}

動作させると、ちゃんと動作しています。

最後に

とりあず、動作するところまでできました。
まだ動作確認していませんが、.Net Core2は、コンパイルの仕方をかえればマルチプラットフォームなため、Windows以外でも動作するはずです。
今後、検証してみましょう。