Sử dụng dịch chuyển bit cho phép bạn tính đến nhiều lớp trong một hoạt động vật lý:
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
Nếu không dịch chuyển bit, bạn sẽ được phép chiếu sóng trong một lớp và chỉ một lớp. Trong khi với sự dịch chuyển bit, bạn có thể phát sóng trong nhiều lớp cụ thể:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
Bạn cũng có thể chiếu sóng ở mọi lớp trừ những lớp cụ thể:
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Nếu bạn nhìn vào "Trình quản lý lớp" trong Unity, các lớp có thể được xem là chỉ số của mảng một chiều đơn giản .
EDIT: Tôi chưa bao giờ nhìn thấy nó trước đây, nhưng LayerMask
lớp có chức năng tiện ích để lấy mặt nạ lớp "được tính toán" với các tên lớp:
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
Giả sử UserLayerA
và UserLayerB
là lớp thứ mười và thứ mười một. Những cái này sẽ có giá trị Lớp người dùng là 10 và 11. Để có được giá trị mặt nạ lớp của chúng, tên của chúng có thể được chuyển vào GetMask. Đối số có thể là một danh sách tên của họ hoặc một chuỗi các chuỗi lưu trữ tên của họ. Trong trường hợp này, giá trị trả về sẽ là 2 ^ 10 + 2 ^ 11 = 3072.
Liên kết đến tài liệu: https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html