2015-06-13 30 views
6

Tôi có một dự án Unity trong đó có một thế giới trò chơi 2D bao gồm các va chạm tĩnh để làm cho hình học vững chắc với các ký tự nằm trong đó. Người chơi là một người va chạm năng động (với một người cứng nhắc phi kinematic). Ngoài ra còn có một nhân vật kẻ thù cũng là một máy va chạm năng động. Cả hai nhân vật đi bộ trên sàn nhà và va vào tường như tôi mong đợi họ.Làm cho hai đối tượng vật lý không va chạm nhưng phát hiện va chạm trong Unity

Điều tôi muốn đạt được là người chơi và kẻ thù không vững chắc với nhau, để họ có thể di chuyển qua nhau. Tôi đã đạt được điều này bằng cách đặt kẻ thù và người chơi lên các lớp riêng biệt và thiết lập ma trận va chạm sao cho những lớp này không va chạm với nhau. Vấn đề tôi đang gặp bây giờ, tuy nhiên, là tôi muốn phát hiện có hay không kẻ thù và người chơi chạy vào nhau. Tôi đã thêm một máy va chạm kích hoạt vào nhân vật địch, nó nằm trên lớp kẻ thù, có nghĩa là nó không phát hiện va chạm với người chơi.

Tôi đã nghĩ đến việc tạo một trò chơi phụ cho kẻ thù, đặt nó lên lớp của người chơi, thêm một vật cứng và kích hoạt va chạm vào nó và sử dụng nó để phát hiện va chạm giữa người chơi và kẻ thù, nhưng nó cảm thấy quá phức tạp nó để tôi tự hỏi nếu không có một giải pháp thanh lịch hơn cho việc này.

Trả lời

3

Có, bạn cần tạo một đứa trẻ GameObject, với trình kích hoạt trình kích hoạt và đặt nó vào một lớp tương tác với lớp trình phát.

Không, bạn không cần phải thêm Rigidbody vào GameObject mới, vật cứng nhắc của cha mẹ đã biến nó thành máy va chạm động, vì vậy bạn sẽ nhận được OnTrigger sự kiện.

Như một lưu ý phụ, chỉ để giữ mọi thứ có tổ chức, nếu bạn tạo một đứa trẻ của kẻ thù không đặt nó trong lớp người chơi. Ví dụ, trong tương lai bạn có thể cần phải vô hiệu hóa va chạm lớp của người chơi với chính nó. Hơn nữa, nếu người chơi của bạn tương tác theo cách này với nhiều vật thể, tôi sẽ đặt một kích hoạt duy nhất lên người chơi thay vì kẻ thù, trên một lớp riêng biệt PlayerTrigger, chỉ để giữ mọi thứ đơn giản.

Không có cách nào đơn giản hơn? Không hẳn. Bạn chắc chắn cần không tương tác giữa người chơi và kẻ thù va chạm, nhưng một số loại tương tác giữa chúng quá. Vì vậy, một trong số họ cần phải trải dài hai lớp, hoặc toàn bộ tương tác sẽ được mô tả bởi một bool đơn. Động cơ vật lý xử lý rất nhiều thông tin trong một lần, vì vậy bạn có thể thiết lập tất cả các lớp và xung đột mà bạn muốn, nhưng trong vòng lặp vật lý, bạn không còn kiểm soát được điều gì xảy ra. Bạn không thể yêu cầu động cơ bỏ qua va chạm giữa hai đối tượng. Chỉ có 32 lớp và khiến chúng hoạt động theo cách cứng nhắc mà chúng thực sự là thực hiện tối ưu hóa nặng . Nếu bạn quan tâm đến hiệu suất để tạo lớp khác, hãy tắt tương tác giữa các lớp bạn không cần, như lớp trình kích hoạt và sàn và tường hoặc các lớp không chạm vào nhau.

Cách thay thế của bạn là thực hiện tất cả theo mã, thậm chí còn kém thanh lịch hơn. Một viên nang con duy nhất trên máy nghe nhạc không có âm thanh xấu bây giờ, phải không?

+0

Tôi đã làm những gì bạn nói và hoạt động bình thường. Tôi đã không thực sự nghĩ về việc đặt cò súng lên người chơi, vì vậy tất cả kẻ thù của tôi có thể vẫn kích hoạt. Nó tiết kiệm rất nhiều rắc rối. – Jerry

Các vấn đề liên quan