【DOTS】Unity Physicsの公式デモをさわってみる
はじめに
近頃DOTSがアツいですね。DOTSとは、Unityの次世代基盤とされるデータ指向型のテクノロジースタックです。
今回はDOTS上で動く物理エンジンであるUnity Physicsについて、公式が用意したサンプルプロジェクトをさわってみたいと思います。
検証環境
- 機種: MacBook Air(m1)
- OS: MacOS Monterey(12.3.1)
- メモリ: 8GB
- Unity: 2021.2.16f1(SILICON)
サンプルプロジェクトの準備
Unity-TechnologiesのGithubリポジトリから、ECSのサンプル集リポジトリをクローンします。 https://github.com/Unity-Technologies/EntityComponentSystemSamples
クローンしたディレクトリ内のUnityPhysicsSamples
ディレクトリをUnityで開きます。
エラー発生
Assets/Demos/1. Hello World
ディレクトリ内の、シーン1a. Hello World
を開いて実行してみます。
あれれ。。オブジェクトが床をすり抜けてしまいました。 何が正解かも分からないですが、間違いなく何かおかしいですよね。
コンソールを確認してみると。。
System.IndexOutOfRangeException: Index {0} is out of range of ‘{1}’ Length. This Exception was thrown from a job compiled with Burst, witch has limited exception support.
Index out of rangeみたいなエラーがいっぱい。。
解決方法
ネットの海をさまよって1時間半、ついに解決方法が載ってるサイトが見つかりました。 https://forum.unity.com/threads/2021-2-8f1-broke-asdeferredjobarray-and-deferred-jobs.1225635/#post-7815393
こちらのUnityのフォーラムです。tertleさんという方が方法を示されていたのですが、それはもう彼への賞賛の嵐でした。 みんなこのエラーで詰んでたんですね。。
手順
Library/PackageCache/com.unity.collections@0.15.0-preview.21
ディレクトリをコピーして、Packages
ディレクトリ内にペーストします。- ペーストした
com.unity.collections@0.15.0-preview.21
ディレクトリ内のUnity.Collections/NativeList.cs
をエディタで開いてください。 NativeList.cs
の599行目のAllocator.None
をAllocator.Invalid
に変更します。
以上です!
成功
先ほどはオブジェクトがすり抜けてしまっていましたが、再度実行してみると。。
今度はオブジェクトがすり抜けませんでしたね。成功です。
おわりに
思わぬエラーに遭遇しましたが、ネットコミュニティの力をお借りして解決できました。改めて感謝申し上げます。
Unity Physicsのデモは、上に登場したHello Worldだけでなく、他にもいくつか入っています。ここでは詳細まで紹介しませんが、皆さんの方で試してみてください。
それでは素敵なDOTSライフをお過ごしください。