Varietas koordinat yang digunakan dalam GUI Unity3d

Mengapa varietas dan berapa banyak?


Seringkali saya menemukan fakta bahwa orang tidak mengerti cara memindahkan objek di UI dengan nilai tertentu, dan terkejut bahwa hasilnya seringkali tidak dapat diprediksi. Atau katakanlah cara mendapatkan koordinat objek yang benar di UI. Jika kita mendapatkan debugger posisi biasa dari objek (posisi), maka itu akan sangat berbeda dari apa yang kita lihat di inspektur elemen UI, jadi apa yang kita lihat di sana dan bagaimana cara kerjanya? Akibatnya, 100.500 solusi dari forum sedang diurutkan sejauh ini, mana yang tidak berfungsi. Saya ingin memberikan gerakan yang berarti untuk proses-proses semacam itu.

Inti dari tangkapan adalah sebagai berikut - Transform biasa memiliki turunan RectTransform yang bertanggung jawab untuk posisi dan banyak hal yang berkaitan dengan ukuran, skala, dll elemen UI. Dan terima kasih padanya kita bisa mendapatkan opsi koordinat berikut.

  1. posisi
  2. posisi lokal
  3. anchoredPosition (masih ada anchoredPosition3D, tetapi kami tidak akan mempertimbangkannya secara terpisah, tetapi kami akan menganggap bahwa ini adalah subspesies dari test.anchoredPosition



Posisi normal


Posisi yang biasa tidak berlaku untuk sistem koordinat UI dari kata sama sekali. Ini adalah beberapa koordinat umum dari objek di seluruh dunia unit, dan di dunia ada representasi tertentu dari posisi objek yang tidak terhubung ke antarmuka. Jika Anda ingin menggeser objek dengan lebarnya, ini tidak akan berfungsi, karena kanvas memiliki koordinat dalam piksel relatif terhadap layar. Dan dalam koordinat global, ini bukan piksel. Oleh karena itu, objek akan bergeser di dunia, katakanlah 200 unit dimensi dunia, dan bukan 200 piksel, dan terbang ke jarak yang tidak diketahui. Tapi itu bisa digunakan dengan bijak. Saya akan memberi tahu Anda nanti bagaimana.

Jangkar Posisi (jangkar Posisi)


Apa yang kita lihat di inspektur adalah apa adanya.



Dalam sebuah unit, Anda dapat mengatur titik jangkar, ini adalah titik relatif tertentu di mana elemen UI akan diposisikan, termasuk ketika ukuran / proporsi objek induk diubah.



Di sini Anda dapat melihat bahwa kami mengubah ukuran objek induk dan proporsinya, objek kami menganut pusat objek induk, dan koordinatnya tidak berubah, meskipun pada layar ia tidak lagi berada di tempat yang sama seperti sebelumnya.

Posisi jangkar - koordinat objek relatif terhadap jangkar. Kami akan berlabuh di sudut kiri atas dan melihat bahwa koordinat telah berubah.



Jika Anda ingin menggeser objek ke lebarnya, maka Anda perlu mengubah anchoredPosition atau localPosition. Posisi lokal untuk elemen UI juga dihitung dalam piksel, tetapi dengan cara yang berbeda. Karena itu, jika Anda perlu memanipulasi dua elemen UI relatif satu sama lain. Lebih baik menggunakan posisi lokal. Kenapa begitu?

Posisi lokal (posisi lokal)


Jadi apa sebenarnya posisi lokal:



Ini adalah sistem koordinat ketika pusat dari objek induk adalah 0. Sudut kanan atas adalah lebar positif dari persegi dibagi dua. Kiri atas adalah nilai negatif dari lebar menjadi setengah. Yaitu, jika lebar persegi adalah 800 piksel, maka di tengah x = 0, di kanan 400, di kiri -400. Oleh karena itu, jika Anda perlu menghitung koordinat tanpa memperhitungkan jangkar akun, lebih baik menggunakan posisi lokal. Asalkan mereka memiliki nenek moyang yang sama. By the way, jangkar dapat digunakan tidak hanya sebagai titik tertentu pada objek induk, tetapi juga sebagai proporsi relatif terhadap objek induk. Dalam kasus kedua, anchoredPosition akan mengembalikan localPosition.

Mengapa saya bisa menggunakan posisi biasa untuk elemen UI? Katakan saja, dalam koordinat global, jika Anda menetapkan koordinat objek kedua ke satu, mereka akan berada pada titik yang sama, terlepas dari jangkar atau posisi lokal mereka, kadang-kadang lebih nyaman ketika elemen berada di kanvas yang berbeda / di panel yang berbeda dan sistem koordinatnya adalah lokal / jangkar tidak cocok

Kesimpulan / Ringkasan


  1. Di inspektur, elemen UI menunjukkan anchoredPosition atau proporsi relatif terhadap induk. Posisi Berlabuh dianggap tergantung pada posisi jangkar
  2. localPosition memungkinkan Anda untuk mendapatkan koordinat umum relatif terhadap induk, tanpa mengikat ke jangkar.
  3. position adalah posisi global elemen dalam ruang adegan, tidak terikat dengan UI.


Semoga seseorang membantu :-)

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


All Articles