执行UI事件阻塞射线场景事件

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事件,后面逻辑不执行即可!

原文地址:https://www.cnblogs.com/xiaojun1604/p/4638391.html