こんにちは、Unityエンジニアのオオバです。
普段Unityで開発を進めていると自前でDLLを作成する作業って一見必要なさそうな感じがしますよね。オオバも以前は同じように思っていました。
しかし、Unityがサポートしていない機能を作る必要になった途端にネイティブプラグイン開発が始まります。つまりC++やObjective-C、Swiftといったネイティブ機能にアクセスしやすい言語を取り扱い、そしてUnityと連携する必要が出てくるということです。
そこで本記事ではネイティブプラグイン入門の準備としてWindows環境でC++製DLLを作成する環境構築について解説していきます。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
Visual Studioのインストール
C++からDLLを作成するためには事前にVisual Studioの準備が必要です。Visual Studio自体はUnity HubからでもVisual Studio公式サイトどちらからダウンロードしてもらっても問題ありません。
大事なのは必要な ワークロード がインストールされているかどうかです。ワークロードとは環境構築するためのセットアップのこと。
今回必要なワークロードは 「C++によるデスクトップ開発」 です。Visual Studioをインストールする際に追加しておきましょう。
Visual Studioのワークロードを後から追加する方法
もしVisual Studioインストール時にワークロードの追加をしなかった場合、後から追加することが可能です。
C:¥Program Files(x86)¥Microsoft Visual Studio¥Installer¥setup.exe
上記のファイルを実行してみてください。
するとVisual Studio Installerが立ち上がります。Visual Studioの「変更」ボタンをクリックしましょう。
するとワークロードリストが表示され、後から追加が可能になります。もしインストール時にワークロードを追加できなかった方は参考にしてみてください。
Visual Studioでプロジェクトの作成
Visual StudioでC++製のプラグインを作成するためにはまずプロジェクトを作成します。
Visual Studioは数多くのテンプレートが用意されていて困りますが、C++でDLLを作成するためのテンプレートも用意されています。
ダイナミックリンクライブラリ(DLL) を選択して「次へ」ボタンをクリックしてください。見つからない場合は上部検索窓を活用して探してみてください。
プロジェクト名は「TestDll」としました。プロジェクト名が以降に作成するDLLファイル名になります。
作成する場所を決めたら。「作成」ボタンをクリックしましょう。すると新しいプロジェクトが作成されます。
プロジェクトの作成が終わると、TestDllプロジェクトの dllmain.cpp ファイルが開いた状態になります。
この「dllmain.cpp」がエントリーポイントになるため、このファイルにC++の処理を記述していくことになります。
DLLの作成方法
早速DLLファイルの作成をしていきます。C++の内容は初期状態のままでOKです。プラグインの開発は別の記事を参考にしてみてください。
メニュービルド
から 「ソリューションのビルド」 をクリックしましょう。するとDLLの作成処理が実行されます。
しばらくするとVisual Studio下部の「出力」に結果が表示されます。
エラー表記がなければ成功です。
DLLファイルをUnityへ取り込んで実行
DLLファイルを作成したらUnityに取り込みます。
DLLファイルの場所は、 プロジェクト/x64/Debug
内に格納されています。
このDLLファイルをUnityプロジェクト内に Pluginsフォルダ を作成して追加してください。
プラグインを呼び出すC#スクリプトの作成
最後にプラグインをC#から呼び出すスクリプトを作成します。
次のソースコードを見てみましょう。
using System.Runtime.InteropServices;
using UnityEngine;
public class InvokeCpp : MonoBehavour
{
[DllImport("TestDll.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void プラグイン内の関数名();
void Awake()
{
プラグイン内の関数名();
}
}
C#からDLLファイルを呼び出すための作法がいくつかあります。
- プラグイン内の関数を
static extern
をつけて同名で定義 - DllImport属性に対してDLLファイル名を指定
以上でC++で作成したDLLをUnityで呼び出すまでの手順は完了です。
まとめ
本記事ではVisual Studioで作成したC++製のDLLをUnity内に取り込んで実行する方法を紹介してきました。簡単にまとめてみます。
①Visual Studioでダイナミックリンクライブラリ(DLL)プロジェクトを作成
②DLLを作成
③UnityのPluginsフォルダへ格納
④C#からプラグイン内の関数を呼び出す
こんな感じです。
具体的なプラグイン開発は他の記事を参考にしてもらえればと思います。
Unityから自作のDLLを呼び出せるようになるとできることが一気に広がります。C++で大量の計算処理をさせてパフォーマンスをアップしたり、OSのAPIをC++から実行するといったことも可能になります。
C#のみでは実装が難しかったことがC++を使えることで守備範囲を一気に広げることができるのです。
いきなり難しいことをすると挫折につながってしまいますが、本ブログではベイビーステップで未経験者でもネイティブプラグイン開発を始められるような記事がたくさんありますので、ぜひ参考にしてみてください。

筆者のXをフォローしよう
- Windows11
- Visual Studio2022 Community 17.13.1