前提
開発環境:Unity 2017 + Visual Studio Community 2017
言語:Unity C#, C++
DLLを作成するためのVisual Studioプロジェクトを作成する
今回はC++を使用してDLLを作成するため、
「ファイル」「新規作成」「プロジェクト」ででてくるウィンドウの「ダイナミックリンクライブラリ(DLL)」
を選択する。
自身の環境ではDllForDebugというプロジェクト名で行いました(名前やソリューション等の説明は割愛)。
ソースファイルの編集
「プロジェクト名.cpp」というファイルがソリューションエクスプローラにて確認できるので、そこに必要な関数を書き込む。
自身のソースファイルを一部抽出したので不自然な関数ですが、int型の4を返す関数「add_b」を定義しています。
#include "stdafx.h"
#include "iostream"
// 後述するヘッダーファイル
#include "DLLForDebug.h"
// 4を返す関数
int add_b()
{
int b = 4;
return b;
}
ヘッダーファイルの設定
ヘッダーファイルを新規作成し、以下のように記述する。
今回はプロジェクト名と同じファイル名にしています。
extern "C"
{
__declspec(dllexport) int add_b();
}
ビルド
プロジェクトのプロパティ、もしくはデフォルトの場合上部にプラットフォームを選択する場所があるので、64bitにしてビルドする。
ここはUnityの環境に合わせる必要がある。
Unity側の設定
今回Unityで簡単に動かすためのプロジェクトを新規作成する。
AssetsフォルダにビルドしたDLLとC#スクリプトを作成する。
SceneにObjectを作成(自分の場合Empty)し、先述のC#スクリプトを追加して実行時に走るようにする。
自身の環境の場合、「RunDLL.cs」という名前にしました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// IntPtr型を使用するのに必要
using System;
// Dllの読み込みに必要
using System.Runtime.InteropServices;
public class RunDll : MonoBehaviour
{
// Dll内の関数を宣言
[DllImport("DllForDebug")]
private extern static int add_b();
// Use this for initialization
void Start()
{
Debug.Log(add_b())
}
// Update is called once per frame
void Update()
{
}
}
結果
Consoleの場所に4というログが出ているはずです。