Herhangi bir çarpışmada, iki GameObject hakkı var mı? Bilmek istediğim şey, hangi nesnenin hangi nesneyi içermesi gerektiğine nasıl karar verebilirim OnCollision*
?
Örnek olarak, bir Player nesnesinin ve bir Spike nesnesinin olduğunu varsayalım. İlk düşüncem, böyle bir kod içeren oynatıcıya bir senaryo koymak.
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
Tabii ki, aynı işlevsellik yerine Spike nesnesinde böyle bir kod içeren bir betik bulundurularak elde edilebilir:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
Her ikisi de geçerli olsa da, betiğin Player'da olması bana daha mantıklı geldi çünkü bu durumda, çarpışma gerçekleştiğinde, Player'da bir işlem gerçekleştiriliyor .
Bununla birlikte, bu beni şüphe ettiren şey, gelecekte Düşmanı, Lav, Lazer Işını, vs. gibi Çarpışmada Oyuncu’u öldürecek daha fazla nesne eklemek isteyebileceğinizdir. Bu nesnelerin muhtemelen farklı etiketleri olacaktır. Böylece Player'daki senaryo şöyle olur:
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
Oysa, senaryonun Spike'da olduğu durumda, tek yapmanız gereken aynı script'i Player'ı öldürebilen ve betiğe benzer bir şekilde isimlendirmek KillPlayerOnContact
.
Ayrıca, Oyuncu ve Düşman arasında bir çarpışma varsa, o zaman muhtemelen her ikisinde de bir işlem yapmak istersiniz . Öyleyse, bu durumda hangi nesne çarpışmayı ele almalı? Ya da her ikisi de çarpışmayı ele almalı ve farklı eylemler gerçekleştirmeli midir?
Daha önce hiç makul büyüklükte bir oyun yapmadım ve başlangıçta bu tür bir şeyleri yanlış yaparsanız kodun dağınık hale gelip gelmemesi zorlaştığını merak ediyorum. Ya da belki tüm yollar geçerlidir ve bu gerçekten önemli değil?
Herhangi bir fikir çok takdir edilmektedir! Zaman ayırdığınız için teşekkür ederim :)
Tag.SPIKE
yerine olur?