衝突では、2つのGameObjectが関係していますか?私が知りたいのは、どのオブジェクトに自分が含まれているOnCollision*
かをどのように決定するのですか?
例として、PlayerオブジェクトとSpikeオブジェクトがあるとします。私の最初の考えは、次のようなコードを含むスクリプトをプレーヤーに配置することです。
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
もちろん、代わりに次のようなコードを含むスクリプトをSpikeオブジェクトに置くことで、まったく同じ機能を実現できます。
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
どちらも有効ですが、この場合、衝突が発生するとPlayerでアクションが実行されるため、Playerでスクリプトを使用する方が理にかなっています。
しかし、私がこれを疑っているのは、将来、敵、溶岩、レーザービームなど、衝突時にプレイヤーを殺すオブジェクトをさらに追加したいかもしれないということです。これらのオブジェクトはおそらく異なるタグを持つでしょう。そのため、プレーヤーのスクリプトは次のようになります。
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
一方、スクリプトがスパイク上にあった場合、あなたがしなければならないことは、プレーヤーを殺すことができ、スクリプトのような名前を付けることができる他のすべてのオブジェクトに同じスクリプトを追加することKillPlayerOnContact
です。
また、プレイヤーと敵が衝突した場合、おそらく両方でアクションを実行したいと思うでしょう。その場合、どのオブジェクトが衝突を処理する必要がありますか?または、衝突を処理し、異なるアクションを実行する必要がありますか?
これまでに妥当なサイズのゲームを作成したことはありません。最初にこの種の問題が発生した場合、コードが大きくなり、メンテナンスが難しくなるのではないかと思っています。それとも、すべての方法が有効であり、それは本当に重要ではありませんか?
洞察は大歓迎です!お時間をいただきありがとうございます:)
Tag.SPIKE
代わりになりますか?