我有一个可拖动的类,非常适合拖动整个精灵,我试图修改它以仅在精灵对象的定义的2D多边形对撞机组件中注册拖动。当我在多边形对撞机的边界内点击时,我很难让拖拽只能进行注册。现在它仍然在我点击拖动精灵的任何地方拖动,包括在我的多边形对撞机的边界之外。我真的可以在这方面使用一些指导。我还附上了一张图片来说明我想要实现的目标。谢谢!
PolygonCollider2D collider;
void Start ()
{
collider = transform.GetComponent<PolygonCollider2D>();
}
public void OnDrag (PointerEventData eventData)
{
Vector3 mousePosition = new Vector3(eventData.position.x, eventData.position.y, 0);
collider.transform.position = mousePosition;
if(transform.parent.gameObject == partsPanel)
transform.SetParent(dragLayer.transform);
if(transform.parent.gameObject == buildBoard)
transform.SetParent(dragLayer.transform);
}
答案 0 :(得分:0)
AFAIK,我们添加到精灵中的多边形对撞机是可编辑的。转到检查器,对撞机组件,并有一个按钮,允许编辑对撞机区域。调整此对撞机的点以覆盖所需区域。这样,只有所需区域才会收到触摸事件。
答案 1 :(得分:0)
好的,我知道这是一个非常老的线程,但我有类似的问题,我找到了一个解决方案,所以我会在这里发布:)
只需使用此代码创建一个类并将其放在您的对象上
using UnityEngine;
[RequireComponent(typeof(RectTransform), typeof(Collider2D))]
public class Collider2DRaycastFilter : MonoBehaviour, ICanvasRaycastFilter
{
Collider2D myCollider;
RectTransform rectTransform;
void Awake()
{
myCollider = GetComponent<Collider2D>();
rectTransform = GetComponent<RectTransform>();
}
public bool IsRaycastLocationValid(Vector2 screenPos, Camera eventCamera)
{
var worldPoint = Vector3.zero;
var isInside = RectTransformUtility.ScreenPointToWorldPointInRectangle(
rectTransform,
screenPos,
eventCamera,
out worldPoint
);
if (isInside)
isInside = myCollider.OverlapPoint(worldPoint);
return isInside;
}
}