Unity 4.3-zrozumienie pozycji i rozdzielczości ekranu, jak prawidłowo ustawić pozycję obiektu?

Używając Unity 4.3 w trybie 2d mam GameObject, który jest sprite 'em( w Spriterendererze ustawiłem sprite' a), i staram się ustawić go w lewym górnym rogu ekranu.

Chciałbym, aby ten sprite był umieszczony w lewym górnym rogu (na przykład) w każdej rozdzielczości(mam iOS jako cel budowania, więc w moim przypadku mówię o iPhone wszystkich rozdzielczościach, Siatkówka, Siatkówka, iPad itp).

Brakuje mi tylko tego, jak dokładnie działa układ współrzędnych, Jestem przyzwyczajony do pracy z pikselami w układzie współrzędnych, w którym 0,0 zaczyna się od lewego dolnego lub lewego górnego rogu.

Tutaj w Unity 4.3 wydaje się, że 0,0 jest w środku (to nie jest duży problem oczywiście), ale to, co mnie myli, to to, że jeśli wydrukować szerokość mojego obiektu (która jest 128px) dostaję wartość 1.06 jako, a także ekran jest podzielony na "punkty" przypuszczam, więc lewa jest -3 a prawa jest +3

Więc pytania brzmią: Dlaczego moja szerokość sprite ' a wynosi 1.06 ? Jak mam pozycjonować wszystko idealnie w tym systemie ?

Wyobraź sobie, że chcę umieścić kwadrat 128px * 128px dokładnie w lewym górnym rogu, jak to zrobić?

 22
Author: Adarkuccio, 2014-03-23

1 answers

Pierwszą rzeczą, którą warto zauważyć, jest to, że podczas importowania obrazu do unity jako typ Tekstury = Sprite, istnieje atrybut "Pixels To Units", który zobaczysz na zasobie sprite.

Tutaj wpisz opis obrazka

Więc twój 128px, jeśli pozostawiony przy domyślnych ustawieniach, będzie miał szerokość 1.28 "jednostek". Ta wartość nie odpowiada jednak twoim pomiarom 1.06, więc nie jestem pewien, skąd to się bierze. Może być tak dlatego, że skala Twojego obiektu sprite ' a nie jest jednolita, albo dlatego, że Twój Zmodyfikowano ustawienie "piksele do jednostek". Sprawdź ponownie w Inspektorze, czy Tekstura wejściowa ma wartość 128x128, a także sprawdź, czy wartość Pixel to Units jest taka, jakiej oczekujesz.

Następnie zauważ, że" rozmiar " aparatu ortograficznego odpowiada połowie jego wysokości.

Więc na poniższym obrazku kamera ortho zobaczy obszar w białym pudełku. Rozmiar 5 oznacza 10 jednostek wysokości. Obraz kwiatu mam w scenie jest 128 pikseli szerokości przez 96 pikseli wysokiej obrazu, importowane przy ustawieniach domyślnych(1 Jednostka = 100 pikseli).

Tutaj wpisz opis obrazka

Teraz nie jestem pewien, jaki jest Twój dokładny przypadek użycia (tj. być może jest to coś lepiej rozwiązane za pomocą GUITexture). Jednak zakładając, że chcesz użyć Sprite ' a i każdą klatkę, którą chcesz, aby była w lewym górnym rogu, i chcesz, aby ten sprite zawsze był wyświetlany w natywnym res, to poniższy kod zrobi to. Dodaj go do skryptu dołączonego do obiektu Gry Sprite.

// Update is called once per frame
void Update () {
    float camHalfHeight = Camera.main.orthographicSize;
    float camHalfWidth = Camera.main.aspect * camHalfHeight; 

    Bounds bounds = GetComponent<SpriteRenderer>().bounds;

    // Set a new vector to the top left of the scene 
    Vector3 topLeftPosition = new Vector3(-camHalfWidth, camHalfHeight, 0) + Camera.main.transform.position; 

    // Offset it by the size of the object 
    topLeftPosition += new Vector3(bounds.size.x / 2,-bounds.size.y / 2, 0);

    transform.position = topLeftPosition;        
}
 38
Author: ardrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-23 21:47:19