一時停止によるRigidbodyの停止をひとつのスクリプトにした。
個別のスクリプトで記述しなくとも、このスクリプトをアタッチすれば、シーン管理オブジェクトの一時停止フラグを見て、IsKineticの有効/無効を切り替えられる。Rigidbodyがアタッチされていることが前提。
キー入力を一時停止中と非停止中で分けた。一時停止中はキャラクターの移動操作をしないなどの使い分けができる。
Rigidbody以外の処理は各スクリプトで個別に停止することとした。
Time.timeScaleをゼロにする方法もあるらしいので試したが、使い勝手が良くない印象を受けた。止めたくないタイマーまで停止してしまう感じ。例えばメニュー画面を開いている間もゲームのプレイ時間をカウントしたいと思った時timeScaleをゼロにするのは良い方法ではない気がする。使い方をよく分かっていないだけかもしれないが。
ただし、個別に停止する場合は処理の止め忘れが無いようにしっかりとした管理が必要。
簡易的だが一時停止中に取得したアイテムの数を表示するようにした。鍵以外のアイテムの具体的な用途は決まっていない。
扉を想定した簡単なオブジェクトとスクリプトを実装。
扉の開閉はアイテムを拾う時と同じ要領で実装した。レイを飛ばし、当たった相手が扉用のレイヤーに設定されていたらSendMessageで扉オブジェクトの開閉用の関数を動かす。
扉ごとに必要なキーアイテムを設定できるようにした。開閉用の関数はシーン管理オブジェクトからアイテムの所持情報を確認し、該当するアイテムを既定の個数所持していない場合には扉が開かないようにした。