UNITYで行列計算がしたくなって、ChatGPTに聞いたらMath.Netというライブラリを使えと言われました。
ので、今回はUNITYにMath.Netを導入する方法を紹介します。いくつか同様の記事を見つけましたが、上級者向けで私はよく分からなかったので、初心者にもわかりやすいように説明します。
手順は以下の通りです。
- NuGetでMath.Netパッケージのダウンロード
- DLLのUNITYへのインポート
- スクリプト内でusingを記述
詳しく説明しますね。
目次
NuGetを使えるようにする
まず、NuGetというものを使える用にします。ChatGPT曰く、NuGetとはこういうものらしいです。
NuGet は .NET 開発者のためのパッケージマネージャーです。これにより、開発者はライブラリやツールを簡単に取得、インストール、更新することができます。NuGet は Visual Studio に統合されているため、Visual Studio を使用している開発者は非常に簡単に依存関係を追加できます。
まず、NuGetのサイトから最新のnuget.exeをダウンロードします。
次に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を再起動したらエラーがでなくなりました。
こいつを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自体も再起動したらエラーがなくなりました。
みなさんもぜひやってみてください。なにか詰まった場合はコメントいただければ返すかもしれません。