Unity3d QuickTip – czyli szybkie porady, rozwiązania częstych problemów i sztuczki w Unity3d!
Dzisiejszy odcinek: Jak zablokować/ukryć kursor myszy, ustawienie własnego kursora myszy.
Uwaga! Jest to poradnik typu QuickTip. Zatem skupia się on na osiągnięciu założonego celu. Zatem zakładamy że użytkownik zna na tyle program Unity3d, aby samodzielnie wykonać najprostsze czynności, jak np. dodanie modelu kostki do sceny czy dodanie modelowi jakiegoś komponentu. Jeżeli brakuje Ci tej podstawowej wiedzy, zapraszam do tutoriala:
Unity Tutorial – Podstawy
#303030;">Teoria
W niektórych grach, mamy sterowanie za pomocą myszki, jednak kursor zostaje schowany. Najczęściej to dotyczy wszelakich gier TPP czy FPP. Dodatkowo, czasami chcemy by kursor przybrał nasz, wcześniej zdefiniowany wygląd. Zdarza się to zawsze, gdyż każda gra, ma kursor w swoim klimacie.
Schowanie/Zablokowanie kursora
Jeżeli chodzi o schowanie kursora, sprawa jest bardzo prosto:
Screen.showCursor = false; // Unity 4 Cursor.visible = false; // Unity 5
Wystarczy taki kod wstawić w funkcję Start jakiegoś skryptu, przypisanego najlepiej do kamery głównej.
Drugą opcją, która dla nas jest bardziej atrakcyjna, jest możliwość zablokowania kursora. Czym się to różni od schowania? Zablokowany kursor, również zostaje schowany, ale po za tym, ustawiany jest w centralnej części ekranu, z uniemożliwioną zmianą jego położenia. Robi się to tak:
// Unity 4 Screen.lockCursor = false; // Unity 5 CursorLockMode wantedMode; Cursor.lockState = wantedMode;
W Unity 5, mamy do wyboru 3 sposoby zablokowania kursora:
wantedMode = CursorLockMode.None wantedMode = CursorLockMode.Confined wantedMode = CursorLockMode.Locked
Które dają nam odpowiednio:
- None – Kursor nie jest zablokowany
- Locked – Kursor przypięty jest do środka ekranu
- Confined – Ogranicza kursor do okna gry – działa tylko dla desktopowej wersji gry.
Własna tekstura kursora
Nie możliwe jest zwykłe nałożenie tekstury na kursor. Dlatego trzeba poczynić małą sztuczkę. Mianowicie, chowamy kursor myszy, a w funkcji OnGUI rysujemy sobie tekturę, w miejscu położenia myszy. Brzmi skomplikowanie, ale kod jest bardzo prosty:
public Texture2D cursorTexture; private int cursorSizeX = 32; private int cursorSizeY = 32; void Start() { Screen.showCursor = false; } void OnGUI() { GUI.DrawTexture(Rect(Input.mousePosition.x, (Screen.height - Input.mousePosition.y), cursorSizeX, cursorSizeY), cursorTexture); }
Jak widać, skrypt jest banalnie prosty. Chowamy kursor, po czym rysujemy naszą teksturę. Jedynym dziwnym fragmentem jest umiejscowienie tekstury. Jeżeli chodzi o wartość X, po prostu podajemy położenie myszki. Jednak w przypadku pozycji po osi Y, musimy dokonać małych obliczeń. Wynika to z tego, że dla myszki, punkt (0, 0) znajduje się w lewym, dolnym rogu, kiedy tekstury rysujemy od lewego górnego rogu.
Wykorzystanie myszki jako celownika
W poradniku dotyczącego tworzenia strzelania, tworzyliśmy celownik, rysując go na sztywno, na środku ekranu. Jednak, można to też zrobić inaczej, wykorzystując poznaną dziś funkcję. Właściwie, użyjemy prawie tego samego kodu. Zmieniamy dwie linijki:
// Linijkę: Screen.showCursor = false; // Zmieniamy na: Screen.lockCrusor = false;
Oraz:
// Linijkę: GUI.DrawTexture(Rect(Input.mousePosition.x, (Screen.height - Input.mousePosition.y), cursorSizeX, cursorSizeY), cursorTexture); // Zmieniamy na: GUI.DrawTexture(Rect(Input.mousePosition.x - CursorSizeX / 2, (Screen.height - Input.mousePosition.y) - CursorSizeY / 2, cursorSizeX, cursorSizeY), cursorTexture);
Co sprawiły zmiany? Zablokowaliśmy kursor na środku ekranu. Jednak musieliśmy też, przesunąć rysowaną teksturę. Pozycja myszki, określa położenie “czubka” kursora, czyli tego wysuniętego punktu, którym klikamy. Zatem, bez przesunięcia, celownik, nie byłby narysowany na środku ekranu.