fix #14; UnmaskRaycastFilter is not reliable
parent
b9d1249578
commit
1ac8cfa085
|
|
@ -13,12 +13,6 @@ namespace Coffee.UIExtensions
|
||||||
[AddComponentMenu("UI/Unmask/UnmaskRaycastFilter", 2)]
|
[AddComponentMenu("UI/Unmask/UnmaskRaycastFilter", 2)]
|
||||||
public class UnmaskRaycastFilter : MonoBehaviour, ICanvasRaycastFilter
|
public class UnmaskRaycastFilter : MonoBehaviour, ICanvasRaycastFilter
|
||||||
{
|
{
|
||||||
//################################
|
|
||||||
// Constant or Static Members.
|
|
||||||
//################################
|
|
||||||
Vector3[] s_WorldCorners = new Vector3[4];
|
|
||||||
|
|
||||||
|
|
||||||
//################################
|
//################################
|
||||||
// Serialize Members.
|
// Serialize Members.
|
||||||
//################################
|
//################################
|
||||||
|
|
@ -48,25 +42,8 @@ namespace Coffee.UIExtensions
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get world corners for the target.
|
|
||||||
(m_TargetUnmask.transform as RectTransform).GetWorldCorners(s_WorldCorners);
|
|
||||||
|
|
||||||
// Convert to screen positions.
|
|
||||||
var cam = eventCamera ?? Camera.main;
|
|
||||||
var p = cam.WorldToScreenPoint(sp);
|
|
||||||
var a = cam.WorldToScreenPoint(s_WorldCorners[0]);
|
|
||||||
var b = cam.WorldToScreenPoint(s_WorldCorners[1]);
|
|
||||||
var c = cam.WorldToScreenPoint(s_WorldCorners[2]);
|
|
||||||
var d = cam.WorldToScreenPoint(s_WorldCorners[3]);
|
|
||||||
|
|
||||||
// check left/right side
|
|
||||||
var ab = Cross(p - a, b - a) < 0.0;
|
|
||||||
var bc = Cross(p - b, c - b) < 0.0;
|
|
||||||
var cd = Cross(p - c, d - c) < 0.0;
|
|
||||||
var da = Cross(p - d, a - d) < 0.0;
|
|
||||||
|
|
||||||
// check inside
|
// check inside
|
||||||
return ab ^ bc ||bc ^ cd ||cd ^ da;
|
return !RectTransformUtility.RectangleContainsScreenPoint ((m_TargetUnmask.transform as RectTransform), sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -80,13 +57,5 @@ namespace Coffee.UIExtensions
|
||||||
void OnEnable()
|
void OnEnable()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Cross for Vector2.
|
|
||||||
/// </summary>
|
|
||||||
float Cross(Vector2 a, Vector2 b)
|
|
||||||
{
|
|
||||||
return a.x * b.y - a.y * b.x;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue