我有一个简单的库存系统,画布设置为屏幕空间-相机。 出于某些原因,将图标设置为vector3.zero会使它们移至其他位置。
第一张图片开始播放,一切正常。
正在拖动第二张图片,您可以看到位置正确
一旦跌落,就可以看出苹果去了一个未知的地方。
这是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);
}
}
答案 0 :(得分:4)
在RectTransform的检查器中看到的是对象的本地位置。但是在代码中,您正在操纵对象的世界位置。将对象的世界位置设置为(0,0,0)时,其本地位置不太可能也为(0,0,0)。您的代码所做的实际上是将对象移动到游戏世界的起源。
不是Vector3.zero出现错误(没有任何意义),而是您的代码。在您的OnEndDrag
函数中,尝试重置对象的本地位置而不是其世界位置,如下所示:
cube.transform.localPosition = Vector3.zero;
当然是图标的提示。