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 作者: 夜風