การใช้การเลื่อนบิตช่วยให้คุณสามารถพิจารณาหลายเลเยอร์ในการดำเนินการทางฟิสิกส์เดียว:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
หากไม่มีการเลื่อนบิตคุณจะได้รับอนุญาตให้ทำการฉายในชั้นหนึ่งและชั้นเดียว ในขณะที่เปลี่ยนบิตคุณสามารถ raycast ในหลาย ๆ เลเยอร์เฉพาะ:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
คุณสามารถ raycast ในทุกชั้นยกเว้นชั้นที่เฉพาะเจาะจง:
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