วิธีการใช้การตรวจสอบการชนกันของพอร์ทัล?


12

ตัวอย่างเช่นใช้สถานการณ์นี้ (ขอโทษทักษะการวาดที่น่ากลัวของฉัน): ภาพ

สิ่งนี้ขึ้นอยู่กับ "Portal" ซึ่ง stickman กำลังผ่านพอร์ทัลสีน้ำเงิน (ซึ่งเชื่อมโยงกับพอร์ทัลสีแดง) แต่มีกำแพงหยุดเขาบนพอร์ทัลแดง ดังนั้นเขาไม่สามารถผ่านพอร์ทัลได้อย่างสมบูรณ์

ดังนั้นคำถามของฉันคือ: ฉันจะตรวจจับฟิสิกส์ / การชนกับพวกเขาได้อย่างไร ฉันจะฝานเครื่องเล่นหรือไม่ มีวิธีเชื่อมโยงพวกเขาหรือไม่ มีเอ็นจิ้นฟิสิกส์ที่สนับสนุนการทำเช่นนี้หรือไม่ ถ้าไม่ฉันจะทำอย่างไร


เท่าที่ฉันรู้พวกเขาอธิบายบางสิ่งในความเห็นของผู้พัฒนา Portal 1
Archy


@ Byte56 ขอบคุณฉันอัปเดตโพสต์ของฉัน ผมคิดว่านี่ควรชี้แจงมันมากขึ้น :)
MiJyn

1
ฉันคิดว่าสถานการณ์ที่คุณอธิบายนั้นผิดปกติมากในพอร์ทัล (ถ้าเคยเกิดขึ้น) เนื่องจากพอร์ทัลไม่ใช่ตำแหน่งลอยอิสระ พวกเขาถูกวางไว้บนผนังและผนังเฉพาะที่เฉพาะเจาะจง ฉันจำไม่ได้ว่าสถานการณ์ที่ฉันสามารถวางพอร์ทัลได้ แต่ไม่สามารถผ่านไปได้เนื่องจากมีสิ่งกีดขวางที่ปลายอีกด้านหนึ่งของพอร์ทัล ฉันคิดว่าคุณสามารถสร้างสำเนาชั่วคราวของผู้เล่นในทั้งสองสถานที่สำหรับช่วงการเปลี่ยนภาพ
MichaelHouse

2
@ Byte56: คุณต้องจำไม่ได้มาก ฉันจำได้ว่าสิ่งนี้เกิดขึ้นในพอร์ทัล 1 ฉันดูเหมือนจะจำพื้นที่ที่ถูกทับอัดซึ่งใคร ๆ ก็สามารถใช้พอร์ทัลเพื่อหลีกเลี่ยงการเสียชีวิตได้ การปะทะกับสิ่งที่อยู่ใกล้กับพอร์ทัลเป็นสิ่งที่เกิดขึ้นทั่วไปและเครื่องยนต์จะจัดการได้อย่างง่ายดาย
Nicol Bolas

คำตอบ:


7

พอร์ทัลเกมมีวิธีที่ดีโดยที่พวกเขาแก้ปัญหานี้:

ผู้เล่นแทงผ่านพอร์ทัลต้นทาง (สีน้ำเงิน) และเห็นโผล่ออกมาจากพอร์ทัลเป้าหมาย (สีส้ม) ผู้เล่นจะถูกคัดลอกไปยังพอร์ทัลเป้าหมายและเห็นการก้าวผ่านมัน เกมแสดงภาพที่คุณเห็นเมื่อมองผ่านพอร์ทัลต้นทางโดยใช้กล้องตัวที่สองและแสดงผลเป็นพื้นผิว

อย่างไรก็ตามสำเนาของผู้เล่นที่ตำแหน่งเป้าหมายไม่ได้มีปฏิสัมพันธ์กับฟิสิกส์ มันมีเพื่อการแสดงผลเท่านั้น แต่จะสร้างวัตถุการชนเสมือนที่ด้านอื่น ๆ ของพอร์ทัลต้นทางและทำให้ผู้เล่นชนกับสิ่งนั้นแทน สิ่งนี้ทำให้ฟิสิกส์ง่ายขึ้น

คุณต้องการเพียงวัตถุเสมือนเหล่านั้นเท่าที่ผู้เล่นสามารถเข้าถึงได้โดยไม่ต้องผ่านพอร์ทัล ทันทีที่ผู้เล่นผ่านเข้าสู่พอร์ทัลอย่างสมบูรณ์สถานการณ์จะกลับด้าน

รูปภาพที่แสดง : พอร์ทัลสีน้ำเงินคือพอร์ทัลต้นทางพอร์ทัลสีส้มเป็นพอร์ทัลเป้าหมาย กล่องสีขาวประคือวัตถุที่มีการชนเสมือนจริงในขณะที่กล่องจริงเป็นวัตถุที่แสดงผล ผู้เล่น (มีจุดสีแดง) จะโต้ตอบกับวัตถุที่อยู่รอบ ๆ เท่านั้น วัตถุที่พอร์ทัลสีส้มจะถูกละเว้นอย่างสมบูรณ์

ป้อนคำอธิบายรูปภาพที่นี่


4
" ใช้กล้องตัวที่สองและ render-to-texture " คำอธิบายของนักพัฒนาบนพอร์ทัล 1 กล่าวอย่างชัดเจนว่าพวกเขาไม่ได้ใช้ render-to-texture เพราะมันใช้งานไม่ได้กับความต้องการของพวกเขา (โดยเฉพาะเมื่อมองจากพอร์ทัลอื่น ) แต่โดยทั่วไปแล้วพวกเขาจะเปลี่ยนเวอร์ชั่นของโลกเป็นอีกด้านหนึ่งของพอร์ทัล
Nicol Bolas

ว้าวคำตอบนี้เกือบทุกอย่าง! ฉันแค่สงสัยว่ามันจะทำงานโดยพอร์ทัลเป็นหลุมกับวัตถุภายในหรือไม่
MiJyn

6

นี่คือวิธีที่ฉันจะลองทำ

ในขณะที่คุณอยู่ในพอร์ทัลจะมีผู้เล่นสองคนในเอนจิ้นฟิสิกส์ แต่ละสำเนาจะไม่สนใจการชนทั้งหมดที่อยู่ฝั่งตรงข้ามของพอร์ทัลจากนั้นคุณรวมผลลัพธ์และใช้ผลการจำลองกับทั้งสองรุ่น

เป็นการดีที่คุณจะใช้แรงโน้มถ่วงแยกกันสำหรับผู้เล่นแต่ละคนในครึ่งหนึ่ง แต่คุณอาจจะสามารถหนีไปได้ด้วยการใช้มันกับด้านข้างของพอร์ทัลที่ศูนย์กลางของผู้เล่นเปิดอยู่

ในการเพิกเฉยการชนเหล่านั้นคุณต้องตั้งค่าระดับเสียงที่เหมาะสมและทดสอบว่ามีจุดใดอยู่ภายใน รูปทรงกระบอก (อาจยืดในแนวตั้ง) น่าจะเป็นตัวเลือกที่ดี การทดสอบนั้นเป็นสิ่งที่ชอบif (!collisionPoint.InsideCylinder(portal)) ProcessCollision(); else IgnoreCollision();

ฉันเชื่อว่าเอนจิ้นฟิสิกส์ส่วนใหญ่มีระบบสำหรับกรองสิ่งที่วัตถุสามารถชนกันได้ดังนั้นควรใช้เครื่องยนต์ฟิสิกส์มาตรฐาน ตัวอย่างเช่นhttp://bulletphysics.org/mediawiki-1.5.8/index.php/Collision_Filtering#Custom_collision_filtering

ในการรวมผลลัพธ์เข้าด้วยกันตัวเลือกที่ง่ายที่สุดอาจจะเป็นการเพิ่มข้อ จำกัด ที่ยืดหยุ่นระหว่างสองสิ่งนี้และให้เครื่องยนต์ฟิสิกส์จัดการ


อืมโอเคฉันจะทำสิ่งนี้ได้อย่างไร ฉันได้รับส่วนเกี่ยวกับการคัดลอกผู้เล่น แต่นอกเหนือจากนั้นฉัน clueless ฉันจะละเว้นการชนจากด้านตรงข้ามได้อย่างไร ฉันจะรวมผลลัพธ์ได้อย่างไร
MiJyn

ฉันแก้ไขรายละเอียดเพิ่มเติมแล้ว
Adam

ขอบคุณผมจะคิดเกี่ยวกับเรื่องนี้และตอบกลับในภายหลังเมื่อฉันสามารถตั้งค่าตรงนี้ในหัวของฉัน :)
MiJyn

ขอบคุณมากคำตอบของคุณและ Virtlink ตอบคำถามของฉัน :) ตอนนี้ตัดสินใจว่าจะตั้ง "คำตอบที่ถูกต้อง" เป็น ...
MiJyn

4

ฉันจะคำนวณว่าผู้เล่นลงไปได้ไกลแค่ไหน?

ทำไมคุณต้องการที่จะ? คุณไม่จำเป็นต้องคำนวณว่าผู้เล่นลงไปไกลแค่ไหน; คุณจะพบว่าไกลแค่ไหนเมื่อวัตถุผ่านการจำลอง

ฉันจะเชื่อมต่อพอร์ทัลได้อย่างไร

พอร์ทัลจากมุมมองในเกมล้วน ๆ เป็นเพียงเทเลพอร์เทอร์ที่บรรจงซับซ้อนซึ่งยุ่งกับการชนเพื่อเปลี่ยนวัตถุที่ชนกันให้กลายเป็นวัตถุที่ไม่สามารถชนกันได้ เมื่อวัตถุสัมผัสกับพอร์ทัลวัตถุนั้นก็จะเริ่มปะทะกับสิ่งต่าง ๆ ในอีกด้านหนึ่ง เมื่อวัตถุผ่าน "ไกลพอ" ถึงพอร์ทัลคุณจะเคลื่อนย้ายวัตถุไปยังอีกวัตถุหนึ่งอย่างมีประสิทธิภาพซึ่งจะเปลี่ยนตำแหน่งและการวางแนวทันที

ฟิสิกส์ดำเนินการได้ตามปกติ


When an object touches the portal, it starts potentially colliding with things on the other sideใช่แน่นอน ฉันจะทำสิ่งนี้กับเครื่องยนต์ฟิสิกส์ได้อย่างไร? ฉันเดาว่าเป็นคำถามของฉัน :)
MiJyn

@MiJyn: คุณเขียนเอนจิ้นฟิสิกส์ที่สามารถทำได้ Valve จำเป็นต้องทำลายเอ็นจิ้น Source เพื่อให้พอร์ทัลใช้งานได้จริง ไม่มีเครื่องยนต์ฟิสิกส์เชิงพาณิชย์หรือโอเพนซอร์ซทำตามธรรมชาติได้ มีเหตุผลทำไมถึงแม้ว่าความนิยมของพอร์ทัลไม่มีคะแนนของการโคลนนิ่งของพอร์ทัลในตลาด
Nicol Bolas

น่าสนใจเพราะมีเกมอื่นอีกมากมายที่มีกลไกคล้ายกันมาก (ดูแม้กระทั่ง TARDIS mod สำหรับ minecraft) ฉันแน่ใจว่าต้องมีบางวิธีที่จะทำมันได้อย่างง่ายดาย
MiJyn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.