खोज…
परिचय
एक टैग एक स्ट्रिंग है जो GameObject
प्रकारों को चिह्नित करने के लिए लागू किया जा सकता है। इस तरह, यह विशेष GameObject
ऑब्जेक्ट्स को कोड के माध्यम से पहचानना आसान बनाता है।
एक टैग को एक या अधिक गेम ऑब्जेक्ट पर लागू किया जा सकता है, लेकिन गेम ऑब्जेक्ट में हमेशा केवल एक ही टैग होगा। डिफ़ॉल्ट रूप से, " GameObject
" टैग का उपयोग GameObject
का प्रतिनिधित्व करने के लिए किया जाता है जिसे जानबूझकर टैग नहीं किया गया है।
टैग बनाना और लगाना
टैग आमतौर पर संपादक के माध्यम से लागू होते हैं; हालाँकि, आप स्क्रिप्ट के माध्यम से टैग भी लगा सकते हैं। गेम ऑब्जेक्ट पर लागू होने से पहले किसी भी कस्टम टैग को टैग और परत विंडो के माध्यम से बनाया जाना चाहिए।
संपादक में टैग स्थापित करना
चयनित एक या अधिक गेम ऑब्जेक्ट के साथ, आप निरीक्षक से एक टैग का चयन कर सकते हैं। गेम ऑब्जेक्ट हमेशा एक ही टैग ले जाएगा; डिफ़ॉल्ट रूप से, गेम ऑब्जेक्ट को "अनटैग्ड" के रूप में टैग किया जाएगा। "टैग जोड़ें ..." का चयन करके आप टैग और परत विंडो पर भी जा सकते हैं; हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि यह केवल आपको Tags & Layers विंडो में ले जाता है। आपके द्वारा बनाया गया कोई भी टैग स्वचालित रूप से गेम ऑब्जेक्ट पर लागू नहीं होगा।
स्क्रिप्ट के जरिए टैग लगाना
आप कोड के माध्यम से सीधे गेम ऑब्जेक्ट टैग को बदल सकते हैं। यह ध्यान रखना महत्वपूर्ण है कि आपको वर्तमान टैग की सूची से एक टैग प्रदान करना चाहिए ; यदि आप एक टैग की आपूर्ति करते हैं जो पहले से नहीं बनाया गया है, तो इसका परिणाम त्रुटि होगा।
जैसा कि अन्य उदाहरणों में विस्तृत है, प्रत्येक टैग को मैन्युअल रूप से लिखने के विपरीत static string
चर की एक श्रृंखला का उपयोग करके स्थिरता और विश्वसनीयता सुनिश्चित कर सकते हैं।
निम्न स्क्रिप्ट दर्शाता है कि हम गेम ऑब्जेक्ट टैग की एक श्रृंखला को कैसे बदल सकते हैं, स्थिरता सुनिश्चित करने के लिए static string
संदर्भों का उपयोग कर सकते हैं। इस धारणा पर ध्यान दें कि प्रत्येक static string
एक टैग का प्रतिनिधित्व करता है जो पहले से ही टैग और परत विंडो में बनाया गया है।
using UnityEngine;
public class Tagging : MonoBehaviour
{
static string tagUntagged = "Untagged";
static string tagPlayer = "Player";
static string tagEnemy = "Enemy";
/// <summary>Represents the player character. This game object should
/// be linked up via the inspector.</summary>
public GameObject player;
/// <summary>Represents all the enemy characters. All enemies should
/// be added to the array via the inspector.</summary>
public GameObject[] enemy;
void Start ()
{
// We ensure that the game object this script is attached to
// is left untagged by using the default "Untagged" tag.
gameObject.tag = tagUntagged;
// We ensure the player has the player tag.
player.tag = tagUntagged;
// We loop through the enemy array to ensure they are all tagged.
for(int i = 0; i < enemy.Length; i++)
{
enemy[i].tag = tagEnemy;
}
}
}
कस्टम टैग बनाना
भले ही आप इंस्पेक्टर के माध्यम से या स्क्रिप्ट के माध्यम से टैग सेट करते हों, टैग का उपयोग करने से पहले टैग और परत विंडो के माध्यम से घोषित किया जाना चाहिए। आप एक गेम ऑब्जेक्ट्स टैग ड्रॉप डाउन मेनू से "टैग जोड़ें ..." का चयन करके इस विंडो तक पहुंच सकते हैं। वैकल्पिक रूप से, आप संपादन> प्रोजेक्ट सेटिंग्स> टैग और परतें के तहत विंडो पा सकते हैं।
बस + बटन का चयन करें, वांछित नाम दर्ज करें और टैग बनाने के लिए सहेजें चुनें। - बटन का चयन वर्तमान में हाइलाइट किए गए टैग को हटा देगा। ध्यान दें कि इस प्रकार, टैग को तुरंत "(हटाए गए)" के रूप में प्रदर्शित किया जाएगा, और परियोजना के अगले लोड होने पर पूरी तरह से हटा दिया जाएगा।
खिड़की के शीर्ष दाईं ओर से गियर / कॉग का चयन करने से आप सभी कस्टम विकल्पों को रीसेट कर पाएंगे। यह तुरंत सभी कस्टम टैग को हटा देगा, साथ ही आपके द्वारा "सॉर्टिंग लेयर्स" और "लेयर्स" के तहत किसी भी कस्टम लेयर के साथ।
टैग द्वारा GameObjects ढूँढना:
टैग विशिष्ट गेम ऑब्जेक्ट का पता लगाने के लिए विशेष रूप से आसान बनाते हैं। हम एक एकल गेम ऑब्जेक्ट की तलाश कर सकते हैं, या कई की तलाश कर सकते हैं।
एक एकल GameObject
ढूँढना
हम व्यक्तिगत गेम ऑब्जेक्ट देखने के लिए स्थैतिक फ़ंक्शन GameObject.FindGameObjectWithTag(string tag)
का उपयोग कर सकते हैं। यह ध्यान रखना महत्वपूर्ण है कि, इस तरह से, गेम ऑब्जेक्ट्स को किसी विशेष क्रम में क्वियर नहीं किया जाता है। यदि आप उस टैग की खोज करते हैं जो दृश्य में कई गेम ऑब्जेक्ट्स पर उपयोग किया जाता है, तो यह फ़ंक्शन यह गारंटी नहीं दे पाएगा कि कौन सी गेम ऑब्जेक्ट वापस आ गई है। जैसे, यह अधिक उपयुक्त है जब हम जानते हैं कि केवल एक गेम ऑब्जेक्ट ऐसे टैग का उपयोग करता है, या जब हम GameObject
के सटीक उदाहरण के बारे में चिंतित नहीं हैं जो वापस आ गया है।
///<summary>We create a static string to allow us consistency.</summary>
string playerTag = "Player"
///<summary>We can now use the tag to reference our player GameObject.</summary>
GameObject player = GameObject.FindGameObjectWithTag(playerTag);
GameObject
उदाहरणों का एक सरणी ढूँढना
हम एक विशेष टैग का उपयोग करने वाले सभी गेम ऑब्जेक्ट्स को देखने के लिए स्थिर फ़ंक्शन GameObject.FindGameObjectsWithTag(string tag)
का उपयोग कर सकते हैं। यह तब उपयोगी होता है जब हम विशेष गेम ऑब्जेक्ट के समूह के माध्यम से पुनरावृति चाहते हैं। यह तब भी उपयोगी हो सकता है जब हम एकल गेम ऑब्जेक्ट को ढूंढना चाहते हैं, लेकिन एक ही टैग का उपयोग करके कई गेम ऑब्जेक्ट हो सकते हैं। जैसा कि हम GameObject.FindGameObjectWithTag(string tag)
द्वारा लौटाए गए सटीक उदाहरण की गारंटी नहीं दे सकते हैं, हमें इसके बजाय GameObject.FindGameObjectsWithTag(string tag)
साथ सभी संभावित GameObject
इंस्टेंसेस की एक सरणी प्राप्त करनी चाहिए, और आगे के सरणी का पता लगाने के लिए परिणाम का विश्लेषण करें। की तलाश में
///<summary>We create a static string to allow us consistency.</summary>
string enemyTag = "Enemy";
///<summary>We can now use the tag to create an array of all enemy GameObjects.</summary>
GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag );
// We can now freely iterate through our array of enemies
foreach(GameObject enemy in enemies)
{
// Do something to each enemy (link up a reference, check for damage, etc.)
}
तुलना टैग
टैग द्वारा दो GameObjects की तुलना करते समय, यह ध्यान दिया जाना चाहिए कि निम्न कारण से गारबेज कलेक्टर ओवरहेड हो जाएगा क्योंकि एक स्ट्रिंग एक बार बनाया जाता है:
if (go.Tag == "myTag")
{
//Stuff
}
अद्यतन () और अन्य नियमित एकता के कॉलबैक (या लूप) के अंदर उन तुलनाओं को निष्पादित करते समय, आपको इस ढेर आवंटन-मुक्त विधि का उपयोग करना चाहिए:
if (go.CompareTag("myTag")
{
//Stuff
}
इसके अतिरिक्त अपने टैग्स को स्टैटिक क्लास में रखना आसान है।
public static class Tags
{
public const string Player = "Player";
public const string MyCustomTag = "MyCustomTag";
}
तब आप सुरक्षित रूप से तुलना कर सकते हैं
if (go.CompareTag(Tags.MyCustomTag)
{
//Stuff
}
इस तरह, आपके टैग स्ट्रिंग्स संकलन समय पर उत्पन्न होते हैं, और आप वर्तनी की गलतियों के निहितार्थ को सीमित करते हैं।
जैसे स्थैतिक वर्ग में टैग रखना, यह भी एक संचय में संग्रहीत करना संभव है:
public enum Tags
{
Player, Ennemies, MyCustomTag;
}
और फिर आप enum toString()
विधि का उपयोग करके इसकी तुलना कर सकते हैं:
if (go.CompareTag(Tags.MyCustomTag.toString())
{
//Stuff
}