एकता की टक्कर की घटना आपको एक टकराव की वस्तु देती है जो आपको हुई टक्कर के बारे में कुछ जानकारी देती है ( हिट मानदंडों के साथ संपर्क बिंदुओं की सूची सहित )।
लेकिन जो चीज आपको नहीं मिलती है वह आपके द्वारा हिट किए गए कोलाइडर के लिए सतही मानदंड है। यहाँ वर्णन करने के लिए एक स्क्रीनशॉट है। लाल रेखा से है ContactPoint.normal
और नीली रेखा से है RaycastHit.normal
।
क्या यह एक सरल एपीआई प्रदान करने के लिए एकता छिपाने की जानकारी का एक उदाहरण है? या क्या मानक 3 डी रीयलटाइम टक्कर का पता लगाने की तकनीक सिर्फ इस जानकारी को एकत्र नहीं करती है?
और सवाल के दूसरे भाग के लिए, टकराव के लिए सतह को सामान्य करने के लिए एक निश्चित और अपेक्षाकृत कुशल तरीका क्या है?
मुझे पता है कि रेकास्टिंग आपको सतह के मानक प्रदान करता है, लेकिन ऐसा लगता है कि मुझे सभी परिदृश्यों के लिए इसे पूरा करने के लिए कई रेकास्ट करने की आवश्यकता है (शायद एक संपर्क बिंदु / सामान्य संयोजन पहली डाली पर कोलाइडर को याद करता है, या शायद आपको कुछ औसत करने की आवश्यकता है संपर्क अंक 'मानदंडों का सबसे अच्छा परिणाम प्राप्त करने के लिए)।
मेरी वर्तमान विधि:
वापस
Collision.contacts[0].point
अपने हिट सामान्य के साथनकार हिट नीचे Raycast सामान्य के लिए
float.MaxValue
, परCollision.collider
यदि वह विफल रहता है, तो गैर-नकारात्मक सामान्य के साथ चरण 1 और 2 दोहराएं
यदि वह विफल रहता है, तो चरण 1 से 3 का प्रयास करें
Collision.contacts[1]
4 तक दोहराएं जब तक कि सफल न हो या जब तक कि सभी संपर्क बिंदु समाप्त न हो जाएं।
हार मान लो, लौट जाओ
Vector3.zero
।
यह सब कुछ पकड़ने के लिए लगता है, लेकिन उन सभी किरणों ने मुझे परेशान कर दिया है, और मुझे यकीन नहीं है कि यह कैसे परीक्षण किया जाए कि यह पर्याप्त मामलों के लिए काम करता है। क्या कोई बेहतर तरीका है?
संपादित करें यदि यह वास्तव में सिर्फ 3 डी टक्कर के साथ चीजें हैं, तो सामान्य मामले में क्यों का एक सिंहावलोकन सिर्फ एकता के लिए कुछ के रूप में स्वागत किया जाएगा।