【VCC_VRCワールド】Pickup可能オブジェクトが、放置されてから一定時間後に自動で元の位置に戻る設定方法
ワールド作成時にタイトル通りのことをしたかったのですが、VCC対応のUdonギミックがなかったのでふらっと(@flat_vrc)さんに作成していただきました。
<参考資料>
・オブジェクトが一定時間後に元の位置に戻るギミックはこちら。
時間経過で自動リスポーンするスクリプト(Time Respawn Object)【VRCワールド向けギミック】
Unity2022向けに作られていますが、私のUnity2019環境でも動きました。
・Pickup設定はこの記事を参考にした。必読。
・PickUp判定開始距離の理解に役立つ。
できる人はこれらの記事を読んだらどうにかできるはずです。
参考程度に下記に実際の設定内容を記載しました。
<設定内容>
PickUpさせたいオブジェクト(今回はアクリルキーホルダー)に下記コンポーネントの取り付けと各項目の値を設定した。なお各コンポーネントの上下順番は自由。
VRCPickupコンポーネント
・DissallowTheft にチェックを入れた。他人に奪われたくないから。
・Orientetion は Gunにした。GripよりもGunHandのほうがつかみやすそうだから。
・AutoHold はYes にした。Desktop勢のため。
・Pickupableにはチェックを入れること。
・Proximity を0.02 にした。この距離を設定しないとかなり遠くからでもオブジェクトをつかめるようになってしまう。
Proximity(近接性) はどれだけ遠くからものをつかめるかを決める。
アクキーの当たり判定用のコライダーに青いビームをどれだけ遠くからあてられるかの距離のこと。 「0.02m+アバターの腕の長さ分」が今回設定した、青いビームをあてられ、つかめる範囲である。
下記記事を読むとわかる。
Proximity に関する記事:https://note.com/mimyquality/n/n5625c578de56
(余談)VCC対応前はVRCPickupコンポーネントとともに、Pickup Triggerというコンポーネントも必要だった。以前はこれがProximityの役割を果たしていたようだ。VCCからこのコンポーネント自体がなくなった。
RigitBodyコンポーネント
(VRCPickupコンポーネントを付けた際に自動でつきます)
・Is Kinematic にチェックを入れると物理演算しなくなる。
・UseGravity 勝手に重力方向に落ちてほしくないのでチェックを外した。BoxColliderコンポーネント
・青いビームが当たってつかめる判定を定めるために必要。
・GismosをONにして見える緑の枠組がコライダー。
・Sizeの値を調節し、コライダーをオブジェクトを囲うくらいの大きさにした。VRC ObjectSyncコンポーネント
・他人とオブジェクトの位置を同期するためTimeRespawnObjectコンポーネント
主にTimeRespawnObject使い方の記事に従った。
https://note.com/flat_vrc/n/n7e5edf139a48
・Reset Time 30
・Reset Dist 1
・Vrc Pickup, Object Sync この項目はコンポーネントをつけているオブジェクトを自動で参照するのでNoneのままでいい。(気になるならPickupしたいオブジェクトを入れてもいい)
最後にオブジェクトをピックアップしたプレイヤーがアクキーから1m以上離れ、30秒たつと元の位置に戻るよう値を設定した。(Distanceはおそらく半径?)
アクリルキーホルダーにつけた各コンポーネントの実際設定値はこれ
以上でワールドをアップロードした。
このアクキーを移動させ1m以上離れ30秒放置すると、アクキーは元の場所に戻りました!