4
2

More than 1 year has passed since last update.

VSCode+C#でDLLを作成してUnityで使用する方法

Last updated at Posted at 2021-09-22

概要

VSCode+C#でDLLを作成してUnityで使用する

環境

Visual Studio Code: 1.60.1 (user setup)
 C# for Visual Studio Code (powered by OmniSharp).:1.23.15
.Net Framework SDK:4.7.1
Unity:2020.3.15f2

DLLプロジェクトを作成

今回作るプロジェクトは「DLLTest」とする
Unity側は「DLLTestUnity」とする

手順

  1. ディレクトリを作成しVSCodeで開く
  2. VSCodeのターミナルから作成コマンドを打つ
  3. .csprojを設定する
  4. プログラムを書く
  5. ビルドしてDLLを作成する

ディレクトリを作成しVSCodeで開く

image.png

VSCodeのターミナルから作成コマンドを打つ

dotnet new classlib -o DLLTest

image.png

.csprojを設定する

Unity用のDLLは「.Net4.x」または「.Net Standard 2.0」で作る必要がある
Unity+VSCodeでブレークポイントを使うのに必要な.NetFrameworkSDK4.7.1が入っているので今回はそれを設定した
image.png

プログラムを書く

「Class1.cs」を「DLLTest.cs」にリネームする
足し算を行うSumメソッドを作成する
image.png

namespace DLLTest
{
    public static class DLLTest
    {
        public static int Sum(int x, int y)
        {
            return x + y;
        }
    }
}

ビルドしてDLLを作成する

ビルドコマンドを叩く
publishではなくbuildにした場合は署名がなくてUnityで読み込めないので注意(はまった!)

※cdコマンドでDLLTestに移動してから次のコマンドを叩くこと

Windowsは以下

dotnet publish -c Release -r win-x64

Macは以下(未検証)

dotnet publish -c Release -r osx-x64

image.png

以下にDLLが作成されるのでUnityプロジェクトに持っていく

bin\Release\net471\win-x64

Unity上で実行

手順

  1. 新規Unityプロジェクトを作成する
  2. DLLをAssets以下に配置
  3. Test.csファイルを作成してMainCameraにつける
  4. 実行する

新規Unityプロジェクトを作成する

image.png

DLLをAssets以下に配置

image.png

Test.csファイルを作成してMainCameraにつける

image.png

Test.cs

using UnityEngine;

public class test : MonoBehaviour
{
    void Start()
    {
        var x = DLLTest.DLLTest.Sum(10, 20);        
        Debug.Log(x);
    }
}

実行する

image.png

DLL内にUnityのメソッドを入れる方法

手順

  1. UnityEngine.dllをDLLプロジェクトにコピー
  2. .csprojでDLLの読み込み設定
  3. プログラムを書く
  4. DLLを作成する
  5. UnityにDLLを上書き
  6. Test.csを書き換え
  7. 実行する

UnityEngine.dllをDLLプロジェクトにコピー

UnityEngine.dllをUnityから持ってきてDLLのプロジェクトにコピーする
UnityHubからインストールした場合、以下の場所にある

C:\Program Files\Unity\Hub\Editor\2020.3.15f2\Editor\Data\Managed

image.png

コピー先
image.png

.csprojでDLLの読み込み設定

以下を追加

<ItemGroup>
  <Reference Include="UnityEngine">
    <HintPath>UnityEngine.dll</HintPath>
  </Reference>
</ItemGroup>

image.png

プログラムを書く

namespace DLLTest
{
    public static class DLLTest
    {
        public static int Sum(int x, int y)
        {
            return x + y;
        }

        public static void ConsoleWrite(object message)
        {
            UnityEngine.Debug.Log(message);
        }
    }
}

image.png

DLLを作成する

Windows

dotnet publish -c Release -r win-x64

Mac

dotnet publish -c Release -r osx-x64

UnityにDLLを上書き

作成したDLLTest.dllをUnityのAssets以下のDLLTest.dllに上書き

Test.csを書き換え

using UnityEngine;

public class test : MonoBehaviour
{
    void Start()
    {
        var x = DLLTest.DLLTest.Sum(10, 20);        
        DLLTest.DLLTest.ConsoleWrite(x);
    }
}

実行する

image.png

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2