clusterのゲームワールドを作成中でハマった事例、解決方法を紹介します。
環境
Windows10
Unity 2019.4.13f1
Cluster Creators Kit 1.11.0
ハマったこと
AがBに衝突するとBが消える
(例)剣がモンスターを刺したらモンスターが消える
というのを実装しようとして、公式ブログの「的あてゲームの作り方」を見ながら、各Inspectorを以下のように実装。
なお、Aは剣のようなプレイヤーが掴めるアイテムです。(公式ブログの「掴めるアイテムの作り方」を参考にしました。
各Inspector
A
1.掴めるアイテムにするため、Grabbable Item を追加
2.自動的に、Item、Rigidbody、Movable Item が追加される
3.衝突を検知するするため、On Collide Item を追加し、以下の画像のように設定
B
Destroy Item Gimmickを追加する。
Itemは自動についてくる。
### 結果 RUNすると、AがBに衝突してもBが消えない。
なぜだ?
解決方法
結構時間を溶かして諦めかけたとき、
公式の Cluster Creator Kit ドキュメントに以下の記載あり
掴まれている状態のアイテムはそのRigidbodyがIsKinematicに変更されているため、上述のコライダーとのCollision判定が行われません
私が作成してるオブジェクトAは、プレイヤーに掴んでもらうものでしたので、collisionでは判定されなかったということでした。
その対策方法を公式より引用
それらのアイテムでの衝突判定が必要な場合は、どちらかにIsTriggerなコライダーを設定してTriggerイベントを検知するか、設置されているコライダーにIsKinematicがオフでConstraintを全てオンにしたRigidbodyを設定して下さい
私は上記方法から、Istriggerなコライダーを設定しました。
公式には「どちらかに」と記載されてますが、私の場合どちらかだと反応せず、両方(AとB)に設定したらうまくいきました。(つまり、AがBに衝突するとBが消えました)
各Inspector
A
Colliderの IsTrigger をチェックし、
On Collide Item Trigger の Collision Type を Triggerにします。
B
これで、AとBが衝突すると、Bが消えるようになりました。