获取游戏对象发布

本文关键字:对象 游戏 获取 | 更新日期: 2023-09-27 18:33:59

我正在尝试创建一个简单的拖放清单,它使用以下脚本几乎可以正常工作:

public static GameObject itemBeingDragged;
Vector3 startPosition;
Transform startParent;
#region IPointerDownHandler implementation
public void OnPointerDown(PointerEventData eventdata){
    transform.SetParent(PREFABS.instance.canvas);
    itemBeingDragged = gameObject;
    transform.SetAsLastSibling();
    Vector3 zoomUp = PREFABS.instance.originalTileSize*1.5f;
    LeanTween.scale(itemBeingDragged.GetComponent<RectTransform>(), zoomUp, 0.1f).setDelay(0f);
}
#endregion
#region IBeginDragHandler implementation
public void OnBeginDrag(PointerEventData eventdata){
    startPosition = transform.position;
    startParent = transform.parent;
    GetComponent<CanvasGroup>().blocksRaycasts = false;
}
#endregion
#region IDragHandler implementation
public void OnDrag(PointerEventData eventData){
    transform.position = Input.mousePosition;
}
#endregion
#region IEndDragHandler implementation
public void OnEndDrag(PointerEventData eventData){
    itemBeingDragged = null;
    GetComponent<CanvasGroup>().blocksRaycasts = true;
    if(transform.parent == startParent){
        transform.position = startPosition;
    }
}
#endregion
#region IPointerUpHandler implementation
public void OnPointerUp(PointerEventData eventData){
    LeanTween.scale(itemBeingDragged.GetComponent<RectTransform>(), PREFABS.instance.fieldSize, 0.2f).setDelay(0f);
}
#endregion

我的问题是。如何获取和存储释放拖动游戏对象的游戏对象?

任何帮助都值得赞赏,提前感谢:-)

获取游戏对象发布

这取决于你的对象结构是如何设置的,我认为你的代码中没有足够的信息来确切地知道你是如何拥有你的对象的。 如果将对象设置为可以对其执行光线投射,则传递给 OnEndDrag 方法的PointerEventData中有一个有用的属性。 该属性是pointerCurrentRaycast的,并且应该能够抓取要拖动的对象正下方的对象(前提是您关闭了该对象的光线投射[可能带有LayerMask])。

如果您不能对对象进行光线投射,而是将它们放在某种集合中,则可以获取PointerEventDataposition 属性并浏览列表并获取最接近该对象的对象,前提是它在可接受的距离内。

实际上...自己得到了答案:-)

public void OnPointerUp(PointerEventData eventData){
    Vector3 toSize = PREFABS.instance.fieldSize;
    if(transform.parent == PREFABS.instance.startParent){
        var pointer = new PointerEventData(EventSystem.current);
        pointer.position = Input.mousePosition;
        var raycastResults = new List<RaycastResult>();
        EventSystem.current.RaycastAll(pointer, raycastResults);
        if (raycastResults.Count > 0) {
            PREFABS.instance.parentObject = raycastResults[0].gameObject;
        }
        if(PREFABS.instance.parentObject.GetComponent<CtrlField>() != null){
            if(PREFABS.instance.parentObject.GetComponent<CtrlField>().isField == false){
                lastHolder = false;
                toSize = PREFABS.instance.invSize;
            } else {
                lastHolder = true;
            }
        } else {
            if(lastHolder == false){
                toSize = PREFABS.instance.invSize;
            }
        }
    }
    LeanTween.scale(itemBeingDragged.GetComponent<RectTransform>(), toSize, 0.2f).setDelay(0f);
}

我正在使用RayCast来实现这一点:-)不过谢谢。