NGUI的BoxCollider与PolygonCollider2D共存的修改

参考文章

http://gototokyo.blog.163.com/blog/static/2838342014382736641/


UICameraEditor

string[] options = new string[] { "3D World", "3D UI", "2D World", "2D UI"};


改:

string[] options = new string[] { "3D World", "3D UI", "2D World", "2D UI" , "UI_2D3D"};

UICamera

添加

else if(cam.eventType == EventType.UI_2D3D)
{
int bufDepth = -1;
if (m2DPlane.Raycast(ray, out dist))
{
lastWorldPosition = ray.GetPoint(dist);
Collider2D[] hits = Physics2D.OverlapPointAll(lastWorldPosition, mask);

if (hits.Length >= 1)
{
for (int b = 0; b < hits.Length; ++b)
{
GameObject go = hits[b].gameObject;
UIWidget w = go.GetComponent<UIWidget>();

if (w != null)
{
if (!w.isVisible) continue;
if (w.hitCheck != null && !w.hitCheck(lastWorldPosition)) continue;
}
else
{
UIRect rect = NGUITools.FindInParents<UIRect>(go);
if (rect != null && rect.finalAlpha < 0.001f) continue;
}

mHit.depth = NGUITools.CalculateRaycastDepth(go);

if (mHit.depth != int.MaxValue)
{
mHit.go = go;
mHit.point = lastWorldPosition;
mHits.Add(mHit);
}
}

mHits.Sort(delegate(DepthEntry r1, DepthEntry r2) { return r2.depth.CompareTo(r1.depth); });

for (int b = 0; b < mHits.size; ++b)
{
#if UNITY_FLASH
if (IsVisible(mHits.buffer[b]))
#else
if (IsVisible(ref mHits.buffer[b]))
#endif
{
bufDepth = mHits[b].depth;
hoveredObject = mHits[b].go;
mHits.Clear();
break;
}
}
mHits.Clear();
}
}
if(true)
{
RaycastHit[] hits = Physics.RaycastAll(ray, dist, mask);

if (hits.Length >= 1)
{
for (int b = 0; b < hits.Length; ++b)
{
GameObject go = hits[b].collider.gameObject;
UIWidget w = go.GetComponent<UIWidget>();

if (w != null)
{
if (!w.isVisible) continue;
if (w.hitCheck != null && !w.hitCheck(hits[b].point)) continue;
}
else
{
UIRect rect = NGUITools.FindInParents<UIRect>(go);
if (rect != null && rect.finalAlpha < 0.001f) continue;
}

mHit.depth = NGUITools.CalculateRaycastDepth(go);

if (mHit.depth != int.MaxValue)
{
mHit.hit = hits[b];
mHit.point = hits[b].point;
mHit.go = hits[b].collider.gameObject;
mHits.Add(mHit);
}
}

mHits.Sort(delegate(DepthEntry r1, DepthEntry r2) { return r2.depth.CompareTo(r1.depth); });

for (int b = 0; b < mHits.size; ++b)
{
#if UNITY_FLASH
if (IsVisible(mHits.buffer[b]))
#else
if (IsVisible(ref mHits.buffer[b]))
#endif
{
if(hoveredObject == null || bufDepth < mHits[b].depth)
{
lastHit = mHits[b].hit;
hoveredObject = mHits[b].go;
lastWorldPosition = mHits[b].point;
mHits.Clear();
break;
}
}
}
mHits.Clear();
}
}
if(hoveredObject != null)
{
return true;
}
continue;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nmg10

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值