更新記録0.4.x
0.4.58以降
構成を調整しました。
一部のパッケージやコードの構成を整理しました。
戦闘にて、誘導(相手の方に向く)の挙動を変更しました。
一部で振動しやすい場面がありました。その対策として挙動を置き換えました。
アクティブカメラの挙動を調整しました。
見下ろしになったときに特に激しい視点移動が連続して起きていました。十分ではありませんが、軽減のための調整をしました。
次のバージョンは0.5.0とする予定です。
対応の難しい課題も残っていますが、0.4.xでの細かい調整にて、いくつかの気掛かりは解消しました。目新しく大きな問題が少ない状況は、マイナーバージョンを引き上げるタイミングとして悪くないと思います。
0.4.53以降
入力の不具合について、暫定的にInput Systemパッケージを巻き戻すことで対応しました。
以前更新したInput Systemパッケージの影響と見ています。必要だとされる破壊的変更に関係しているのか、それ以外の問題であるのか、不明です。パッケージの更新版を待って、変化を見たいと考えています。
戦闘の入力処理の一部を調整しました。
オーバーヘッドの軽減が目的です。ただし、単純な最適化にはならない場合もあります。その場合は、今後を見据えた作業/研究であると言えます。
Burstコンパイラの処理結果を見ながら作業して、現在のBurstコンパイラの性質が少し垣間見えたようです。
現在のところFloatMode.Deterministic(速度優先ではない)の場合
メソッドのインライン化は積極的に発生します。(個人的に既知)
思ったよりもコードの順序に直接的な対応を感じました。
Unity.Mathematics関連のベクトル型の値と通常のスカラー値の行き来はオーバーヘッドになることがあるようです。
これまでのSIMDソリューションでも似たようなことが悩みでした。それでもDOTSは、ゲームの用途に適合させながら、多くの扱いにくさを軽減したソリューションにはなっているように思います。
共通のスカラー演算を勝手にベクトル型にまとめてくれたりはしないようです。
0.4.51以降
キャラクターの移動(位置と回転)について、アニメーション関連と物理との連動に関する調整を加えました。
連動方法として、これまでより進んだ処理を追加しました。
長期的にはUnity Animationなどが導入できるなどの大きな変更があったとすれば、変更が起きる可能性はあります。
若干調整を考慮しうる仕組みのため、微調整を行う可能性もあります。
0.4.48以降
DOTS 0.6.0系パッケージに更新しました。
Unity.Transportパッケージの更新版がなく、変更に追従できないため、関連デバッグ機能を暫定で停止しました。
VRoidSDKのNewtonsoft.Json依存と衝突が発生したため、設定に調整を加えました。
UnityエディタのEntity Debuggerの一部で例外を伴う高負荷の問題が出ました。デバッグへの支障がありうるので、巻き戻しや更新版待ちなどの可能性を予想しています。
0.4.47以降
戦闘にて、キャラクターの高度/押し/傾きに関する挙動を復元しました。
処理する行程に適合する型の選択に問題がありました。
余談 試行錯誤を伴う開発のため、明確な完成形(設計図)が用意できているわけではありません。そのため、別個の作業によって気づかぬうちに、複雑なデータ処理の正しい流れを崩してしまうことがあります。開発作業の難しい点です。ECSのシステムやジョブがどのようなデータの流れを形成しているか図示/編集するグラフィカルなエディタがあれば助かるのかも知れません。
上記修正を踏まえた調整により、全てではないようですが、物理挙動も部分的に落ち着かせることができたように見えます。
開発上でPhysics: H版も試行してみました。しかし、ラグドール関連の処理でクラッシュするようで、完全な状態での公開版のPhysics: U版との比較対象にできない状況のようです。
フォーラムでも何度か見かけるU版の物理挙動上の悩みは、H版との比較が参考になりうるところです。
0.4.44以降
未採用の新しい版にてネイティブDLLが動かない問題があり、それが修正されたより新しいUnity Burstパッケージが出たので、更新しました。
0.4.42以降
先日よりUnity Burstパッケージに新版が出ていますが、ビルドしたプレイヤーで、Discord関連が動かないために保留しています。これはその後に出てきたネイティブDLLが動かない問題があるというフォーラム情報と符合しました。これが理由であると推定しています。そのため、解消した更新版が出るまで、関連するパッケージ更新を保留する見込みです。
0.4.38以降
Unity Physicsの特定の不具合への暫定回避策を適用しました。
フォーラムによると、これは決定論(Virtueldでは対戦の同期)に関係するようです。次に出るUnity Physicsでは、よりパフォーマンスへの影響を抑える変更が含まれるようです。
これに良い効果があると助かりますが、Virtueld自体は各種変更を続けているために、対戦の同期への影響が見え隠れしているものと思います。よって、まだ各種調整がいるものと予想しています。
0.4.37以降
デバッグツールとして[F6]キーを追加しました。(起動時の既定: 非表示)
AIの一部情報の表示/非表示を切り替えます。
AIのキャラクターにのみ表示します。表示内容はAIの状態に依存します。現在のところ、条件がそろえば、いくつかの扇型が確認できます。
0.4.31以降
N版用の従来の物理(Nvidia PhysXベース)処理の撤去を開始しました。
Unity.Physics(U版)はまだ正式版ではないので、完全に頼れる状態とは言いきれません。しかし、両者を考慮した処理にする手数と、オーバーヘッドを除去する上での制約になっているため、撤去することにしました。
0.4.28以降
Unityを更新しました。2019.3.0f6で正式版の扱いとなったようです。久しぶりにベータ扱いではないUnity上でのビルドです。
DOTSなどの各パッケージは引き続きベータを含みますし、Unityに既知の問題がないわけではないので、実質上の大きな違いはありません。
DOTS 0.5.1系パッケージに更新しました。0.4.16で触れた残りの部分の更新版には、エラーなどの明らかな問題はないようでしたので、更新しました。
Virtueld自体については、DOTS周辺の調整を継続しています。
0.4.24以降
開発版にて、(起動時ではなく)手動のキャラクター選択でのロード行程において、EntityManager.AddComponents呼び出しのcom.unity.entities@0.4.0-preview.10パッケージ内(一部改変)でAssert.AreNotEqual(-1, typeComponentIndex)でのAssertエラーを観測し、インゲームのメッセージボックスでその旨のエラーを表示し、結果的にそのあとすぐにクラッシュするというものがありました。
パッケージ側のAssert失敗なので、何かの不具合か、想定外の用法があるのでしょうか。不明のため、問題を確認した範囲で、利用を回避しました。
0.4.23以降
0.4.16で触れた残りの部分には、フォーラム情報によるとやはり問題がある様子なので、次のバージョンを待つのがいいと見ています。
困ったときのLibraryフォルダの削除の手立てを実行しても、メニューJobs表示におけるチェックマークを処理するときの内部動作が問題と見られるエディタクラッシュが起きやすい状態を観測しています。エディタ起動直後にメニューJobsを見ようとしてもクラッシュします。エディタのプレイを開始してから、ジョブの非同期バーストコンパイルが完了したであろう十分な時間を置いてからメニューJobsを開いた場合のみ、回避できる可能性があるといった状態に見えます。
実行停止後には別の問題が起きてクラッシュにつながることがあるため、安定して滑らかに作業をすることが難しい状況にはあります。これらについてはUnityやパッケージの更新版の登場で、問題を緩和してくれることに期待している状態です。
追記 その後の作業でほかの特定のメニューでもクラッシュが観測されました。このことを元に調べ、EditorPrefsのデータが破損した可能性についても試行ました。しかし、現在のところ、解決はしないようです。
0.4.16以降
DOTS 0.5.0系パッケージに一部更新しました。これと同時期に出たパッケージ更新(残りの部分)を試用したところ、不可解な実行時エラーやパフォーマンス低下があったため、一旦、残りの部分の適用を見送りました。今後こちらで解決しなければいけない現象なのか、今後パッケージ側で解決される問題なのかは不明です。試用した際に観測された情報に従って行った小さな変更は適用した状態です。
0.4.5以降
引き続きDOTS様式に近づける変更を行っています。その中で処理できない型がありました。
class IComponentDataのフィールドにKeyValuePair<BlendShapeKey, float>を置いてECSに非バーストで処理させようとしたところ、ビルドしたプレイヤーの起動時にTypeLoadExceptionが発生する(という認識)の現象を確認しました。単純なジェネリックIComponentDataを取り扱うときに必要な手順とは違うように思いましたが、どうなのでしょうか。
オーバーヘッドになりますが、暫定的に一段階前の型のまま保持しておいて処理する方式にしました。
BlendShapeKeyは少しカスタマイズしているので、オープンな吟味は少々複雑です。
0.4.3以降
Discord対戦開始時の処理の変更を試行しています。
キャラクターのリロードをしない方法での調整を開始しています。
別のキャラクターのロードに関する処理の変更によって動作が乱れたため、上記を開始しました。既知の現象のいくつかもその周辺で起きているようにも見えます。同期のためのキャラクター初期化の方針を変えて、同期を改善できるか試行する考えです。
これについても簡単ではないかも知れませんし、ほかの原因があって満足な改善にはならない可能性もあります。試行しながら様子を見てきます。この方針がうまくいくのであれば、よい方法ではあります。リロードをしないため、そのフレームでの負荷が減って硬直時間を小さく(または見えなく)できるためです。
なお、このリロードも同期改善の試行の1つとして導入したものです。
0.4.0以降
あけましておめでとうございます。
マイナーバージョンを更新しました。いくつかの難しい課題が残っていて、各依存パッケージの進捗も想像したよりゆっくりですが、開発期間も経過しましたので、マイナーバージョンを引き上げることにしました。
既知の問題の1つで、揺れ物が乱れる場合があると同じか似た現象として、一部ボーンが乱れる場合があります。その場合でも、キャラクターのロード(または再ロードを伴うオンライン対戦開始)で正常になることがあります。このことから、後からDOTS化した部分に関連する現象である可能性を含め、検討中です。