NGUI不規則形狀點擊

PolygonCollider2D

這裏寫圖片描述
我們的地圖是這樣的不規則形狀,最開始簡單用Box Collider處理點擊,但是點擊地圖邊緣時命中率很差。今天查到Unity有多邊形Collider可以支持不規則形狀,PolygonCollider2D

給地圖【變異的開端】加上PolygonCollider2D,然後根據地圖形狀編輯Collider多邊形,編輯好之後下圖這樣子。
這裏寫圖片描述

點擊實現

需要注意的是NGUI中檢測射線碰撞用的是Physics.RayCast,不支持2D Collider,也就是無法響應touch/click等事件。需要自己用Physics2D.Raycast來檢測碰撞。可以參考NGUI的UICamera::Raycast寫。

void Update() {
    bool btnDown = Input.GetMouseButtonDown(0);
    bool btnUp = Input.GetMouseButtonUp(0);
    if (btnDown || btnUp) {
        UICamera uicam = UISystem.Instance.uiCamera;
        Camera cam = uicam.camera;
        int mask = cam.cullingMask & (int)uicam.eventReceiverMask;
        float dist = uicam.rangeDistance;
        if (dist < 0.000001f)
            dist = cam.farClipPlane-cam.nearClipPlane;

        Ray ray = cam.ScreenPointToRay(Input.mousePosition);
        RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction, dist, mask);
        if (hit.collider != null) {
            GameObject obj = hit.collider.gameObject;
            UISprite spr = obj.transform.GetComponentInChildren<UISprite>();
            if (btnDown) {
                spr.color = Color.gray;
                DebugLog.Log("click " + obj.name);
            }
            else {
                spr.color = Color.white;
                DebugLog.Log("release " + obj.name);
            }
        }
    }
}

另一種方法

除了使用引擎支持的多邊形Collider,還可以根據顏色來處理點擊。先根據地圖,預生成一個顏色塊圖,遊戲中根據點擊點的像素顏色來判斷。比如,地圖是下面這樣的:
這裏寫圖片描述

生成的顏色塊圖
這裏寫圖片描述

轉載請註明出處: http://blog.csdn.net/ynnmnm/article/details/45719353 作者: 夜風

發佈了60 篇原創文章 · 獲贊 638 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章