مجموعة متنوعة من الإحداثيات المستخدمة في Unity3d واجهة المستخدم الرسومية

لماذا الأصناف وكم منهم؟


غالبًا ما صادف حقيقة أن الناس ببساطة لا يفهمون كيفية تحريك كائن في واجهة المستخدم من خلال بعض القيم ، ويفاجئون أن النتيجة غالباً ما تكون غير متوقعة. أو دعنا نقول كيفية الحصول على الإحداثيات الصحيحة للكائن في واجهة المستخدم. إذا اشتقنا من خلال مصحح الأخطاء الموضع المعتاد للكائن (الموضع) ، فسيكون ذلك مختلفًا تمامًا عما نراه في مفتش عنصر واجهة المستخدم ، فما الذي نراه هناك وكيف يعمل؟ نتيجة لذلك ، يتم فرز 100،500 حل من المنتديات حتى الآن ، وهو ما لا يعمل. أريد أن أعطي حركة ذات مغزى لمثل هذه العمليات.

فيما يلي جوهر المصيد - يحتوي Transform المعتاد على سلالة RectTransform المسؤولة عن الموضع والعديد من الأشياء المتعلقة بحجم عنصر واجهة المستخدم ومقياسه وما إلى ذلك. وبفضله يمكننا الحصول على خيارات التنسيق التالية.

  1. موقف
  2. localPosition
  3. anchoredPosition (لا يزال هناك anchoredPosition3D ، لكننا لن نفكر في ذلك بشكل منفصل ، لكننا سنفترض أن هذا هو نوع فرعي من test.anchoredPosition



الوضع الطبيعي


الموضع المعتاد لا ينطبق على نظام إحداثيات واجهة المستخدم من الكلمة على الإطلاق. هذه هي بعض الإحداثيات الشائعة للعنصر في العالم كله للوحدة ، وفي العالم يوجد تمثيل معين لموضع الكائن غير المتصل بالواجهة ، وإذا كنت تريد نقل الكائن حسب عرضه ، فلن ينجح ذلك ، لأن القماش يحتوي على إحداثيات بالبكسل بالنسبة إلى الشاشة. وفي الإحداثيات العالمية ، هذه ليست وحدات بكسل. لذلك ، سينتقل الكائن في العالم ، ويقول 200 وحدة من أبعاد العالم ، وليس 200 بكسل ، ويطير ببساطة بعيدًا إلى مسافات غير معروفة. ولكن يمكن استخدامها بحكمة. سأخبرك لاحقًا كيف.

مرساة الموضع (مرساةالموقف)


ما نراه في المفتش هو ما هو عليه.



في الوحدة ، يمكنك تعيين نقاط ربط ، وهذه نقطة معينة بالنسبة لعنصر واجهة المستخدم الذي سيتم وضعه ، بما في ذلك عند تغيير حجم / نسب الكائن الأصل.



هنا يمكنك أن ترى أننا قمنا بتغيير حجم الكائن الأصل والنسب ، ويتمسك كائننا بمركز الكائن الأصل ، ولم تتغير إحداثياته ​​، على الرغم من أنه لم يعد موجودًا على الشاشة في نفس المكان كما كان من قبل.

وضع المرساة - إحداثيات الكائن بالنسبة إلى المرساة. سنرسو في الزاوية اليسرى العليا ونرى أن الإحداثيات قد تغيرت.



إذا كنت ترغب في تحويل الكائن إلى عرضه ، فأنت بحاجة إلى تغيير موضع الإعلان أو localPosition. يتم حساب الموضع المحلي لعناصر واجهة المستخدم أيضًا بالبكسل ، ولكن بطريقة مختلفة. لذلك ، إذا كنت بحاجة إلى التعامل مع اثنين من عناصر واجهة المستخدم بالنسبة لبعضها البعض. من الأفضل استخدام موقع محلي. لماذا هكذا؟

الموقف المحلي (localPosition)


فما هو بالضبط الموقف المحلي:



هذا هو نظام الإحداثيات عندما يكون مركز الكائن الأصل هو 0. الزاوية اليمنى العليا هي العرض الموجب للمستقيم مقسومًا إلى نصفين. الجزء العلوي الأيسر هو القيمة السلبية للعرض إلى النصف. وهذا هو ، إذا كان عرض المستطيل 800 بكسل ، ثم في المنتصف x = 0 ، في أعلى اليمين 400 ، في أعلى اليسار -400. لذلك ، إذا كنت بحاجة إلى حساب الإحداثيات دون مراعاة نقاط الارتساء ، فمن الأفضل استخدام المراكز المحلية. شريطة أن يكون لديهم سلف مشترك / مستقيم. بالمناسبة ، يمكن استخدام نقاط الارتساء ليس فقط كنقطة محددة على الكائن الأصل ، ولكن أيضًا كنسبة نسبة إلى الكائن الأصل. في الحالة الثانية ، ستعيد anchoredPosition localPosition.

لماذا يمكنني استخدام الموضع المعتاد لعناصر واجهة المستخدم؟ دعنا نقول فقط ، ضمن الإحداثيات العالمية ، إذا قمت بتعيين إحداثيات الكائن الثاني إلى كائن واحد ، فسوف تكون عند نقطة واحدة ، بغض النظر عن نقاط الربط أو المواضع المحلية ، يكون من المناسب في بعض الأحيان عندما تكون العناصر على لوحة قماش مختلفة / في لوحات مختلفة ويكون نظام الإحداثيات محلي / مرساة لا تتطابق.

الخلاصة / الملخص


  1. في المفتش ، تُظهر عناصر واجهة المستخدم موضعًا محددًا أو نسبًا بالنسبة إلى الأصل. تعتبر AnchoredPosition حسب موضع المرساة
  2. يتيح لك localPosition الحصول على الإحداثيات العامة بالنسبة إلى الوالد ، دون الربط بالمراسي.
  3. الموضع - هذا هو الموضع العالمي للعنصر في مساحة المشهد ، وليس مرتبطًا بـ UI.


آمل أن يساعد شخص ما :-)

Source: https://habr.com/ru/post/ar454246/


All Articles