だから私はオンラインのチュートリアルに従っており、99.9%間違いを犯していないと確信しています.
数学からの一般的な考え方は、SlotScript
実装する my IDragHandler
、OnDrag
-
public void OnDrag(PointerEventData data)
{
if (inventory.Items[slotNumber].itemName != null)
{
inventory.ShowDraggedItem(inventory.Items[slotNumber]);
}
}
インベントリでメソッドを実行します。このメソッドは単にbool draggingItem
true として割り当て、スプライトを変更してアクティブにします。
ドラッグされたアイテムの位置を返すための実際の更新コードは、期待値を返していません:
void Update()
{
if (draggingItem)
{
Vector3 position = (Input.mousePosition - (GameObject.FindObjectOfType<Canvas>().GetComponent<RectTransform>().localPosition));
draggedItem.GetComponent<RectTransform>().localPosition = new Vector3(position.x + 15, position.y - 15, position.z);
}
}
ここに私が得るもののいくつかの例があります。マウスがキャンバスの中央にある場合、期待される結果が得られます。
アイテムを外側の端にドラッグすると、値が歪んで常に値よりも小さい値が返されます。次に例を示します。
その他の情報:
画面スペースはオーバーレイに設定されています。ネイティブ解像度は1920x1080
です。より小さい解像度サイズでテストすると、問題は悪化します (オフセットは比例して大きくなります)。onDrag
イベントが発生すると、mousePosition
正しく更新Canvas
localPosition
され、まったく同じままになります (予想される動作?)
これを十分に明確にしたことを願っています。