我正在使用 Unity 的 UI 工具包为我的游戏创建库存系统。我有一个脚本,允许玩家通过单击并拖动项目图标来从他们的库存中拖动项目。但是,我遇到了一个问题,即拖动的项目在重新定位以跟随鼠标光标之前短暂出现在屏幕的左上角。
这是我脚本中的相关代码:
private void OnSlotIconMouseMove(MouseMoveEvent evt)
{
if (Input.GetMouseButton(0) && currentSlotIcon == null)
{
currentSlotIcon = evt.currentTarget as Image;
if (currentSlotIcon != null)
{
currentSlotIcon.style.opacity = 0.5f;
draggedItem = new Image
{
sprite = currentSlotIcon.sprite,
style =
{
position = Position.Absolute,
width = currentSlotIcon.layout.width,
height = currentSlotIcon.layout.height,
opacity = 0f
}
};
root.Add(draggedItem);
UpdateDraggedItemPosition(evt.mousePosition);
draggedItem.style.opacity = 1f;
}
}
}
private void UpdateDraggedItemPosition(Vector2 mousePosition)
{
if (draggedItem != null)
{
draggedItem.style.left = mousePosition.x - draggedItem.layout.width / 2;
draggedItem.style.top = mousePosition.y - draggedItem.layout.height / 2;
}
}
是否有人对可能导致此问题的原因以及我如何解决它有任何想法?
我已经尝试了几种解决方案来解决这个问题,包括在将 draggedItem 添加到根之前更新它的位置,删除将 draggedItem 的不透明度设置为 0 的行,以及在设置 draggedItem 之前使用协程添加一个小的延迟不透明度回到 1。但是,这些解决方案均无效,问题仍然存在。