जब मैं खेल में "स्क्रिप्ट" या "स्क्रिप्टिंग" का उपयोग करूंगा, तो मुख्य भाषा के विपरीत।


13

स्क्रिप्ट्स और स्क्रिप्टिंग का उपयोग गेम डेवलपमेंट स्टैक एक्सचेंज में परस्पर रूप से किया जाता है, लेकिन स्क्रिप्टिंग भाषा की पसंद के बारे में प्रश्न पढ़ने के अलावा, मैं स्क्रिप्ट और स्क्रिप्टिंग और मूल भाषा के बीच के संबंध को नहीं समझता। एक स्क्रिप्ट आमतौर पर क्या करती है, इसका उपयोग कब किया जाएगा, और स्क्रिप्टिंग भाषा की तुलना में कुछ संदर्भों में (गेम प्रोग्रामर द्वारा परिभाषित) स्क्रिप्ट्स हैं?


4
संभावित शिकार: gamedev.stackexchange.com/questions/2913/...
Tetrad

@ टेट्राड लिंक के लिए धन्यवाद, लेकिन मुझे लगता है कि अन्य प्रश्न "क्यों" के मौलिक वास्तुकला प्रश्न पर अधिक चर्चा करते हैं, जैसा कि क्या और कब के लिए विरोध किया गया है।

2
"क्या" और "जब" आपके उपयोग के मामलों के लिए विशिष्ट होने जा रहे हैं। "क्यों" आपको निर्णय लेने की क्षमता देता है। बारीकियों के बिना, यह सवाल एक डुपी (मेरी नजर में) है।
टेट्राद

जवाबों:


15

लिपियों को एक स्क्रिप्टिंग भाषा के लिए लिखा जाता है। लोग गाली देने के लिए उन शब्दों का उपयोग कर सकते हैं जिनका आप उल्लेख कर रहे हैं, लेकिन स्क्रिप्ट, स्क्रिप्टिंग और स्क्रिप्टिंग भाषा की परिभाषाओं के लिए किसी से भी पूछें और आपको कुछ ऐसा मिलेगा: स्क्रिप्टिंग स्क्रिप्टिंग भाषा का उपयोग करके स्क्रिप्ट लिखने का कार्य है।

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

विकास टीम के लिए इसके कुछ बड़े लाभ हैं, जिनमें से कुछ आप आगे सूचीबद्ध कर सकते हैं:

  • स्क्रिप्टिंग भाषाएं आमतौर पर मेमोरी प्रबंधित होती हैं, इसलिए आपको आवंटन के बारे में चिंता करने की आवश्यकता नहीं है
  • वे आमतौर पर एक शिथिल टाइप की भाषा है जो यह सुनिश्चित करने की आवश्यकता को हटा देती है कि आप जो कर रहे हैं उसके लिए चर प्रकार का उपयोग कर रहे हैं, बस एक चर बनाएं और इसके साथ जाएं।
  • जो लोग प्रोग्रामर नहीं हैं, उन पर भाषा का नियंत्रण बहुत सरल है
  • लिपियों को बदलने के लिए कोर इंजन को पुनःसंयोजित करने की आवश्यकता नहीं होती है।
  • स्क्रिप्टिंग बनाम कोडिंग अक्सर खेल तर्क के बहुत पुनरावृत्ति ट्यूनिंग के लिए आवश्यक समय कम कर देता है।
  • डिजाइन और भाषा के आधार पर, आप अक्सर एक स्क्रिप्ट को फिर से लोड कर सकते हैं, जबकि खेल और भी आसान ट्यूनिंग / परीक्षण के लिए चल रहा है।

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


9

पटकथा का उपयोग करने से "मूल भाषा" के कई फायदे हैं। इनमें से कुछ में शामिल हैं:

  • कोर डेवलपर्स से कलाकारों के लिए सामग्री का स्थानांतरण (अधिक), गेमप्ले कार्यों से इंजन डेवलपर्स को मुख्य कार्यों से मुक्त करना
  • लिपियों को सैंडबॉक्स किया जाता है, इसमें वास्तव में खतरनाक कुछ भी नहीं किया जा सकता है
  • स्क्रिप्ट को संशोधित करने के लिए खेल के पुनर्संयोजन और पुन: निष्पादन की आवश्यकता नहीं होती है

अपने पहले बुलेट बिंदु के लिए आप कार्यक्षमता के एक टुकड़े का एक उदाहरण प्रदान कर सकते हैं जिसे कलाकारों को संपादित करने के लिए एक स्क्रिप्ट में ले जाया जाएगा?

@ ब्रायन रिइंडेल उदाहरण हथियार / एनपीसी आँकड़े, एआई और मानचित्र / स्तर होंगे।
हैकवर्थ

1
@Hackworth क्या आप कह रहे हैं कि AI प्रोग्रामिंग कलाकारों द्वारा की जाती है? एक कलाकार द्वारा की जाने वाली स्क्रिप्टिंग में एनिमेशन और 3 डी ऑब्जेक्ट्स और इस तरह के प्रतिपादन के लिए स्क्रिप्ट शामिल होंगे।
KRB

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

1
@ अच्छी तरह से, मुद्दा यह है: वे "प्रकाश" प्रोग्रामिंग करते हैं, लेकिन वे "सामग्री" शिविर पर हैं। इसलिए शब्दावली मुश्किल है। =)
जरी कोमप्पा

6

एक स्क्रिप्ट आमतौर पर कोड का एक टुकड़ा होता है जो आपके कोर इंजन के बाहर चलता है। यह आमतौर पर पाठ फ़ाइलों के भीतर निहित होता है जहाँ भी आप उन्हें रखना पसंद करते हैं। फिर इसे आमतौर पर इंजन द्वारा लोड किया जाता है, पार्स किया जाता है, और रनटाइम पर निष्पादित किया जाता है।

आम तौर पर ऐसा होता है कि आप जिस भी भाषा का उपयोग करते हैं (उदाहरण के लिए Lua, Angelscript), इस भाषा में आमतौर पर कुछ सुविधाएं होती हैं जो इंजन प्रोग्रामर को इंजन-फ़ंक्शन या यहां तक ​​कि वर्तमान में चल रहे "स्क्रिप्टिंग इंजन" के उदाहरण के लिए संपूर्ण कक्षाओं को सक्षम करने में सक्षम बनाती हैं। ।

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

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

आपके द्वारा अब उपयोग की जाने वाली स्क्रिप्टिंग भाषा आपको इस फ़ंक्शन को उस स्क्रिप्टिंग पार्सर के लिए उजागर करने में सक्षम बनाती है जो चल रहा है। इसका प्रभावी रूप से मतलब है कि आप एक टेक्स्ट फ़ाइल खोल सकते हैं, "स्पॉन्ज ज़ोंबी (200,300,1337)" लिख सकते हैं और एक बार जब आपका इंजन कोड निष्पादित करता है, तो एक ज़ोंबी उस स्थान पर स्पॉन करेगा।

अन्य जवाब पहले से ही अच्छे उदाहरणों के एक जोड़े को सूचीबद्ध करते हैं कि यह कैसे उपयोग किया जाता है, लेकिन वे एक बिंदु छोड़ते हैं जो मुझे बहुत महत्वपूर्ण लगता है:

इस प्रकार की स्क्रिप्ट रनटाइम के दौरान गेमप्ले या टेस्ट गेमप्ले को बहुत आसान बनाती हैं।

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

स्क्रिप्टिंग समर्थन के साथ (आपको पहले से ही रनटाइम के दौरान पाठ में प्रवेश करने का कुछ तरीका है, उदाहरण के लिए डिबग कंसोल), आप बस "स्पॉन्जॉम्बी (333,444,555)" टाइप करें और देखें कि यह कैसा दिखता है।

उसी तरह से आपके लिए हथियार, वाहन, अलग-अलग मानचित्र लोड करना, खेल आदि में कुछ चीजों के मूल्यों को बदलना, दुश्मनों को भड़काना संभव हो सकता है क्योंकि आप उस हिस्से को प्राप्त करने में समय बर्बाद नहीं करना चाहते हैं जो होना चाहिए परीक्षण आदि

यह आपको अधिक जटिल खेलों में कई गुना अधिक बचाएगा।


2

1) लिपियों को कोड की तुलना में संशोधित करने के लिए अक्सर बहुत आसान होता है।

2) लिपियाँ अक्सर क्षेत्र-परिवर्तनीय होती हैं। यह खेल को नियंत्रित करने की अनुमति देता है।


तो क्या यह कहना उचित होगा कि आपकी स्क्रिप्ट तब ऐसी भाषाओं के साथ बनाई जाती हैं जो किसी के द्वारा संपादन योग्य होने के लिए संकलित नहीं हैं?

@ ब्रायन रिइंडेल: सामान्य तौर पर, हाँ।
लोरेन Pechtel

2

मुख्य इंजन में भाषा की तुलना में अधिकांश स्क्रिप्टिंग भाषाएं बहुत अधिक अभिव्यंजक हैं। अक्सर इंजन प्रदर्शन के कारणों के लिए एक अपेक्षाकृत निम्न-स्तरीय भाषा (जैसे। सी ++) में लिखा जाता है, लेकिन गेमप्ले कोड को प्रदर्शन करने की आवश्यकता नहीं होती है और इसलिए प्राथमिकता आसानी से कार्यक्षमता व्यक्त करने में सक्षम होती है।

उदाहरण के लिए, डायनेमिक बनाम स्टेटिक टाइपिंग। एक अन्य उदाहरण: कचरा संग्रह बनाम मैनुअल मेमोरी प्रबंधन।


0

स्क्रिप्टिंग आपको उच्च स्तर पर तर्क लिखने की अनुमति देता है। दूसरे शब्दों में, आप अधिक कार्यक्षमता के साथ कम कोड लिखते हैं।

तो एक उदाहरण, निम्नलिखित कोड में कुछ लिखने और इसे स्क्रिप्ट भाषा में लिखने के बीच के अंतर को दर्शाता है।

खेल कोड

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

स्क्रिप्ट कोड

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

यदि आप एक स्क्रिप्टिंग भाषा का उपयोग करते हैं तो डिजाइनर को कितना कम कोडिंग करना पड़ता है?

कारण गेम कोड में becase है, आपको एक घटना को कई फ़्रेमों में विभाजित करना होगा, और एक कोड को कई फ़्रेम परिप्रेक्ष्य से लिखना होगा। दूसरी ओर, स्क्रिप्टिंग आपको कई फ़्रेम इवेंट को कोड की एक एकल पंक्ति के रूप में सोचने की अनुमति देती है, क्योंकि सभी अतिरिक्त कोड स्क्रिप्ट फ़ंक्शन के पीछे सार होते हैं।

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

इसके बजाय, आप चाहते हैं कि आपका डिज़ाइनर इसके बजाय कुछ ऐसा करे: मैप एडिटर में एक कार पर राइट-क्लिक करें, इंसर्ट स्क्रिप्ट पर क्लिक करें, स्क्रिप्ट कोड में टाइप करें। महत्वपूर्ण गेम इंजन स्रोत कोड के साथ कोई गड़बड़ नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.