Unity | localPositionとanchoredPosition3Dの違い



Unity Difference Between Localposition



昨日プロジェクトを変更し、InputFieldズーム機能を追加しました。ズームは対称である必要があるため、InputFieldのピボットを(0、1)から(0.5、1)に変更しました。効果は次のとおりです。



プロジェクトのInputFieldの下には、TextやImageなどのサブオブジェクトがあります。画像のアンカーポイントは左上隅にあります(プロジェクトの要件に応じて設定)、ユーザーは画像をドラッグアンドドロップし、ドラッグ後に位置情報を保存できます

  • 追加しなかったときInputFieldズーム機能、すなわちInputFieldのピボットは(0、1)ですユーザーが画像の位置情報をドラッグアンドドロップすると、コードは次のようになります。
ImageManager._instance.picPosX[index] = (int)pic.localPosition.x

以下に示すように、画像は正常に機能します。



  • 追加したときInputFieldズーム機能、すなわちInputFieldのピボットは(0.5、1)です次の図に示すように、ユーザーが画像をドラッグして位置情報コードを保存する場合、ユーザーが画像をドラッグする場合、画像の位置が再度取得されると、画像の位置がオフセットされます。

理由は、上記のコードの問題であり、印刷および変更されていますInputFieldピボットの前後のLocalPosition.XおよびanchoredPosition3D.X:



  • InputFieldのピボットは(0,1)であり、画像のアンカーポイント、つまり画像の最終位置と一致する場合、次のようになります。

インスペクターパネル:位置X:161

localPosition.X:161

アンカー位置3D.X:161

  • InputFieldのピボットは(0.5、1)です。画像のアンカーポイントと一致しない場合、画像の最終的な位置は次のとおりです。

インスペクターパネル:位置X:161

localPosition.X:-118

アンカー位置3D.X:161

したがって、結論に達します。

RectTransformコンポーネントを持つオブジェクトの場合、親オブジェクトのピボットがそれ自体のアンカー、それ自体のアンカーと一致する場合のみlocalPositionおよびanchoredPosition3D値は等しいです。

インスペクターパネル:Transformの座標はlocalPositionとして表示され、RectTransformの座標はanchoredPosition3Dとして表示されます。

だから、コードを入れるだけですlocalPositionをanchoredPosition3Dに変更します。

ImageManager._instance.picPosX[index] = (int)pic.anchoredPosition3D.x