एकता - वस्तुओं के लिए जेड परत में आदेश


11

क्षमा करें, यदि शीर्षक वास्तव में मेरा प्रश्न नहीं है, तो मैं वास्तव में नहीं जानता कि इसका वर्णन कैसे किया जाए।

मेरे पास मेरे शहर के फर्श के लिए एक छवि है और सभी दीवारों या पेड़ों के लिए एक छवि (समान आकार) है जिसे खिलाड़ी को पीछे छिपाना चाहिए, अगर वह इसके पीछे चलता है। मेरा परिणाम भी इतना बुरा नहीं लगता:

समस्या यह है कि यदि खिलाड़ी दीवार के सामने से चलता है, तो वह गायब हो जाता है, क्योंकि दीवार की परत खिलाड़ी के क्रम से ऊपर है:

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

क्या इसे ठीक करने का एक सरल तरीका है, या क्या मुझे उन सभी वस्तुओं को मैन्युअल रूप से जोड़ना होगा और उन्हें कुछ लिपियों से जोड़ना होगा?

जवाबों:


17

इस प्रभाव को प्राप्त करने के लिए:

दो छँटाई परतें बनाएँ : ग्राउंड और ऑब्जेक्ट्स

ग्राउंड लेयर का उपयोग करने के लिए अपनी सड़क, घास और पथ स्प्राइट्स का उपयोग करें।

अपने चरित्र, दीवारों, और घर स्प्राइट्स का उपयोग करें।

अपने ऑब्जेक्ट्स लेयर पर स्प्राइट्स चाहते हैं कि उनका स्प्राइट मोड पिवोट पॉइंट बॉटम लेफ्ट, बॉटम या बॉटम राइट हो। आप अपने प्रोजेक्ट टैब के भीतर स्प्राइट का चयन करके इसे चुन सकते हैं, और स्प्राइट की आयात सेटिंग्स को समायोजित करने के लिए इंस्पेक्टर टैब में पिवट पॉइंट चुन सकते हैं

स्प्राइट आयात सेटिंग्स

ग्राउंड स्प्राइट्स के लिए, आपको उनका ऑर्डर बदलने की चिंता नहीं करनी होगी।

वस्तुओं के लिए, हालाँकि, आप या तो उनके स्प्राइट रेंडरर के क्रम को बदल सकते हैं, या उनके transform.position.zमूल्य को बदल सकते हैं । मैं परिवर्तन को बदलने की सलाह दूंगा, क्योंकि झांकियों को देखने और समायोजित करने में आसानी होगी क्योंकि आप अपने चरित्र को चारों ओर ले जाते हैं, जबकि छँटाई क्रम को बदलने से कुछ स्थितियों में सटीक नहीं लग सकता है, यह आपकी वस्तुओं के माप और आकार पर निर्भर करता है। दृश्य में।

किसी भी स्थिति में, कुछ कोड की आवश्यकता होगी।

public class SpritePositionSetter : MonoBehaviour {

    void Awake () {
        SetPosition();
    }

    void Update () {
        SetPosition();
    }

    void SetPosition () {
        // If you want to change the transform, use this
        Vector3 newPosition = transform.position;
        newPosition.z = transform.position.y;
        transform.position = newPosition;

        // Or if you want to change the SpriteRenderer's sorting order, use this
        GetComponent<SpriteRenderer>().sortingOrder = (int)transform.position.y;
    }

}

ऐसा करने के किसी भी तरीके के लिए, आप मूल रूप से स्प्राइट को अपने जेड इंडेक्स से अपनी वाई स्थिति से मेल खाते हुए बता रहे हैं।

यदि आप इस स्क्रिप्ट को एक स्थिर ऑब्जेक्ट (जैसे एक दीवार) से जोड़ते हैं, तो आप घटक को इंस्पेक्टर में अनचेक करना चाहेंगे ताकि इसकी Updateविधि को हर फ्रेम न कहा जाए; इसका Awakeतरीका SetPositionएक बार आएगा और आपको इसकी आवश्यकता होगी।

लेकिन अपने चरित्र के लिए, घटक को टिक कर छोड़ दें, ताकि हर फ्रेम पर Updateकॉल SetPositionआए, जिससे चरित्र का Z क्रम बदल जाएगा क्योंकि आप चारों ओर घूमते हैं। और जब तक आप आगे बढ़ते हैं, तब तक जब तक कि ऑब्जेक्ट की परत पर प्रत्येक स्प्राइट एक बॉटम पिवट पॉइंट का उपयोग कर रहा हो, Z इंडेक्स को बदलते समय आप अपने चरित्र को अन्य वस्तुओं के सामने या पीछे उचित रूप से प्रकट करना सुनिश्चित करेंगे।

अपने कैमरे के सेटअप के आधार पर, -1यदि चीजें पीछे की ओर लगती हैं , तो आपको नई Z स्थिति को गुणा करना पड़ सकता है ।

यदि आप अपने दृश्य को संपादित करते समय Z इंडेक्स को समायोजित करना चाहते हैं, तो ExecuteInEditMode देखें


मुझे पूरा यकीन है कि अगर घटक की शुरुआत नहीं है (तो) और न ही चलेगा। सजग () निष्क्रिय घटक पर चलता है, लेकिन प्रारंभ नहीं होता है।
उड़ी पोपोव

बस जाँच की गई; तुम सही हो। मैंने इसका उपयोग करने के लिए उदाहरण को अपडेट किया है Awake। धन्यवाद
क्रिस मैकफारलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.