यूनिटी का ऑनकॉलेक्शनइंटर मुझे सतह के मानक क्यों नहीं देता है, और उन्हें प्राप्त करने का सबसे विश्वसनीय तरीका क्या है?


11

एकता की टक्कर की घटना आपको एक टकराव की वस्तु देती है जो आपको हुई टक्कर के बारे में कुछ जानकारी देती है ( हिट मानदंडों के साथ संपर्क बिंदुओं की सूची सहित )।

लेकिन जो चीज आपको नहीं मिलती है वह आपके द्वारा हिट किए गए कोलाइडर के लिए सतही मानदंड है। यहाँ वर्णन करने के लिए एक स्क्रीनशॉट है। लाल रेखा से है ContactPoint.normalऔर नीली रेखा से है RaycastHit.normal

यहाँ छवि विवरण दर्ज करें

क्या यह एक सरल एपीआई प्रदान करने के लिए एकता छिपाने की जानकारी का एक उदाहरण है? या क्या मानक 3 डी रीयलटाइम टक्कर का पता लगाने की तकनीक सिर्फ इस जानकारी को एकत्र नहीं करती है?

और सवाल के दूसरे भाग के लिए, टकराव के लिए सतह को सामान्य करने के लिए एक निश्चित और अपेक्षाकृत कुशल तरीका क्या है?

मुझे पता है कि रेकास्टिंग आपको सतह के मानक प्रदान करता है, लेकिन ऐसा लगता है कि मुझे सभी परिदृश्यों के लिए इसे पूरा करने के लिए कई रेकास्ट करने की आवश्यकता है (शायद एक संपर्क बिंदु / सामान्य संयोजन पहली डाली पर कोलाइडर को याद करता है, या शायद आपको कुछ औसत करने की आवश्यकता है संपर्क अंक 'मानदंडों का सबसे अच्छा परिणाम प्राप्त करने के लिए)।

मेरी वर्तमान विधि:

  1. वापस Collision.contacts[0].pointअपने हिट सामान्य के साथ

  2. नकार हिट नीचे Raycast सामान्य के लिए float.MaxValue, परCollision.collider

  3. यदि वह विफल रहता है, तो गैर-नकारात्मक सामान्य के साथ चरण 1 और 2 दोहराएं

  4. यदि वह विफल रहता है, तो चरण 1 से 3 का प्रयास करें Collision.contacts[1]

  5. 4 तक दोहराएं जब तक कि सफल न हो या जब तक कि सभी संपर्क बिंदु समाप्त न हो जाएं।

  6. हार मान लो, लौट जाओ Vector3.zero

यह सब कुछ पकड़ने के लिए लगता है, लेकिन उन सभी किरणों ने मुझे परेशान कर दिया है, और मुझे यकीन नहीं है कि यह कैसे परीक्षण किया जाए कि यह पर्याप्त मामलों के लिए काम करता है। क्या कोई बेहतर तरीका है?

संपादित करें यदि यह वास्तव में सिर्फ 3 डी टक्कर के साथ चीजें हैं, तो सामान्य मामले में क्यों का एक सिंहावलोकन सिर्फ एकता के लिए कुछ के रूप में स्वागत किया जाएगा।


क्या यह सिर्फ जिज्ञासा के लिए है, या आप कुछ करने और अटकने की कोशिश कर रहे हैं? यही है, आपको क्यों लगता है कि आपको सतह को सामान्य करने की आवश्यकता है? एक अनिर्दिष्ट समस्या के समाधान को "ठीक" करने के बजाय आप किस प्रभाव को प्राप्त करने की कोशिश कर रहे हैं, इस बारे में एक प्रश्न पूछें, और कोई व्यक्ति आपको इसे हल करने में मदद करने में सक्षम हो सकता है। :)
सीन मिडिलडच

@SeanMiddleditch मैं सहमत नहीं हूँ। सवाल अच्छी तरह से रखा गया है और यह वास्तव में मैं देख रहा था। इस सवाल और इसके जवाब से मुझे कुछ सामान सही करने में मदद मिली जो मैं गलत कर रहा था।
स्टीकऑवरफ्लो

जवाबों:


12

यह वास्तव में सिर्फ उसी तरह है जैसे चीजें टकराव के साथ होती हैं। न सिर्फ 3 डी, बल्कि 2 डी भी। निम्नलिखित उदाहरण लें:

AABBs को ओवरलैप करना

हरे और लाल AABB टकरा रहे हैं, और संपर्क कई गुना नीला क्षेत्र है। संपर्क बिंदु कहीं न कहीं नीले क्षेत्र में होंगे (बिल्कुल जहां एल्गोरिदम के साथ भिन्न हो सकते हैं, लेकिन वे कोने जहां नीले / लाल / हरे रंग के मिलते हैं, आदर्श-ईश हैं)।

किस सतह को सामान्य लौटाया जाना चाहिए? लाल AABB के ऊपरी किनारे या बाएँ किनारे? यदि हरे रंग का बॉक्स नीचे गिर रहा है, तो शायद हम शीर्ष बढ़त का अनुमान लगा सकते हैं। यदि यह सही चल रहा है, तो शायद हम बाएं किनारे का अनुमान लगा सकते हैं। क्या होगा अगर यह नीचे और सही चल रहा था? क्या हम कम से कम प्रवेश की धुरी लेते हैं? सबसे बड़ी गति का वेग अक्ष? दोनों के कुछ हेयुरिस्टिक? क्या होगा अगर बक्से कोनों पर बिल्कुल टकराए होंगे?

संभावित रूप से 100 ट्रिस / चेहरों से बना एक जटिल 3 डी सतह के लिए इसे बढ़ाएँ। आप अभी भी आदर्श-ईश संपर्क बिंदुओं की एक छोटी संख्या के लिए जा रहे हैं। किस सतह को सामान्य लौटाया जाना चाहिए? पूरे त्रि-जाल (जो अधिकांश वस्तुओं के लिए कोई मतलब नहीं है) पर औसत सतह सामान्य है? सीधे टकराव वाले बॉक्स के कोनों के नीचे "अंक" (जो कि अधिकांश अन्य आकृतियों के लिए अच्छी तरह से परिभाषित नहीं हैं)? क्या आप उत्पन्न संपर्क बिंदुओं के लिए निकटतम चेहरे को खोजने की कोशिश करते हैं (जिसके लिए किसी दूसरे पास की आवश्यकता होगी, क्योंकि संपर्क बिंदुओं की गणना सीधे किसी भी जाल से नहीं की जाती है)? यदि आप निकटतम चेहरा ढूंढते हैं, तो क्या आप चेहरे के सामान्य को लेते हैं या आप "चिकनी" वस्तुओं के लिए सही सामान्य प्राप्त करने के लिए संपर्क के बिंदु पर चेहरे के कोने को प्रक्षेपित करते हैं?

वास्तव में, प्राथमिक समस्या यह है कि संपर्क बिंदु सभी संपर्क बिंदु नहीं हैं। कई मामलों में, यह सब के बाद, अंकों का एक अनंत सेट होगा। वे बस कुछ ही बिंदु हैं जो अच्छी तरह से वितरित किए गए हैं जो उक्त बिंदुओं पर बलों को लागू करने के लिए एक प्रतिक्रियाशील-ईश तरीके से आसपास की वस्तुओं को धकेलने के लिए लगभग भौतिक प्रतिक्रिया को संभव बनाते हैं। वास्तविक वस्तु संपर्क के विशिष्ट बिंदुओं / स्थानों को एक सरलीकृत गणितीय मॉडल के पीछे हटा दिया जाता है। इसलिए, संपर्क की सामान्य सतह का सामान्य रूप से सामान्य मामले में अधिक अर्थ नहीं है।

बेशक, अपनी वस्तुओं, दुनिया और गति पर अधिक विशिष्ट बाधाओं और सीमाओं के साथ, आप वैकल्पिक टकराव एल्गोरिदम बना सकते हैं जो आपको सतह के बारे में सामान्य बता सकते हैं। उपरोक्त 2 डी मामले में, यदि हम मानते हैं कि बक्से कभी नहीं घूमते हैं और हम प्रत्येक के सापेक्ष वेग और अंतिम स्थिति को जानते हैं, तो टकराव का पता लगाने के लिए निरंतर टकराव का पता लगाने का उपयोग कर सकते हैं, जब वे टकराएंगे और कौन सी सुविधाएँ टकराएंगी, हमें आपूर्ति करना सटीक सुविधा जहां टकराव हुआ, जिसे तब संपर्क / टकराव / सतह के रूप में इस्तेमाल किया जा सकता था। प्लेटफ़ॉर्म गेम पूरी तरह से ऐसी धारणाओं और विशेष तरकीबों पर बनाए गए हैं (यही वजह है कि बॉक्स 2 डी या हॉक जैसी सामान्य भौतिकी पुस्तकालय का उपयोग करना या प्रकाश कभी भी मारियो या सोनिक जैसे क्लासिक प्लेटफ़ॉर्मर में आपको किसी भी प्रकार का तंग, सटीक नियंत्रण नहीं मिलता है; मैं नहीं कर सकता; कहना चाहता हूँ '

सामान्य न्यूटोनियन भौतिकी पुस्तकालय, जैसे कि यूनिटी 3 डी में उपयोग किया जाता है, उन प्रकार के सरलीकरण और मान्यताओं को नहीं बना सकता है। इसके लिए, आपको टकराव की सतह के मानक नहीं मिलते हैं, आपको संपर्क कई गुना मिलता है, आमतौर पर संपर्क बिंदुओं को सरल बनाया जाता है, और यह बात है।


यह एक शानदार जवाब है, और वास्तव में मैं क्या देख रहा था, धन्यवाद। विशिष्ट समस्या टकराव पर एक गतिज कठोरता पर एक स्पष्ट प्रतिबिंब वेक्टर हो रही थी। यदि आप इस तरह की जानकारी चाहते हैं कि क्या आप 3 कॉन्टेक्ट पॉइंट्स (यदि उपलब्ध हो) को रेकॉक करना चाहते हैं या क्रॉस उत्पाद लेना चाहते हैं तो क्या सामान्य दृष्टिकोण है?
michael.bartnett
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.