मेरा स्प्राइट बाईं ओर चलता है, जैसा कि उसे होना चाहिए, लेकिन यह हिलना बंद कर देता है और ऑफस्क्रीन नहीं जाता है, जैसा कि मैं चाहता हूं। मानो कोई अदृश्य दीवार हो।

मैंने https://www.youtube.com/watch?v=YfIOPWuUjn8 आज़माया है .

वीडियो में, व्यक्ति का स्प्राइट पूरी तरह से स्क्रीन से हट जाता है लेकिन मेरा नहीं।

public Sprite Pokemon_0;
public Sprite Pokemon_1; 

void Update()
        {
        if (transform.position.x >= -40) 
        {
            this.gameObject.GetComponent<SpriteRenderer>().sprite = Pokemon_0;
            transform.Translate(-1f,0f,0f);
        }

मैं स्प्राइट पर काम कर रहा हूं जो बाईं ओर स्क्रीन से हट रहा है, और एक अलग स्प्राइट दाईं ओर से दिखाई दे रहा है और स्क्रीन के केंद्र में जा रहा है। कोड में दूसरे स्प्राइट के बारे में कुछ भी शामिल नहीं है, लेकिन इसीलिए मैंने अपने कोड में स्प्राइट का उल्लेख किया है।

1
HSN720 17 जुलाई 2019, 18:43

2 जवाब

सबसे बढ़िया उत्तर

आप इसे केवल बाईं ओर जाने के लिए कह रहे हैं if (transform.position.x >= -40)

तो या तो अपना कैमरा बदलें ताकि x = -40 आपकी स्क्रीन के बाहर हो, या बूलियन एक्सप्रेशन में मान को -40 से कुछ कम कर दें ताकि वह तब तक बाईं ओर आगे बढ़े जब तक कि वह हिलना बंद न कर दे, जैसे:

if (transform.position.x >= -80f) 
{
    transform.Translate(-1f,0f,0f);
}

साथ ही, GetComponent एक महंगी प्रक्रिया है, और आपको केवल एक बार स्प्राइट सेट करने की आवश्यकता है, इसलिए आपको एक Start विधि बनानी चाहिए जो स्प्राइट असाइनमेंट करता है। इस तरह, आप हर फ्रेम को एक ही घटक प्राप्त करने और स्प्राइट को असाइन करने में समय बर्बाद नहीं करते हैं जो पहले से ही इसे सौंपा गया है।

this.gameObject. हिस्सा बेमानी है, इसलिए आप उस हिस्से से भी छुटकारा पा सकते हैं:

Start()
{
    GetComponent<SpriteRenderer>().sprite = Pokemon_0; 
}
2
Ruzihm 17 जुलाई 2019, 22:45

रुज़ह्म के उत्तर में जोड़कर, आप इसका उपयोग करने का भी प्रयास कर सकते हैं

if (GetComponent<Renderer>().isVisible) 
{
    transform.Translate(-1f,0f,0f);
}

"-40f" या "-80f" जैसे नंबर का उपयोग करने के बजाय, आप यह सुनिश्चित कर सकते हैं कि स्प्राइट ऑफ स्क्रीन होगा।

1
Nícolas 18 जुलाई 2019, 00:40