बिट शिफ्टिंग का उपयोग करने से आप एक भौतिकी ऑपरेशन में कई परतों को ध्यान में रख सकते हैं:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
बिना किसी बदलाव के, आपको केवल एक परत में और केवल एक को रेकास्ट करने की अनुमति होगी। थोड़ी शिफ्टिंग के साथ, आप कई विशिष्ट परतों में रीकास्ट कर सकते हैं:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
आप विशिष्ट लोगों को छोड़कर प्रत्येक परतों में रीकास्ट भी कर सकते हैं:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
यदि आप एकता में "परत प्रबंधक" को देखते हैं, तो परतों को एक साधारण एक आयाम सरणी के सूचक के रूप में देखा जा सकता है ।
संपादित करें: मैंने इसे पहले कभी नहीं देखा है, लेकिन LayerMaskपरतों के नाम को देखते हुए "कम्प्यूटेड" लेयर मास्क प्राप्त करने के लिए क्लास का एक उपयोगिता कार्य है:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
मान लीजिए UserLayerAऔर UserLayerBदसवीं और ग्यारहवीं परतें हैं। इनमें यूजर लेयर के 10 और 11. मान होंगे। लेयर मास्क वैल्यू प्राप्त करने के लिए उनके नाम गेटमास्क में दिए जा सकते हैं। तर्क या तो उनके नामों की सूची हो सकती है या उनके नामों को संग्रहीत करने वाले तार की एक सरणी। इस स्थिति में रिटर्न मान 2 ^ 10 + 2 ^ 11 = 3072 होगा।
दस्तावेज़ से लिंक करें: https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html