Làm thế nào để thực hiện phát hiện va chạm của cổng?


12

Ví dụ: lấy kịch bản này (xin lỗi kỹ năng vẽ khủng khiếp của tôi): hình ảnh

Điều này dựa trên "Cổng thông tin", nơi người dính đang đi qua cổng màu xanh lam (được liên kết với cổng thông tin màu đỏ), nhưng có một bức tường ngăn anh ta trên cổng thông tin màu đỏ. Vì vậy, anh ta không thể đi hoàn toàn qua cổng.

Vì vậy, câu hỏi của tôi là: Làm thế nào để tôi phát hiện vật lý / va chạm với chúng? Tôi có cắt lát người chơi không? Có cách nào để liên kết chúng? Có bất kỳ động cơ vật lý hỗ trợ làm điều này? Nếu không, làm thế nào tôi có thể làm cho một?


Theo như tôi biết họ giải thích một số nội dung trong phần bình luận dành cho nhà phát triển của Cổng thông tin 1.
Archy


@ Byte56, cảm ơn, tôi đã cập nhật bài viết của mình. Tôi nghĩ điều này sẽ làm rõ hơn :)
MiJyn

1
Tôi nghĩ rằng tình huống bạn mô tả là rất hiếm trong cổng thông tin (nếu nó xảy ra) vì các cổng không phải là vị trí nổi miễn phí. Chúng được đặt trên các bức tường, và chỉ các bức tường cụ thể. Tôi không nhớ lại một tình huống mà tôi đã có thể đặt một cổng thông tin, nhưng không thể đi qua nó do một vật cản ở đầu kia của cổng thông tin. Tôi tưởng tượng bạn có thể tạo một bản sao tạm thời của trình phát ở cả hai vị trí trong giai đoạn chuyển tiếp.
MichaelHouse

2
@ Byte56: Bạn không cần nhớ nhiều lắm. Tôi nhớ điều này được thực hiện trong Cổng thông tin 1. Tôi dường như nhớ lại một khu vực nghiền nát nơi người ta có thể sử dụng một cổng thông tin để tránh chết. Va chạm với những thứ gần cổng là một sự cố phổ biến và động cơ xử lý nó dễ dàng.
Nicol Bolas

Câu trả lời:


7

Các Portal trò chơi có một cách tốt đẹp mà họ giải quyết vấn đề này:

Người chơi dính qua cổng nguồn (màu xanh) và được nhìn thấy đang ló ra khỏi cổng đích (màu cam). Người chơi được sao chép vào cổng thông tin đích và thấy bước qua nó. Trò chơi kết xuất hình ảnh bạn nhìn thấy khi nhìn qua cổng nguồn bằng cách sử dụng máy ảnh thứ hai và kết xuất đồ họa.

Tuy nhiên, bản sao của người chơi tại vị trí mục tiêu không tương tác với vật lý. Nó chỉ ở đó cho mục đích kết xuất. Thay vào đó, họ tạo các đối tượng va chạm ảo ở phía bên kia của cổng nguồn và thay vào đó làm cho người chơi va chạm với nó. Điều này giữ cho vật lý đơn giản.

Bạn chỉ cần những vật thể ảo đó trong chừng mực mà người chơi có thể tiếp cận mà không cần đi qua cổng. Ngay khi người chơi đi qua cổng đầy đủ, tình hình đã đảo ngược.

Một hình ảnh để minh họa : Cổng thông tin màu xanh là cổng thông tin nguồn, cổng thông tin màu cam là cổng thông tin đích. Hộp trắng nét đứt là đối tượng va chạm ảo, trong khi hộp thực là đối tượng được hiển thị. Người chơi (có chấm đỏ) chỉ tương tác với các vật thể trực tiếp xung quanh nó. Các đối tượng tại cổng thông tin màu cam hoàn toàn bị bỏ qua.

nhập mô tả hình ảnh ở đây


4
" sử dụng máy ảnh thứ hai và kết xuất đồ họa " Các nhà bình luận của các nhà phát triển trên Portal 1 nói rõ ràng rằng họ không sử dụng kết xuất đồ họa, bởi vì điều đó không hoạt động tốt cho nhu cầu của họ (đặc biệt là khi nhìn thấy các cổng từ các cổng khác ). Thay vào đó, về cơ bản, họ biến đổi một phiên bản của thế giới sang phía bên kia của cổng thông tin và chỉ hiển thị lại thông qua nó.
Nicol Bolas

Wow, câu trả lời này gần như tất cả mọi thứ! Tôi chỉ tự hỏi, nó hoạt động bởi cổng thông tin là một lỗ với các đối tượng bên trong?
MiJyn

6

Đây là cách tôi thử và làm nó.

Trong khi bạn đang ở trong một cổng thông tin, sẽ có hai bản sao của trình phát trong công cụ vật lý. Mỗi bản sao bỏ qua tất cả các va chạm ở phía đối diện của cổng và sau đó bạn kết hợp các kết quả và áp dụng kết quả mô phỏng cho cả hai mô hình.

Lý tưởng nhất là bạn áp dụng trọng lực riêng cho từng nửa người chơi, nhưng bạn có thể thoát khỏi việc chỉ áp dụng nó cho bên cạnh cổng thông tin mà trung tâm của người chơi đang bật.

Để bỏ qua những va chạm đó, bạn cần thiết lập một âm lượng phù hợp và kiểm tra xem một điểm có nằm trong đó không. Một hình trụ (có thể kéo dài theo chiều dọc) dường như là một lựa chọn tốt. Bài kiểm tra sau đó giống nhưif (!collisionPoint.InsideCylinder(portal)) ProcessCollision(); else IgnoreCollision();

Tôi tin rằng hầu hết các động cơ vật lý đều có một hệ thống để lọc những gì một vật thể có thể va chạm với nhau, vì vậy có thể sử dụng một động cơ vật lý tiêu chuẩn. Ví dụ: http://bONSphysics.org/mediawiki-1.5.8/index.php/Collision_Filtering#Custom_collision_filtering

Để kết hợp các kết quả, tùy chọn đơn giản nhất có lẽ là thêm một số loại ràng buộc không linh hoạt giữa hai loại và để cho động cơ vật lý xử lý nó.


Hmm, được rồi, tôi sẽ làm điều này như thế nào? Tôi có một phần về việc sao chép trình phát, nhưng ngoài ra, tôi không biết gì. Làm thế nào tôi có thể bỏ qua các va chạm từ phía đối diện? Làm thế nào tôi thậm chí sẽ kết hợp các kết quả?
MiJyn

Tôi đã chỉnh sửa một số chi tiết.
Adam

cảm ơn, tôi sẽ suy nghĩ về điều này và trả lời sau khi tôi có thể đặt thẳng điều này trong đầu :)
MiJyn

Cảm ơn rất nhiều, câu trả lời của bạn và câu trả lời của Virtlink của tôi :) Bây giờ để quyết định nên đặt "câu trả lời đúng" cho ...
MiJyn 15/03/13

4

Làm thế nào tôi có thể tính toán bao xa người chơi đi xuống?

Tại sao bạn sẽ muốn? Bạn không cần tính toán người chơi sẽ "đi xuống" bao xa; bạn sẽ tìm ra nó đi được bao xa khi đối tượng đi qua mô phỏng.

Làm thế nào tôi thậm chí sẽ kết nối các cổng?

Một cổng thông tin, từ góc độ hoàn toàn trong trò chơi, không khác gì một máy dịch chuyển công phu phức tạp, gây rối với sự va chạm để biến các vật thể có thể va chạm thành vật thể không thể va chạm. Khi một đối tượng chạm vào cổng, nó bắt đầu có khả năng va chạm với những thứ ở phía bên kia. Khi đối tượng vượt qua "đủ xa" qua cổng, bạn dịch chuyển nó sang đối tượng khác một cách hiệu quả, ngay lập tức thay đổi vị trí và hướng của nó.

Vật lý đơn giản là tiến hành như bình thường.


When an object touches the portal, it starts potentially colliding with things on the other sideđúng chính xác. Làm thế nào tôi có thể làm điều này với một động cơ vật lý? Tôi đoán đó là câu hỏi của tôi :)
MiJyn

@MiJyn: Bạn viết một công cụ vật lý có thể làm điều đó. Valve về cơ bản đã phải phá vỡ công cụ Nguồn để làm cho Portal thực sự hoạt động. Không có động cơ vật lý thương mại hoặc nguồn mở tự nhiên có thể làm điều đó. Có một lý do tại sao, mặc dù sự phổ biến của Portal, không có điểm số của bản sao Portal trên thị trường.
Nicol Bolas

Thật thú vị, vì có rất nhiều game khác có cơ chế rất giống nhau (xem cả mod TARDIS cho minecraft). Tôi chắc chắn rằng phải có một số cách để làm điều đó một cách dễ dàng.
MiJyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.