fix #14; UnmaskRaycastFilter is not reliable

main
mob-sakai 2019-02-07 12:20:43 +09:00
parent b9d1249578
commit 1ac8cfa085
1 changed files with 1 additions and 32 deletions

View File

@ -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;
}
} }
} }