Unity Manual Getting Started with Android Development Android Scripting Input

Input

Desktop

Notka: Wejścia klawiatury, joystick i gamepad input działają tylko w desktopowych wersjach Unity (w tym WebPlayer i Flash), ale nie na urządzenia mobilne.

Unity wspiera wejścia klawiatury, joystick i gamepad.

Wirtualne osie i przyciski mogą być tworzone w Input Manager, a użytkownicy końcowi mogą skonfigurować wejście klawiatury w oknie konfiguracji ekranu.

android-input-1.jpg

Możesz ustawić joysticks, gamepads, klawiature i mysz, a następnie przełączać się między nimi za pomocą prostego skryptu interfejsu.

Przez skrypty, wszystkie wirtualne osie są dostępne przez ich nazwy.

Każdy projekt zawiera następujące domyślne osie, kiedy są utworzone:

  • Horizontal i Vertical są odwzorowane w przyciskach W, A, S, D i i klawiszy strzałek.
  • Fire1, Fire2, Fire3 są odwzorowane odpowiednio do Control, Option (Alt) i Command.
  • Mouse X i Mouse Y są odwzorowane do delty ruchu myszki.
  • Window Shake X i Window Shake Y jest odwzorowany na ruch okna.

Dodawanie nowych Input Axes

Jeśli chcesz dodać nowe wirtualne osie przejdź do menu Edit→Project Settings→Input. Tutaj można również zmienić ustawienia dla każdej osi.

android-input-2.jpg

Mapowania/odzwierciedlanie każdej osi dwóch przycisków joysticka, myszy lub klawiszy klawiatury.

  • Name - ciąg nazw wykorzystywany do weryfikacji osi ze skryptu.
  • Descriptive Name - Pozytywna nazwa wartości wyświetlane w zakładce wejścioe dialogu Configuration dla samodzielnych kompilacji.
  • Descriptive Negative Name - Negative nazwa wartości wyświetlane w karcie wejście dialogu Configuration dla samodzielnych kompilacje.
  • Negative Button - Przycisk używany do przesunięcia osi w kierunku ujemnym.
  • Positive Button - Przycisk używany do przesunięcia osi w kierunku dodatnim.
  • Alt Negative Button - Alternatywny przycisk przesunięcia oś w kierunku ujemnym.
  • Alt Positive Button - Alternatywny przycisk przesunięcia oś w kierunku dodatnim.
  • Gravity - Prędkość w jednostkach na sekundę, że oś spada w kierunku neutralnym, gdy nie zostanie naciśnięty przycisk.
  • Dead - Rozmiar analogowegowy martwej strefy. Wszystkie urządzenia analogowe wartości wynik ten zakres mapy neutralnej.
  • Sensitivity - Prędkość w jednostkach na sekundę, że oś będzie poruszać się w kierunku wartości docelowej. To jest dla urządzeń cyfrowych.
  • Snap - Jeśli jest włączone, wartości osi zostaną zresetowane po wciśnięciu przycisku w kierunku przeciwnym.
  • Invert - Jeśli opcja jest włączona Negative Buttons zapewniają wartość dodatnią, i vice-versa.
  • Type - Rodzaj wejść które kontrolują tę osi.
  • Axis - Oś podłączonego urządzenia, które będzie kontrolować tę oś.
  • Joy Num - Podłączony Joystick który będzie kontrolować tę oś.

Użyj tych ustawień, aby wyregulować wygląd i czułość wejścia. Wszystkie podpowiedzi także sa udokumentowane w Edytorze.

Korzystanie z Input Axes w skryptach

Można wysyłać kwerendy bieżącego stanu ze skryptu tak:

value = Input.GetAxis („Horizontal”);

Oś ma wartość z przedziału od -1 do 1. W neutralnej pozycji jest 0. To jest w przypadku wprowadzania joysticka i klawiatury.

Jednakże Mouse Delta i Delta Window Shake zależy o ile myszy lub okna przeniosło się w czasie ostatniej klatce. Oznacza to, że może być większe niż 1 lub mniejsze -1, gdy użytkownik przesuwa wskaźnik myszy szybko.

Jest możliwość tworzenia wielu osi o tej samej nazwie. Przy wsiadaniu na osie wejścia, zostaną zwrócone ose z największą wartość bezwzględna. To sprawia, że można przypisać więcej niż jedno urządzenie wejściowe do jednej nazwy osi. Na przykład utworzyć jedną oś na klawiaturze i jedeą dla joysticka wejście o tej samej nazwie. Jeśli użytkownik używa joysticka, wejście będzie pochodzić z joysticka, w przeciwnym razie dane wejściowe będą pochodzić z klawiatury. W ten sposób nie trzeba brać pod uwagę, ską dane wejściowe pochodzą podczas pisania skryptów.

Nazwy przycisków

Aby zmapować klawisz do osi trzeba wprowadzić nazwę klawisza w Positive Button lub Negative Button w Inspektorze.

Nazwy kluczy po niniejszej konwencji:

  • Normalne klawisze: „a”, „b”, „c” …
  • Klawisze numeryczne: „1”, „2”, „3”, …
  • Klawisze strzałek: „up”, „down”, „left”, „right”
  • Klawisze klawiatury: ”[1]”, ”[2]”, ”[3]”, ”[+]”, ”[równa]”
  • Modyfikujące klawisze: „right shift”, „left shift”, „right ctrl”, „left ctrl”, „right alt”, „left alt”, „right cmd”, „left cmd”
  • Przyciski Myszy: „mouse 0”, „mouse 1”, „mouse 2”, …
  • Przyciski joysticka (z każdego joysticka): „joystick button 0”, „joystick button 1”, „joystick button 2”, …
  • Przyciski joysticka (z określonego joysticka): „joystick 1 button 0”, „joystick 1 button 1”, „joystick 2 button 0”, …
  • Specjalne przyciski: „backspace”, „tab”, „return”, „escape”, „space”, „delete”, „enter”, „insert”, „home”, „end”, „page up”, „page down”
  • Klawisze funkcyjne: „F1”, „F2”, „F3”, …

Nazwy używane do identyfikacji klawiszy są takie same w interfejsie Inspektora jak i skryptów.

value = Input.GetKey („a”);

Mobile Input

Na iOS i Android klasa Wejścia oferuje dostęp do ekranu dotykowego, akcelerometr i geograficznych/lokalizacja wejścia.

Dostęp do klawiatury w urządzeniach mobilnych są dostarczane za pośrednictwem klawiatury iOS.

Ekran Multi-Touch

IPhone i iPod Touch jest w stanie śledzić do pięciu palców dotykających ekranu jednocześnie. Możesz odzyskać status każdego palca dotykającego ekranu podczas ostatniej klatki, korzystając z tablicy http://docs.unity3d.com/Documentation/ScriptReference/Input-touches.htmlInput.touches

Urządzenia z systemem Android nie mają jednolitego limitu ile palców może śledzić. Zamiast tego, to zależy od urządzenia i może być to two-touch na starszych urządzeniach aż do pięciu palców na niektórych nowszych urządzeniach.

Każde dotknięcie palcem jest reprezentowany przez strukturę danych Input.Touch:

  • fingerId - Indeks unikatowy na dotyk.
  • position - Położenie na ekranie dotykowym.
  • deltaPosition - Położenie na ekranie zmian od ostatniej klatki.
  • deltaTime - Ilość czas, który upłynął od ostatniej zmiany stanu.
  • tapCount - ekran iPhone/iPad-a jest w stanie odróżnić szybkie ruchy palcem przez użytkownika, ten licznik pozwoli, wie, ile razy użytkownik ma wykorzystać ekran bez przesuwania palcem na boki.
  • phase - Opisuje tak zwane „fazy” lub stan dotyku. Może to pomóc w określeniu, czy dotyk po prostu zaczął, jeśli użytkownik przeniósł się palcem, czy po prostu podniósł palec.

Fazą może być jedna z następujących czynności:

  • Began - Palec dotknął tylko ekran.
  • Moved - Palcem przeniósł się na ekranie.
  • Stationary - Palec dotyka ekrnu, ale nie został przeniesiony od ostatniej klatki.
  • Ended - Palec został zniesiony z ekranu. To jest w końcowej fazie dotyku.
  • Canceled - System anuluje śledzenia dla dotyku, jako (na przykład) użytkownik przystawia urządzenie do twarzy lub dotyka więcej niż pięcioma palcami jednocześnie. To jest w końcowej fazie dotyku.

Oto przykładowy skrypt, który będzie strzelać promyk, w każdym przypadku, gdy użytkownik puknie na ekranie:

var particle : GameObject;
function Update () {
for (var touch : Touch in Input.touches) {
	if (touch.phase == TouchPhase.Began) {
		/ / Construct a ray from the current touch coordinates
		var ray = Camera.main.ScreenPointToRay (touch.position);
		if (Physics.Raycast (ray)) {
			/ / Create a particle if hit
			Instantiate (particle, transform.position, transform.rotation);
		}
	}
    }
}

Symulacja Myszy

Na szczycie natywnego wsparcia Unity dotykowego iOS/Android zapewnia symulację myszy. Możesz używać funkcji myszy ze standardowej klasy Wejścia.

Orientacja urządzenia

Unity iOS/Android pozwala uzyskać dyskretne opisy urządzenia fizycznej orientacji w przestrzeni trójwymiarowej. Wykrywanie zmiany orientacji może być przydatne, jeśli chcesz tworzyć gry zachowywujące się w zależności od tego, jak użytkownik trzyma urządzenie.

Orientacji urządzenia można pobrać za pośrednictwem właściwości Input.deviceOrientation. Orientacją może być jedną z następujących czynności::

  • Unknown - Nie można określić orientacji urządzenia. Na przykład gdy urządzenie jest obracane po przekątnej.
  • Portrait - Urządzenie jest w trybie portretowym, urządzenie które znajduje się w pozycji pionowej i przycisk HOME jest na dole.
  • PortraitUpsideDown - Urządzenie jest w trybie portretowym, ale do góry nogami, urządzenie które odbędzie się w pozycji pionowej i przycisk HOME na górze
  • LandscapeLeft - Urządzenie jest w trybie poziomym, urządzenie jest ustawione w pozycji pionowej i przycisk HOME, po prawej stronie.
  • LandscapeRight - Urządzenie jest w trybie poziomym, urządzenie jest ustawione w pozycji pionowej i przycisk HOME, po lewej stronie.
  • FaceUp - Urządzenie jest ustawione w pozycji równolegle do ziemi ekranu skierowany do góry.
  • FaceDown - Urządzenie jest ustawione w pozycji równolegle do ziemi ekranu skierowany do dołu.

Accelerometer (przyśpieszenie)

Jak porusza się urządzenie mobilne, wbudowany czujnik raportuje zmiany przyspieszenia liniowego wzdłuż trzech podstawowych osi w trójwymiarowej przestrzeni. Przyspieszenie wzdłuż każdej z osi jest zgłaszane bezpośrednio przez sprzęt jako wartości G-force. Wartość 1.0 reprezentuje obciążenie około +1g wzdłuż określonej osi, podczas gdy wartość -1,0 reprezentuje -1g. Jeśli trzymać urządzenie w pozycji pionowej (z przycisku HOME na dole) przed sobą, oś X jest dodatni po prawej, oś Y jest dodatnia bezpośrednio w górę, a oś Z jest dodatnia wskazując na ciebie.

Wartość przyspieszenia można pobrać za pośrednictwem właściwości Input.acceleration

Poniżej przedstawiono przykładowy skrypt, który będzie przenosić obiekt za pomocą akcelerometru:

var speed = 10.0;
function Update () {
var dir : Vector3 = Vector3.zero;
// we assume that the device is held parallel to the ground
// and the Home button is in the right hand
// remap the device acceleration axis to game coordinates:
//  1) XY plane of the device is mapped onto XZ plane
//  2) rotated 90 degrees around Y axis
dir.x = -Input.acceleration.y;
dir.z = Input.acceleration.x;
// clamp acceleration vector to the unit sphere
if (dir.sqrMagnitude > 1)
	dir.Normalize();
// Make it move 10 meters per second instead of 10 meters per frame...
dir *= Time.deltaTime;
// Move object
transform.Translate (dir * speed);
}

Low-Pass Filter

Odczyty akcelerometr mogą być gwałtowne i hałaśliwe. Zastosowanie dolnoprzepustowe filtrowanie sygnału umożliwia wygładzić i pozbyć się hałasu wysokiej częstotliwości.

Poniższy skrypt pokazuje, jak stosować dolnoprzepustowe filtrowanie do odczytywania przyspieszenia:

var AccelerometerUpdateInterval : float = 1.0 / 60.0;
var LowPassKernelWidthInSeconds : float = 1.0;
private var LowPassFilterFactor : float = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds; // tweakable
private var lowPassValue : Vector3 = Vector3.zero;
function Start () {
lowPassValue = Input.acceleration;
}
function LowPassFilterAccelerometer() : Vector3 {
lowPassValue = Mathf.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
return lowPassValue;
}

Im większa wartość LowPassKernelWidthInSeconds, wolniej przefiltrowane wartości będą się zbliżać do bieżącego wprowadzania próbki (i vice versa). Powinieneś być w stanie korzystać z funkcji LowPassFilter() zamiast avgSamples().

Chciałbym tyle precyzji jak to możliwe, podczas odczytywania akcelerometr. Co należy zrobić?

Odczytywanie zmiennej Input.acceleration nie jest równa pobieraniu próbek sprzętu. Mówiąc prościej, Unity pobiera próbki sprzętu z częstotliwością 60 Hz i zapisuje wynik do zmiennej. W rzeczywistości rzeczy są nieco bardziej skomplikowane - akcelerometr pobierania próbek nie występuje w zgodnych odstępach czasu, jeśli CPU jest pod dużym obciążeniem. W rezultacie system może zgłosić 2 próbki podczas jednej klatki, a następnie 1 próbkę podczas następnej klatki.

Można uzyskać dostęp do wszystkich pomiarów wykonych przez akcelerometr w ramce. Następujący kod ilustruje zwykłą średnią wszystkich zdarzeń akcelerometr, które zostały zebrane w ostatniej ramce:

 var czas: float = 0,0;
 var acc: Vector3 = Vector3.zero;
 for (var EVNT: iPhoneAccelerationEvent w iPhoneInput.accelerationEvents) {
    acc + = evnt.acceleration * evnt.deltaTime;
    okres + = evnt.deltaTime;
 }
 if (czas> 0)
    acc * = 1.0/period;
 powrót acc;

Literatura dodatkowa

Unity API wejścia komórkowego jest początkowo w oparciu o API firmy Apple. To może pomóc, aby dowiedzieć się więcej o natywnym API, aby lepiej zrozumieć Unity API w wejściach. Watro by zajrzeć do dokumentacji Apple iPhone SDK która zawiera kod macierzysty ObjectiveC, to nie jest konieczne do zrozumienia tych dokumentów za pomocą Unity na urządzeniach przenośnych, ale mogą być pomocne dla niektórych! i wprowadzania API.

iOS

Device geographical location

Położenie geograficzne urządzenia można uzyskać za pośrednictwem właściwości iPhoneInput.lastLocation. Przed wywołaniem tej właściwości należy rozpocząć lokalizację usługi aktualizacji za pomocą iPhoneSettings.StartLocationServiceUpdates()i sprawdzanie stanu usług za pośrednictwem iPhoneSettings.locationServiceStatus. Zobacz szczegóły skryptowego odniesienia.


Poprzedni Następny

unity_manual/android-input.txt · ostatnio zmienione: 2013/02/21 20:47 przez valaantha
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki