वर्तमान में, मैं इकाइयों के स्थानीय परिहार के लिए भौतिकी प्रभाव बलों का अनुकरण कर रहा हूं, लेकिन यह विधि कभी-कभी इकाइयों को गठन से बाहर धकेलती है और जब यूनिट टकराती हैं तो बहुत अवांछनीय प्रभाव पड़ता है।
आरटीएस गेम जैसे स्टारक्राफ्ट 2 के लिए, स्थानीय परिहार कैसे किया जाता है? क्या भौतिकी सिम्युलेटेड या एक सर्वव्यापी नियंत्रक तय करता है कि सब कुछ कहाँ होना चाहिए? मुझे पता है कि यह सवाल थोड़ा व्यापक हो सकता है इसलिए मैं विशेष रूप से यह पूछ रहा हूं कि स्टारक्राफ्ट 2 के स्थानीय परिहार व्यवहार को कैसे प्राप्त किया जाए; हालांकि कुछ भी है कि काम बहुत सराहना की जाएगी।
मैं किसी भी कोड की तलाश नहीं कर रहा हूं - सिर्फ उपयोगी संसाधन या स्पष्टीकरण कि कैसे Starcraft 2 (या इसी तरह के खेल) स्थानीय परिहार को संभालता है।
वर्तमान में, मुझे टक्कर का पता लगाने (पैठ वेक्टर के साथ), टकराव की ताकतों, और वेग द्वारा आंदोलन को लागू किया गया है। टक्कर के लिए प्रत्येक इकाई को दूसरे के खिलाफ जांचा जाता है - यदि वे टकराते हैं, तो वस्तुओं को पैठ वेक्टर द्वारा तुरंत ऑफसेट किया जाता है फिर टकराव बल लागू किया जाता है। फिर एक और लूप ऑब्जेक्ट्स को अपने वेग द्वारा ले जाता है और वेगों पर ड्रैग को लागू करता है। ऑफसेट टकरा इकाइयों पर लागू अत्यधिक टकराव बलों की समस्या को कम करता है, लेकिन इकाइयां अभी भी कभी-कभी बाहर गोली मारती हैं।
समाधान मैं निम्नलिखित आवश्यकताओं को पूरा करने की जरूरत है (के रूप में Starcraft 2 में):
- ऑब्जेक्ट्स ओवरलैप नहीं होते; या कम से कम ओवरलैप को अंततः हल किया जाना चाहिए।
- ऑब्जेक्ट एक दूसरे को आवश्यकता से अधिक दूर नहीं धकेलते हैं इसलिए 2 इकाइयां खड़ी हो सकती हैं और एक गठन में एक दूसरे के बगल में आगे बढ़ सकती हैं।
- जब कोई वस्तु एक ही गंतव्य की ओर बढ़ती है तो कोई भी अजीब व्यवहार नहीं करना चाहिए।
- विभिन्न आकारों की इकाइयों, और यहां तक कि अलग-अलग उत्तल आकृतियों का समर्थन कर सकते हैं।
जो मैं अभी तक सोच रहा था वह टक्करों का पता लगाने के बजाय, भविष्य की टक्करों का पता लगाने के लिए है ताकि ओवरलैप कभी न हो। फिर बाधा लागू करें, यह सुनिश्चित करते हुए कि 2 इकाइयों का वेग उन्हें ओवरलैप करने का कारण नहीं बनता है। मैं अभी भी ओवरलैप से परे आंदोलन को प्रतिबंधित करने के लिए एल्गोरिथ्म के साथ छेड़छाड़ कर रहा हूं।