關於射線檢測穿透以及屏幕座標轉換

1.射線檢測默認是不穿透物體的;有時候需求會要求射線檢測穿透物體,檢測到另一個物體,這時候就需要用到layoutmask。舉個例子:

//定義一個公共的層級,只選定Layermask層內的碰撞器,其它層內碰撞器忽略。選擇性碰撞

public LayerMask mask;

 

//也可以這樣寫:

// public LayerMask mask = 1 << 8;打開第8的層

// ~(1 << 10)打開除了第10之外的層。

// ~(1 << 0)打開所有的層。

// (1 << 10) | (1 << 8)打開第10和第8的層。    

這樣,如果你只想檢測某個層級的物體,就選擇該層級。

if (Input.GetMouseButtonDown(0))  
            {  
                //創建一條從攝像機到觸摸位置的射線  
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 定義射線  
                RaycastHit rayHit;  
                if (Physics.Raycast(ray, out rayHit, mask))  // 參數1 射線,參數2 碰撞信息, 參數3 碰撞層  
                {  
                    //打印射線碰撞到的對象需要掛載Collider盒子  
                    print("info   " + rayHit.collider.gameObject.name);  
                }  
            }  

2.用射線檢測的時候,有時候會有這樣的需求,點擊屏幕的點,屏幕上會有點擊特效。

這時候ngui中,

UI Root下邊的子UI們的(0,0,0)是在屏幕的正中心。而屏幕座標系的(0,0,0)呢~在屏幕的左下角,所以它們之間,差了半個屏幕的寬和高。

真相只有一個,用得到的鼠標點擊屏幕座標減去半個屏幕的寬和高,就可以得到點擊效果的屏幕座標

go.transform.localPosition=Input.mousePosition-new Vector3(Screen.width/2,Screen.height/2,0);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章