मैं निम्नलिखित कोड का उपयोग करके लक्ष्य को देखने के लिए अपने खेल चरित्र को घुमाता हूं:
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternion एक नया लक्ष्य दिए जाने पर चरित्र की वर्तमान रोटेशन है।
लुकक्वेरियन वह दिशा है जिसे चरित्र को देखना चाहिए और यह इस तरह सेट है:
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
टर्ननॉर्मालाइज़र सिर्फ बढ़ा हुआ है Time.deltaTime
और turningSpeed
संपादक में दिया गया एक स्थिर मूल्य है।
समस्या यह है कि जब चरित्र बदल जाता है, तो उसे अधिकतर समय होना चाहिए, जब उसे 180 डिग्री के करीब करना पड़ता है तो उसे समस्या होती है। फिर यह कई बार जिटर्स और रोटेशन को मिरर करता है:
इस खराब खींची गई छवि में चरित्र (दाईं ओर) बाईं ओर सर्कल की ओर मुड़ना शुरू कर देता है। केवल या तो बाएं या दाएं से मुड़ने के बजाय यह "दर्पण नृत्य" शुरू करता है:
- यह नए फेसिंग की ओर घूमने लगता है
- फिर यह अचानक उसी कोण पर जाता है लेकिन दूसरी तरफ और घूमता रहता है
यह "मिररिंग" तब तक करता है जब तक कि वह लक्ष्य को न देख ले। क्या यह चतुर्भुज के साथ एक बात है, थप्पड़ मारना / झूठ बोलना या कुछ और?
EDIT1: जाहिरा तौर पर यह मुद्दा घूर्णन से उत्पन्न नहीं होता है। अधिक संभावना मुद्दा यह है कि चरित्र घूमते समय सामना की ओर बढ़ता है। सामना करने और लक्ष्य के बीच कोण को सीमित करने के रूप में, जब चरित्र को कम करने की अनुमति दी जाती है और कई बार घबराना / मिररिंग रोटेशन को समाप्त करता है।
यह निश्चित रूप से अधिक प्रश्न उठाता है कि चरित्र मुद्दों के बिना एक ही समय पर क्यों नहीं घूम सकता है? आंदोलन के लिए उपयोग किया जाने वाला कोड:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);