23
2016
05

Unity3D Layer瑕佺偣

绠浠

Layer鍙互鐢ㄤ簬鍏夌収鐨勫垎灞傚拰鐗╃悊纰版挒鐨勫垎灞傦紝杩欐牱鍙互寰堝ソ鍦拌繘琛屾ц兘浼樺寲

鏁版嵁缁撴瀯

Layer鍦║nity涓湁3涓憟鐜版柟寮忥細1銆乻tring鍚嶅瓧锛2銆乮nt灞傜储寮曪紝3銆丩ayerMask鏁版嵁

涓鑸湴锛屽湪缂栬緫鍣ㄤ腑锛屾垜浠缃瓽ameObject鐨凩ayer锛屾槸鐩存帴浣跨敤鐨勫眰鐨勫悕瀛楋紝姣斿Default銆乁I绛夌瓑銆

鑰屽湪浠g爜涓紝浣跨敤鐨勬槸GameObject鐨凩ayer灞炴э紝璇ュ睘鎬ф槸int鍨嬶紝鍙栧煎湪0鍒31涔嬮棿锛屼唬琛ㄥ眰绱㈠紩锛屽苟涓斿拰鍚嶇О涓涓瀵瑰簲銆傚彲浠ュ湪Tags And Layers闈㈡澘涓缃搴斿叧绯伙紙鎿嶄綔鏂规硶Editor->ProjectSetting->Tags And Layers锛夈

鍙﹀锛屾垜浠父甯镐細浣跨敤鍒癓ayerMask缁撴瀯瀹氫箟瀛楁锛岃繖鏍峰彲浠ュ湪缂栬緫鍣ㄤ腑閫夋嫨灞傘侺ayerMask鐨剉alue灞炴ц櫧鐒舵槸涓涓猧nt鍨嬶紝浣嗘槸鍜孏ameObject鐨凩ayer灞炴т笉鍚屻傞【鍚嶆濅箟LayerMask.value鏄竴绉峂ask锛堥氬父鐢ㄤ簩杩涘埗琛ㄧず锛夛紝浠栫殑鍙栧间负1<<0鍒1<<31锛屽嵆2^0鍒2^31锛<<涓轰簩杩涘埗宸︾Щ杩愮畻绗︼紝鍗1鐨勪簩杩涘埗宸︾Щ31浣嶏紝鎵浠ョ粨鏋滀负2^31锛夈傚彟澶栦竴涓狶ayerMask鍙互鍖呭惈澶氫釜灞傦紝涓句釜渚嬪瓙0x0001锛1锛夎〃绀1灞傦紝0x1001锛9锛夎〃绀虹4灞傚拰绗1灞傘

瑕佽揪鍒拌繖鏍疯〃绀哄涓眰鐨勬晥鏋滐紝闇瑕佷娇鐢▅杩愮畻锛坾涓轰簩杩涘埗鎴栬繍绠楋紝0|1=1锛0|0=0锛1|0=1锛1|1=1锛屽嵆鏈1鍒1锛夛紝鍙嶈繃鏉ヨ鎯冲垽瀹氫竴涓狶ayerMask涓槸鍚︽湁鎸囧畾鐨凪ask鍙浣跨敤&杩愮畻锛&涓轰簩杩涘埗涓旇繍绠楋紝0&1=0锛1&0=0锛1&1=1锛0&0=0锛屽嵆鏈0鍒0锛夊垽瀹氳繍绠楃殑缁撴灉鏄惁涓鸿繖涓狹ask鍊煎嵆鍙備妇涓緥瀛愭瘮濡0x1001&0x1000=0x1000锛屾墍浠ュ彲浠ュ垽瀹0x1001鐨凪ask鍊间腑鍖呭惈浜0x1000杩欎釜Mask鍊笺

涓婅堪浜哢nity鐨3绉峀ayer鐨勮〃绀烘柟娉曘傚湪杩涜鐩镐簰杞寲鏃跺彲浠ヤ娇鐢║nity鎻愪緵鐨凩ayerMask鎿嶄綔鐨勭浉鍏虫柟娉曪紝鍗矻ayerMask. NameToLayer(string layername)锛屽彲浠ュ皢涓涓悕绉拌浆鍖栦负涓涓猧nt鍨嬪眰绱㈠紩锛屾垨鑰匧ayerMask. LayerToName(int layerindex)銆傝屽皢int鍨嬭浆鍖栦负LayerMask锛屽垯闇瑕佸仛绉讳綅鎿嶄綔銆傛垨鑰呬娇鐢↙ayerMsk.GetMask(param string[] name)鏂规硶灏嗕竴缁勫悕绉扮洿鎺ヨ浆鎴愪竴涓狶ayerMask

甯哥敤鏂规硶
  • 灏嗕竴涓狦ameObject鐨刲ayer杞垚LayerMask涓

1<<GameObject.Layer

  • 閫氳繃鍚嶇О澶嶅悎鏌愪簩涓眰鐨勬搷浣滀负

1<<LayerMask. NameToLayer(鈥渓ayer1鈥)| 1<<LayerMask. NameToLayer(鈥渓ayer2鈥)

鎴栬

LayerMask.GetMask(鈥渓ayer1鈥,鈥漧ayer2鈥)

  • 鍒ゅ畾涓涓狦ameObject鏄惁鍦↙ayerMask涓

Return (layermask&1<<GameObject.Layer)==1<< GameObject.Layer

鎴栬

Return (layermask&1<<GameObject.Layer)!=0

  • 鍒ゅ畾涓涓狦ameObject鏄惁鍦ㄦ煇涓涓悕绉帮紙姣斿鈥渓ayer鈥濓級鐨勫眰涓

Return GameObject.Layer== LayerMask. NameToLayer(鈥渓ayer鈥)

芦 涓婁竴绡 涓嬩竴绡 禄