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