বিট শিফটিং ব্যবহার করে আপনাকে একটি পদার্থবিজ্ঞানের ক্রিয়াকলাপে একাধিক স্তর আমলে নিতে দেয়:
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 এর ব্যবহারকারীর স্তর মান থাকবে। তাদের স্তর মাস্কের মান পেতে তাদের নামগুলি getMask এ দেওয়া যেতে পারে। যুক্তিটি হ'ল তাদের নামের তালিকা বা তাদের নামগুলি সংরক্ষণ করে স্ট্রিংগুলির একটি অ্যারে হতে পারে। এই ক্ষেত্রে রিটার্নের মান 2 2 10 + 2 ^ 11 = 3072 হবে।
ডকুমেন্টেশনের লিঙ্ক: https://docs.unity3d.com/ScriptReferences/LayerMask.GetMask.html