もどくんちゃんねる ガジェット部

自転車、ガジェット、映像制作、CG、Blender など

【丁寧解説】UNITYにMath.NETを導入し行列計算を行う方法【数値計算ライブラリ】

 

 

UNITYで行列計算がしたくなって、ChatGPTに聞いたらMath.Netというライブラリを使えと言われました。


ので、今回はUNITYにMath.Netを導入する方法を紹介します。いくつか同様の記事を見つけましたが、上級者向けで私はよく分からなかったので、初心者にもわかりやすいように説明します。

 

手順は以下の通りです。

  1. NuGetでMath.Netパッケージのダウンロード
  2. DLLのUNITYへのインポート
  3. スクリプト内でusingを記述

 

詳しく説明しますね。

目次

 

 


NuGetを使えるようにする

まず、NuGetというものを使える用にします。ChatGPT曰く、NuGetとはこういうものらしいです。

NuGet は .NET 開発者のためのパッケージマネージャーです。これにより、開発者はライブラリやツールを簡単に取得、インストール、更新することができます。NuGet は Visual Studio に統合されているため、Visual Studio を使用している開発者は非常に簡単に依存関係を追加できます。

 

まず、NuGetのサイトから最新のnuget.exeをダウンロードします。

www.nuget.org

 

 

次にWindowsの検索窓で、「cmd」と入力し、コマンドプロンプトを管理者として実行します。

コマンドプロンプトを起動!

次に、先程NuGetをダウンロードしたフォルダに移動します。
私の場合、「C:\Users\aokim\Downloads」にダウンロードしたので、

コマンドプロンプト
cd C:\Users\aokim\Downloads

と打ち移動します。

 

移動完了


次に以下のコマンドをコマンドプロンプトに入力します。
nuget.exe install MathNet.Numerics

すると以下の画像のようになんか出てきます。

なんか出てきた!!

これでとりあえずインストールは完了です。

 

DLLのUNITYへのインポート

上記の作業が完了すると、NuGet.exeをダウンロードしたフォルダに新しくフォルダができています。

なんかフォルダできてる!?

ここでできた新しいフォルダの中身を見ていくと、私のダウンロードしたバージョンの場合、
MathNet.Numerics.5.0.0\lib

になんかたくさんバージョンがありました。

なんかいっぱいあるんだが

 

これは自分のUNITYのSystem.RumTimeバージョンと同じMath.Netを選ぶ必要があるそうです。

私の場合「netstandard2.0」を使って、UnityEditarを再起動したらエラーがでなくなりました。

.dll発見!

こいつをUnityプロジェクトが入っているフォルダの「Asset」フォルダにぶち込みます。
UNITYプロジェクト名\Assets

ドラッグアンドドロップ

 

これでこの章は完了です。最後にMath.Netを使える用にしましょう。

 

スクリプト内でusingを記述

最後にUSINGを記述すれば準備完了です!

using MathNet.Numerics;

 

 

エラーが出た場合

私はこのようなエラーが出ました。

error CS1705: Assembly 'MathNet.Numerics' with identity 'MathNet.Numerics, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'System.Runtime' with identity 'System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

 

これはChatGPTいわく、

このエラーメッセージは、MathNet.Numerics ライブラリが、Unity プロジェクトで参照されている System.Runtime のバージョンよりも新しいバージョンの System.Runtime を使用していることを示しています。具体的には、MathNet.Numerics は System.Runtime, Version=6.0.0.0 を使用しているのに対して、あなたのプロジェクトは System.Runtime, Version=4.1.2.0 を参照しています。

が原因らしく解決策としては、

最新の System.Runtime を参照:
Unity プロジェクトの参照設定を更新して、新しいバージョンの System.Runtime を参照するようにします。

互換性のあるバージョンを使用:
MathNet.Numerics の異なるバージョンを試して、あなたの Unity プロジェクトと互換性のあるものを見つけます。旧バージョンの MathNet.Numerics が、古いバージョンの System.Runtime を使用している可能性があります。

パッケージの再インストール:
nuget や Unity のパッケージマネージャを使用して、関連するパッケージを再インストールすることで、依存関係の問題が解決することがあります。

プロジェクト設定の確認:
Unity の Player Settings や Assembly Definition Files (asmdef) の設定を確認して、.NET のバージョンや API の互換性レベルを確認します。

Unity のバージョンをアップデート:
新しいバージョンの Unity は、更新された .NET ランタイムや API レベルをサポートしている可能性があります。Unity をアップデートすることで、このような互換性の問題が解決することがあります。

 

のようなものがあるそうです。

 

私の場合、「netstandard2.0」を使って、さらに、Unity自体も再起動したらエラーがなくなりました。

 

みなさんもぜひやってみてください。なにか詰まった場合はコメントいただければ返すかもしれません。