Trong bất kỳ va chạm nào, có hai GameObject liên quan phải không? Điều tôi muốn biết là, Làm thế nào để tôi quyết định đối tượng nào nên chứa đối tượng của mình OnCollision*
?
Ví dụ: giả sử tôi có đối tượng Người chơi và đối tượng Spike. Suy nghĩ đầu tiên của tôi là đặt một tập lệnh lên trình phát có chứa một số mã như thế này:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Spike")) {
Destroy(gameObject);
}
}
Tất nhiên, chức năng chính xác tương tự có thể đạt được bằng cách thay vào đó có một tập lệnh trên đối tượng Spike có chứa mã như thế này:
OnCollisionEnter(Collision coll) {
if (coll.gameObject.compareTag("Player")) {
Destroy(coll.gameObject);
}
}
Trong khi cả hai đều có giá trị, nó có ý nghĩa hơn đối với tôi để có kịch bản trên chơi bởi vì, trong trường hợp này, khi va chạm xảy ra, một hành động đã được thực hiện trên chơi .
Tuy nhiên, điều khiến tôi nghi ngờ điều này là trong tương lai bạn có thể muốn thêm nhiều vật thể sẽ giết Người chơi khi va chạm, chẳng hạn như Kẻ thù, Lava, Tia Laser, v.v. Những vật thể này có thể sẽ có các thẻ khác nhau. Vì vậy, kịch bản trên Trình phát sẽ trở thành:
OnCollisionEnter(Collision coll) {
GameObject other = coll.gameObject;
if (other.compareTag("Spike") || other.compareTag("Lava") || other.compareTag("Enemy")) {
Destroy(gameObject);
}
}
Trong khi đó, trong trường hợp tập lệnh trên Spike, tất cả những gì bạn cần làm là thêm tập lệnh tương tự vào tất cả các đối tượng khác có thể giết Người chơi và đặt tên cho tập lệnh theo cách tương tự KillPlayerOnContact
.
Ngoài ra, nếu bạn có một sự va chạm giữa Người chơi và Kẻ thù, thì bạn có thể muốn thực hiện một hành động trên cả hai . Vậy trong trường hợp đó, đối tượng nào nên xử lý vụ va chạm? Hay cả hai nên xử lý va chạm và thực hiện các hành động khác nhau?
Tôi chưa bao giờ xây dựng một trò chơi có kích thước hợp lý trước đây và tôi tự hỏi liệu mã có thể trở nên lộn xộn và khó bảo trì khi nó phát triển nếu bạn gặp phải loại điều này ngay từ đầu. Hoặc có thể tất cả các cách là hợp lệ và nó không thực sự quan trọng?
Bất kỳ cái nhìn sâu sắc được nhiều đánh giá cao! Cảm ơn bạn đã dành thời gian :)
Tag.SPIKE
thay thế?