Unity_Lesson

外部サイト

・C++ライブラリ(DLL)をUnity(C#)向けに作成して利用するシンプルな方法

・【Unity】C#スクリプトをDLL化する手順

・C#スクリプトをDLL化してUnityで使う



DLLを用意する

C++の関数を外部ライブラリとしてDLL(動的リンクライブラリ)ファイルにコンパイルする方法を解説します。
以下は、Windows環境でVisual Studioを使用する方法を説明しますが、他のコンパイラやIDEを使用する場合でも概念は同じです。

手順

1. DLLプロジェクトの作成

Visual Studioを使用してC++ DLLを作成するためには、まずDLLプロジェクトを作成します。

  1. Visual Studioを開く
    Visual Studioを開き、「新しいプロジェクト」を作成します。

  2. プロジェクトタイプの選択
    「C++」を選択し、「DLL」を選択します。「空のプロジェクト」や「動的ライブラリ」を選択しても構いません。

  3. プロジェクト名と保存先を設定
    プロジェクトに名前を付け、保存場所を決めて「作成」ボタンをクリックします。

2. DLLとしてエクスポートする関数の定義

C++でDLLを作成する際、関数をエクスポートするには__declspec(dllexport)を使います。DLLからインポートする際には__declspec(dllimport)を使います。

以下のようにコードを記述します:

// example.h

#ifdef EXAMPLE_EXPORTS  // EXAMPLE_EXPORTSが定義されていれば、dllのエクスポートを有効にする
#define EXAMPLE_API __declspec(dllexport)
#else
#define EXAMPLE_API __declspec(dllimport)
#endif

extern "C" {  // C++の名前修飾を避けるためにextern "C"を使用
    EXAMPLE_API void helloWorld();
}
// example.cpp

#include "example.h"
#include <iostream>

void helloWorld() {
    std::cout << "Hello, World!" << std::endl;
}

3. プロジェクトのビルド設定

  1. プロジェクトのプロパティ設定
    プロジェクトを右クリックし、「プロパティ」を選択します。

  2. C/C++ の設定
    「C/C++」 > 「コード生成」 > 「ランタイムライブラリ」で「マルチスレッド DLL」を選択します。

  3. 出力設定
    「構成プロパティ」 > 「リンカー」 > 「出力ファイル」でDLLの出力先を設定します。例: $(OutDir)example.dll

4. DLLのビルド

  1. ビルドの準備が整ったら、「ビルド」 > 「ソリューションのビルド」をクリックしてDLLをコンパイルします。
  2. 成功すると、example.dllというファイルが出力フォルダに作成されます。

5. DLLのインポートと使用

DLLを使用するプロジェクトで、example.hをインクルードし、エクスポートされた関数を呼び出せるようにします。

// main.cpp
#include <iostream>
#include "example.h"

int main() {
    helloWorld();  // DLL内の関数を呼び出す
    return 0;
}

このコードをビルドするには、先程作成したDLLが必要です。リンクする際にDLLのインポートライブラリ(example.lib)も必要になる場合があります。

6. DLLの実行

  1. 実行時に、作成したDLL(example.dll)を実行可能ファイルと同じディレクトリに置いてください。
  2. 実行すると、DLL内のhelloWorld関数が呼ばれ、「Hello, World!」がコンソールに出力されます。


DLLをUnityで使用する

C++で作成したDLLをUnityで使用するには、UnityからそのDLLを呼び出せるように設定する必要があります。
以下は、UnityでC++ DLLを使用する方法を説明します。

手順

1. UnityプロジェクトにDLLを追加

まず、作成したC++ DLL(例:example.dll)をUnityプロジェクトに追加します。

  1. Unityプロジェクトを開く
    Unityエディタで、使用するプロジェクトを開きます。

  2. DLLをPluginsフォルダに追加
    プロジェクト内にPluginsというフォルダを作成し、その中にC++で作成したDLLファイル(例:example.dll)を追加します。
    フォルダ構造の例:

    Assets/
       Plugins/
          example.dll
    

2. C#コードからDLL関数を呼び出す

次に、UnityのC#コードからC++ DLLを呼び出せるようにします。これには、[DllImport]属性を使用します。

以下は、C#からC++ DLLの関数を呼び出す例です:

using System;
using System.Runtime.InteropServices;
using UnityEngine;

public class DLLExample : MonoBehaviour
{
    // C++の関数をインポート
    [DllImport("example.dll", CallingConvention = CallingConvention.Cdecl)]
    private static extern void helloWorld();

    void Start()
    {
        // DLL内の関数を呼び出す
        helloWorld();
    }
}

3. 解説

4. DLLを正しく読み込むための注意点

5. 実行

C#コードが正常に記述され、DLLが正しく設定されていれば、Unityを実行した際に、helloWorld関数が呼び出され、C++で定義された動作(例:コンソールへの出力など)が実行されます。



  1. C++で作成したDLLをUnityのPluginsフォルダに追加
  2. C#コードで[DllImport]属性を使用してC++ DLL内の関数を呼び出す
  3. ビルドターゲットやプラットフォームに応じたDLL設定を行う

これで、UnityでC++ DLLを呼び出して、関数を実行できるようになります。