渋谷ほととぎす通信

エンジニア社長によるUnityとAIのブログ & エンジニアの生存戦略

【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ

【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ

こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • C++からDLLを作成したい
  • 作成したDLLを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公式サイトどちらからダウンロードしてもらっても問題ありません。

    大事なのは必要な ワークロード がインストールされているかどうかです。ワークロードとは環境構築するためのセットアップのこと。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_0

    今回必要なワークロードは 「C++によるデスクトップ開発」 です。Visual Studioをインストールする際に追加しておきましょう。

    Visual Studioのワークロードを後から追加する方法

    もしVisual Studioインストール時にワークロードの追加をしなかった場合、後から追加することが可能です。

    C:¥Program Files(x86)¥Microsoft Visual Studio¥Installer¥setup.exe

    上記のファイルを実行してみてください。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_1

    するとVisual Studio Installerが立ち上がります。Visual Studioの「変更」ボタンをクリックしましょう。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_2

    するとワークロードリストが表示され、後から追加が可能になります。もしインストール時にワークロードを追加できなかった方は参考にしてみてください。

    Visual Studioでプロジェクトの作成

    Visual StudioでC++製のプラグインを作成するためにはまずプロジェクトを作成します。

    お悩みさん
    お悩みさん
    Visual Studioのプロジェクトって選択肢が多くて困る

    Visual Studioは数多くのテンプレートが用意されていて困りますが、C++でDLLを作成するためのテンプレートも用意されています。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_3

    ダイナミックリンクライブラリ(DLL) を選択して「次へ」ボタンをクリックしてください。見つからない場合は上部検索窓を活用して探してみてください。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_4

    プロジェクト名は「TestDll」としました。プロジェクト名が以降に作成するDLLファイル名になります。

    作成する場所を決めたら。「作成」ボタンをクリックしましょう。すると新しいプロジェクトが作成されます。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_5

    プロジェクトの作成が終わると、TestDllプロジェクトの dllmain.cpp ファイルが開いた状態になります。

    この「dllmain.cpp」がエントリーポイントになるため、このファイルにC++の処理を記述していくことになります。

    DLLの作成方法

    早速DLLファイルの作成をしていきます。C++の内容は初期状態のままでOKです。プラグインの開発は別の記事を参考にしてみてください。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_6

    メニュービルド から 「ソリューションのビルド」 をクリックしましょう。するとDLLの作成処理が実行されます。

    しばらくするとVisual Studio下部の「出力」に結果が表示されます。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_7

    エラー表記がなければ成功です。

    DLLファイルをUnityへ取り込んで実行

    DLLファイルを作成したらUnityに取り込みます。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_8

    DLLファイルの場所は、 プロジェクト/x64/Debug 内に格納されています。

    【Windows】C++でUnityプラグインを開発するVisual Studio環境構築方法まとめ_9

    この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ファイルを呼び出すための作法がいくつかあります。

    1. プラグイン内の関数を static extern をつけて同名で定義
    2. DllImport属性に対してDLLファイル名を指定

    以上でC++で作成したDLLをUnityで呼び出すまでの手順は完了です。

    まとめ

    本記事ではVisual Studioで作成したC++製のDLLをUnity内に取り込んで実行する方法を紹介してきました。簡単にまとめてみます。

    C++製DLLをUnityから呼び出す手順まとめ

    ①Visual Studioでダイナミックリンクライブラリ(DLL)プロジェクトを作成

    ②DLLを作成

    ③UnityのPluginsフォルダへ格納

    ④C#からプラグイン内の関数を呼び出す

    こんな感じです。

    具体的なプラグイン開発は他の記事を参考にしてもらえればと思います。

    Unityから自作のDLLを呼び出せるようになるとできることが一気に広がります。C++で大量の計算処理をさせてパフォーマンスをアップしたり、OSのAPIをC++から実行するといったことも可能になります。

    C#のみでは実装が難しかったことがC++を使えることで守備範囲を一気に広げることができるのです。

    いきなり難しいことをすると挫折につながってしまいますが、本ブログではベイビーステップで未経験者でもネイティブプラグイン開発を始められるような記事がたくさんありますので、ぜひ参考にしてみてください。

    オススメ記事
    検証環境
    • Windows11
    • Visual Studio2022 Community 17.13.1