2012-03-10 6 views
6

मैं एकता का उपयोग करके अपना विकास शुरू कर रहा हूं। मैं ऐसा ही कुछ कर रहा हूँ:यूनिटी 3 डी सी # घूर्णन के बाद सही आगे की गणना

if(Input.GetKey(KeyCode.A))newValues[1]-=this.turnSpeed*(float)Time.deltaTime; 
    if(Input.GetKey(KeyCode.D))newValues[1]+=this.turnSpeed*(float)Time.deltaTime; 
    transform.Rotate(0, newValues[1], 0); 


    if(Input.GetKey(KeyCode.W))newValues[0]+=this.speed*transform.forward.z*(float)Time.deltaTime; 
    if(Input.GetKey(KeyCode.S))newValues[0]-=this.speed*transform.forward.z*(float)Time.deltaTime; 


    transform.position = new Vector3(transform.position.x, transform.position.y, (float)newValues[0]); 

तो मैं बारी बारी से और मैं ले जा सकते हैं, लेकिन यह सिर्फ जेड लाइन में ले जाता है, मुझे पता है मैं जेड विशिष्ट आंदोलन फोन कर रहा हूँ। लेकिन जावास्क्रिप्ट के साथ मैं कुछ कर सकते हैं

 transform.forward+=this.speed*transform.forward*(float)Time.deltaTime; 

तो मैं नए वेक्टर प्रक्रिया करते हैं और एक अलग चर को कॉपी करने के लिए की जरूरत नहीं है और यह एक आकर्षण की तरह काम करता खुद को जब करने के लिए अभिविन्यास के रूप में रोटेशन का उपयोग और उपयोग करते हुए, यह घुमाया गया है।

+0

आप शायद अपने शीर्षक और टैग संपादित करना चाहिए। उपयोग के रूप में एकता टैग एमएस आवेदन ब्लॉक में निर्भरता इंजेक्शन कंटेनर को संदर्भित करता है। आप शायद एकता-3 डी का जिक्र कर रहे हैं, भले ही यह गेमिंग के लिए है, तो आप एक उचित टैग जोड़ना चाहेंगे। – Tod

+0

क्या होता है यदि आप 'transform.forward + = this.speed * transform.forward * (float) Time.deltaTime डालते हैं;' सी # कोड में? जावास्क्रिप्ट और सी # प्रत्येक एक ही .NET इंटरमीडिएट भाषा के लिए संकलित करते हैं, इसलिए एक दूसरे में संभवतः कुछ भी संभव है, अगर थोड़ा अलग कोड किया जाए। –

+0

यह काम नहीं करता है, यह केवल पढ़ने योग्य चर – Lefsler

उत्तर

7

आप transform.forward के उपयोग को गलत समझ सकते हैं। transform.forward सिर्फ एक वेक्टर है जो आपको बताता है कि आपका गेम ऑब्जेक्ट चेहरा किस दिशा में है, यह transform.rotation पर निर्भर करता है।

आप अपने GameObject ले जाना चाहते हैं, हमेशा transform.position का उपयोग करें:

transform.position += this.speed * transform.forward * (float)Time.deltaTime; 
+1

धन्यवाद है, लेकिन मैं रोटेशन को कैसे कार्यान्वित करता हूं? – Lefsler

+2

बहुत पुराना धागा, लेकिन जैसा कि आपने उल्लेख किया है, "यदि आप अपना गेम ऑब्जेक्ट ले जाना चाहते हैं, तो हमेशा ट्रांसफॉर्मेशन का उपयोग करें" वास्तव में यदि ऑब्जेक्ट ऑब्जेक्ट कठोर है तो इसे बल जोड़कर इसे स्थानांतरित करके ले जाना चाहिए, अवास्तविक व्यवहार का कारण बनता है। लेकिन किनेमेटिक निकायों के लिए आपका कथन सत्य है – Eklavyaa

+0

आप सही हैं, @Eklavyaa – Chchwy

संबंधित मुद्दे