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);