Unity中LayerMask的學習手記
Unity中是用int32來表示32個Layer層。int32表示二進位制一共有32位(0—31)。LayerMask實際上是用Int32的32個位來表示每個層級,當這個位為1時表示使用這個層,為0時表示不用這個層。
程式碼釋義:
LayerMask mask = 1 << 你需要開啟的Layers層。
LayerMask mask = 0 << 你需要關閉的Layers層。 等價於 LayerMask mask = ~( 1 << 你需要關閉的Layers層。)
public static int OnlyIncluding(params int[] layers) { return MakeMask(layers); } public static int EverythingBut(params int[] layers) { return ~MakeMask(layers); } static int MakeMask(params int[] layers) { int mask = 0; for (int i = 0; i < layers.Length; i++) { mask |= 1 << layers[i]; } return mask; }
layer常用於相機渲染的控制和射線碰撞檢測。
相關API:
1、Ray Camera.main.ScreenPointToRay(Vector3 pos) --- 返回一條射線Ray從攝像機到螢幕指定一個點
2、RaycastHit --- 光線投射碰撞資訊
3、Ray --- 射線類
4、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask) --- 當光線投射與任何碰撞器交叉時為真,否則為假。
bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask) --- 在場景中投下可與所有碰撞器碰撞的一條光線,並返回碰撞的細節資訊()。
bool Physics.Raycast(Ray ray, float distance, int layerMask) --- 當光線投射與任何碰撞器交叉時為真,否則為假。
bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask) --- 當光線投射與任何碰撞器交叉時為真,否則為假。
PS: 如果從一個球型體的內部到外部用光線投射,返回為假。
引數釋義:
origin : 在世界座標中射線的起始點
direction
distance: 射線的長度
hit: 碰撞資訊類。可以得到碰撞物體的transform,rigidbody,point等資訊。
layerMask: 只選定Layermask層內的碰撞器,其它層內碰撞器忽略。
<span style="white-space:pre"> </span>if (Input.GetMouseButtonDown (0))
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>GameCamera tempGameCamera = GameCameraManager.GetSingle().getCurrentState() as GameCamera;
<span style="white-space:pre"> </span>if(tempGameCamera == null)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>return ;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>Camera tempCurrentCamera = tempGameCamera.pCamera;
<span style="white-space:pre"> </span>Ray ray = tempCurrentCamera.ScreenPointToRay(Input.mousePosition);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>RaycastHit hit;
<span style="white-space:pre"> </span>Physics.Raycast(ray.origin,ray.direction,out hit);
<span style="white-space:pre"> </span>Debug.DrawRay(ray.origin, ray.GetPoint(100000.0f), Color.red);
<span style="white-space:pre"> </span>}
5、Ray Camera.main.ViewportPointToRay(Vector3 pos) --- 返回一條射線Ray從攝像機到視口(視口之外無效)指定一個點
6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask) --- 投射一條光線並返回所有碰撞,也就是投射光線並返回一個RaycastHit[]結構體。
相關推薦
Unity中LayerMask的學習手記
Unity中是用int32來表示32個Layer層。int32表示二進位制一共有32位(0—31)。LayerMask實際上是用Int32的32個位來表示每個層級,當這個位為1時表示使用這個層,為0時表示不用這個層。 程式碼釋義:LayerMask mask = 1 &l
Unity Shader入門精要學習筆記 - 第16章 Unity中的渲染優化技術
也會 檢測 特點 著色器 版本 切換 代碼優化 學習 順序 轉自馮樂樂的 《Unity Shader 入門精要》 移動平臺的特點 為了盡可能一處那些隱藏的表面,減少overdraw(即一個像素被繪制多次),PowerVR芯片(通常用於ios設備和某些Android設備)使用
學習手記-如何找到man手冊中函數參數的類型定義
chmod 代碼 明顯 裏的 教程 ges cto 描述 32位 緣起:按著開發板教程學Linux,用到chmod等函數,視頻裏的實驗講解的倒是仔細。但是,如果沒有其它資料支持,只看man的描述,鬼知道這些自定義的類型原始類型是什麽呢?舉一個簡單的例子,chmod:這個mo
Unity中prefabs的學習心得以及應用理解
最近這段時間一直在自學Unity,作為一個零開發經驗的小白來說,除了對遊戲的熱愛之外,基本上沒有什麼能拿得出手的東西了。因為時間有限,零零散散地起了個步,每天都感覺能有所收穫就很知足。那麼為了防止自己健忘,就順手寫了個心得體會,對不對的大家多指正批評。 話不多說,先記錄一下prefabs的用法。
unity中協程的理解和學習
先放二篇大神寫的部落格,很受用。謝謝https://blog.csdn.net/huang9012/article/details/38492937 http://www.unity.5helpyou.com/2658.html 今天在看Unity中協程的作用先放一個物體漸隱漸現的效果吧
Unity中Slider元件的學習
我們下面的一個例子就是通過控制Cube的大小來認識一下Slider 元件 首先建立一個Slider元件,你在Slider下面可以看到三個子控制元件,Background就是圖中綠色的部分,Fill A
【Unity】射線中LayerMask引數的使用方式
void Update () { if (Input.GetMouseButtonDown(0)) { // 只檢測第6層 LayerMask mask1 = 1 <<
Unity中sdk接入的學習筆記--Plugins
跟著新總學習了sdk的接入,心得一點點整理下哈。 1、在Eclipse新建一個工程,然後將unity的自帶lib,data/playbackEngines/adnroidplayer/release/bin/classes.jar(5.0版本的檔案路徑)拷貝到工程的lib下
unity shader學習筆記(二十一)——Unity中的高階紋理之渲染紋理
渲染紋理 渲染目標紋理(Render Target Texture, RTT)是指一個攝像機將渲染結果輸出到顏色緩衝中,並顯示到螢幕上,而不是傳統的幀緩衝和後備緩衝。 多重渲染目標(Multiple Render Target, MRT)是指把場景同
【unity學習筆記】在unity中擴充套件編輯器新增選單
參考自《Unity3D指令碼程式設計》-陳嘉棟 第一種:在原有選單中新增選項 示例:在Mesh元件中新增MeshTest選單選項 using System.Collections; using
劍英的區塊鏈學習手記(一)
strong mage git 人生 極客 lease 黑錢 開篇 png 開篇布拉拉 因為參與了小蟻的c#智能合約編譯器的開發,讓我第一次近距離接觸到區塊鏈技術。 以前我對區塊鏈技術的了解,只知道有一種叫做比特幣的玩意兒,以前有同事在幾百塊一個比特幣的時候屯了一批,後
關於Unity中的新手編碼技巧
編輯器 展開 解決 編譯 出錯 怎麽辦 查看 代碼 寫代碼 寫代碼遇到報錯,問題怎麽辦?怎麽查看unity代碼的接口?函數參數不記得了怎麽辦? 解決方法: 1.選擇不懂的函數或類,按F12,跳轉到代碼的定義,自己去看就可知道了。 2.有的時候,選擇一個函數,按F12想跳轉去
Unity SLua 如何調用Unity中C#方法
都差不多 public title 接口 如何 1.原理就是通常在Lua框架中所說的,開放一個C#的web接口,或者叫做在Slua框架中註冊函數。2.作用在Lua中調用C#中的方法,這個是在做熱更新中很常用的一種方法,無論是slua,還是lua,都差不多、這
關於Unity中的幾何體
模式 mob 繪制 反射 mod 選擇 and tex 足球場 一、創建幾何體的類型 1: 創建平面 Plane;2: 創建立方體 Cube;3: 創建球體 Sphere;4: 創建膠囊體 Capsule;5: 創建圓柱體 Cylinder;6: 3D文字 3D text;
【Unity 3D】學習筆記三十:遊戲元素——遊戲地形
nbsp 3d遊戲 strong 直觀 分辨率 == 摩擦力 fill 世界 遊戲地形 在遊戲的世界中,必然會有非常多豐富多彩的遊戲元素融合當中。它們種類繁多。作用也不大同樣。一般對於遊戲元素可分為兩種:經經常使用。不經經常使用。經常使用的元素是遊戲中比較重要的元素。一
關於Unity中的NGUI和UGUI
幫我 事件 視角 比例 設置 內置 作者 x64 spec 用Unity開發2D遊戲,有三套關系 1.GUI:Unity本身的對象 2.NGUI:以前在Unity中廣泛來做2D的,是第三方的包,需要安裝 3.UGUI:Unity5.X後,Unity找到NGUI的作者,開發了
【Unity 3D】學習筆記四十二:粒子特效
空間 獲得 material package 一個 log 創建 spa mpi 粒子特效 粒子特效的原理是將若幹粒子無規則的組合在一起。來模擬火焰,爆炸。水滴,霧氣等效果。要使用粒子特效首先要創建,在hierarchy視圖中點擊create——particle s
【只怕沒有幾個人能說清楚】系列之二:Unity中的特殊文件夾
物體 avi ebp time 編輯模式 tro hive 預覽 打包 參考:http://www.manew.com/thread-99292-1-1.html 1. 隱藏文件夾 以.開頭的文件夾會被忽略。在這種文件夾中的資源不會被導入,腳本不會被編譯。也不會出現
關於Unity中RawImage和Button
clam 屬性 尋址 lam etc 1.2 public 遊戲場景 像素 1.貼圖的Texture Type屬性值 Texture:會把貼圖的大小轉換為最相近的2的n次方,比如400X1369會轉換為512X1024。 Sprite 2D:是貼圖的原始大小。 2.
關於Unity中UI中的Button節點
pda initial debug.log 禁用 修飾 不能 重復 綁定 etc Button是最常用的UI節點,包含的組件有 1.Image組件 顯示Button的紋理,把Image貼圖拖進Image組件中後,記得點擊Set Native Size,顯示貼圖原始大小