Vector3.zero被窃听

时间:2018-07-10 08:45:57

标签: c# visual-studio unity3d

我有一个简单的库存系统,画布设置为屏幕空间-相机。 出于某些原因,将图标设置为vector3.zero会使它们移至其他位置。

这是一个示例: enter image description here

第一张图片开始播放,一切正常。

enter image description here

正在拖动第二张图片,您可以看到位置正确

enter image description here

一旦跌落,就可以看出苹果去了一个未知的地方。

这是endDrag的代码:

public void OnEndDrag(PointerEventData eventData)
{
    if (item.category != ITEM_CATEGORY.Voxel)
    {
        icon.transform.position = Vector3.zero;
    }   
    else
    {
        cube.transform.position = Vector3.zero;
    }
}

没有什么独特的。

这是拖动事件:

public void OnDrag(PointerEventData eventData)
{
    if (item.category != ITEM_CATEGORY.Voxel)
    {
        Vector3 screenPoint = Input.mousePosition;
        screenPoint.z = 0.13f; //distance of the plane from the camera
        icon.transform.position = Camera.main.ScreenToWorldPoint(screenPoint);
    }
    else
    {
        Vector3 screenPoint = Input.mousePosition;
        screenPoint.z = 0.13f; //distance of the plane from the camera
        cube.transform.position = Camera.main.ScreenToWorldPoint(screenPoint);
    }
}

1 个答案:

答案 0 :(得分:4)

在RectTransform的检查器中看到的是对象的本地位置。但是在代码中,您正在操纵对象的世界位置。将对象的世界位置设置为(0,0,0)时,其本地位置不太可能也为(0,0,0)。您的代码所做的实际上是将对象移动到游戏世界的起源。

不是Vector3.zero出现错误(没有任何意义),而是您的代码。在您的OnEndDrag函数中,尝试重置对象的本地位置而不是其世界位置,如下所示:

cube.transform.localPosition = Vector3.zero;

当然是图标的提示。