如果對你有幫助,請做一棵蒲公英,讓知識随風飄蕩留在人的心裡。
1. 觸發事件
要想判斷一個角色是否在某個空間區域,除了直接計算Transform元件的position值外,還可以怎麼做呢?
我們可以把對象身上的XXX Collider觸發器上勾選Is Trigger選項!
觸發器事件執行的條件:兩個物體上都要帶碰撞器,至少帶有一個剛體,并且兩物體至少有一個把觸發器打開。
觸發器有哪些回調方法呢?
OnTriggerEnter(Collision other)代表進入觸發器的時候調用一次
OnTriggerStay(Collision other)代表停留在觸發器的時候持續調用
OnTriggerExit(Collision other)代表離開觸發器的時候調用一次
作為回調方法的參數 other對象則是進入碰撞體的一方。
2. 實體材質
在Project視窗中點選右鍵Create->Physic Material建立實體材質
Dynamic Friction為動态摩擦力系數,範圍0-1之間。
Static Friction為靜态摩擦力系數,範圍同上。
Bounciness反彈系數,範圍同樣是0-1.(這裡有個有趣的現象,估計牛頓老人家的棺材闆要壓不住了呢,如果你在場景中建立一個物體,把它的反彈系數最大化,然後添加剛體使用重力,提起一個高度讓它自然下落到一個同樣有反彈系數最大的平面上,你會發現它不僅會像永動機一樣跳動,還會越來越高,直至突破天際,大家想想這是為什麼呢?)
當我們設定好了實體材質後,我們可以把做好的實體材質拖到Collider上的Material上使用,是不是很簡單很友善呢?
3. 射線
我們再來思考一個問題,如何實作物體的移動到滑鼠點選的位置呢?
這裡我們來說說Unity提供的射線機制:通過虛拟射線檢測所碰撞的物體(這個射線是看不到的,但是可以調試出結果)
Ray作為射線類,可以直接建立一條射線Ran ran = new Ray();
我們來看看他的兩個屬性,origin與direction,前者是發射的原點,後者則是發射的方向。
使用實體類Physics的Raycast方法可以實作射線碰撞檢測功能
Physics.Raycast(Ray ray,out RaycastHit hit);其中的一種重載形式
傳回值是bool值,是以我們可以判斷是否射到了某些物體或圖層
這裡要來講解一些實體引擎上篇的一個小問題
我們滑鼠點選的點在U3D的世界裡是三維的,那麼我們的電腦螢幕是二維的,如何告訴電腦我們所點選坐标的Z軸呢?這裡我們可以先手動實作一下,再看引擎給我們提供的方法。
Vector3 pos = input.MousePosition;
pos = new Vector3(pos.x,pos.y,Camera.main.transform.position.z);
pos = Camear.main.ScreenToWorldPoint(pos);
但是我們如果每次都這樣寫豈不是很麻煩?那我們來看看系統的方法
Ray ray = Camera.main.ScreenPointToRay(input.mousePosition);一句話搞定,但是效果是一樣的,大家可以了解下原理。