Unity中鼠标点击NGUI UI时,同时会有射线碰撞到场景物件,从而执行其它表现。
那么问题来了怎么规避同时触发呢,
有个原则就是UI执行顺序第一
那么我们就讲讲主线程执行顺序
1、主线程结构
1 public class GameMain : MonoBehaviour 2 { 3 void Update () 4 { 5 NGUIManager.Instance.Update(); 6 GameSceneManager.Instance.Update(); 7 .... 8 } 9 }
2、上面可以看出UI执行优先级高于其它逻辑,我们再看看UI逻辑
public bool RaycastHitUI(Vector3 positon) { Vector3 pos = Camera.ScreenToViewportPoint(positon); if (pos.x < 0f || pos.x > 1f || pos.y < 0f || pos.y > 1f) return false; Ray ray = UI2DCamera.ScreenPointToRay(inPos); int mask = 1 << 20; float dist = (uiCamera.rangeDistance > 0f) ? uiCamera.rangeDistance : UI2DCamera.farClipPlane - UI2DCamera.nearClipPlane; if (Physics.Raycast(ray, out uiHit, dist, mask)) return true; return false; }
所以执行了UI事件,后面逻辑不执行即可!