ไม่ว่าจะเกิดการชนกัน GameObjects สองรายการมีส่วนเกี่ยวข้องหรือไม่ สิ่งที่ฉันต้องการที่จะรู้คือผมจะตัดสินใจอย่างไรว่าวัตถุที่ควรมีของฉันOnCollision*
?
ตัวอย่างเช่นสมมติว่าฉันมีวัตถุผู้เล่นและวัตถุเข็ม ความคิดแรกของฉันคือการวางสคริปต์บนโปรแกรมเล่นที่มีรหัสดังนี้:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
แน่นอนว่าฟังก์ชั่นเดียวกันนี้สามารถทำได้โดยแทนที่จะมีสคริปต์บนออบเจ็กต์ Spike ที่มีรหัสดังนี้:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
ขณะที่ทั้งสองมีความถูกต้องมันจะทำให้รู้สึกมากขึ้นกับผมที่จะมีสคริปต์ในการเล่นเพราะในกรณีนี้เมื่อการปะทะกันเกิดขึ้นการดำเนินการจะถูกดำเนินการบนเครื่องเล่น
อย่างไรก็ตามสิ่งที่ทำให้ฉันสงสัยว่านี่คือในอนาคตคุณอาจต้องการเพิ่มวัตถุอื่น ๆ ที่จะฆ่าผู้เล่นในการปะทะกันเช่นศัตรู, ลาวา, ลำแสงเลเซอร์ ฯลฯ วัตถุเหล่านี้อาจมีแท็กที่แตกต่างกัน ดังนั้นสคริปต์บน Player จะกลายเป็น:
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
ขณะที่ในกรณีที่สคริปต์ที่อยู่บนเข็มทั้งหมดที่คุณจะต้องทำคือการเพิ่มว่าสคริปต์เดียวกันกับวัตถุอื่น ๆ KillPlayerOnContact
ที่สามารถฆ่าผู้เล่นและชื่อสิ่งที่สคริปต์เหมือน
นอกจากนี้ถ้าคุณมีการปะทะกันระหว่างผู้เล่นและศัตรู AA, แล้วคุณจะต้องการดำเนินการกับทั้งสอง ดังนั้นในกรณีนั้นวัตถุใดที่ควรจัดการกับการชน? หรือทั้งสองควรจัดการกับการชนกันและดำเนินการที่แตกต่างกันอย่างไร
ฉันไม่เคยสร้างเกมที่มีขนาดพอสมควรมาก่อนและฉันสงสัยว่ารหัสอาจยุ่งและยากที่จะรักษาตามที่มันโตขึ้นถ้าคุณได้รับสิ่งผิดประเภทนี้ในตอนแรก หรืออาจเป็นวิธีที่ถูกต้องและไม่เป็นไร
ความเข้าใจใด ๆ ที่ชื่นชมมาก! ขอขอบคุณสำหรับเวลาของคุณ :)
Tag.SPIKE
อย่างไร