OJ, kolego, nie ładnie tak kopiować od innych.
którym gracz przestał sterować kontynuował lot aż do uderzenia w ziemię.
Gracz ma nim nadal sterować?
1. Działanie Input.GetButton Polega na tym, że w ustawieniach projektu wybierasz "Sterowanie" i tam mówisz jaki przycisk odpowiada "v1" oraz "v2". Znacznie lepszą metodą jest Input.GetKey
if(Input.GetKeyDown(KeyCode.Space))
{
print("space key was pressed");
}
Spis wszystkich przycisków: docs.unity3d.com/ScriptReference/KeyCode
przykład: Input.GetKeyDown(KeyCode.Alpha1)
2. Funkcja Update() wykonuje się co klatkę, czyli co klatkę sprawdzasz, czy jakiś przycisk nie został naciśnięty.
Wpisywanie dwóch if'ów może spowodować lekkie problemy gdy ktoś naciśnie oba przyciski naraz.
if (warunek)
{
//kod1
}
else if (warunek)
{
//kod2
}
Jeżeli pierwszy warunek zostanie spełniony to wykona się tylko kod1, w przeciwnym razie sprawdzi drugi warunek, jeżeli będzie spełniony to wykona się kod2, jeżeli nic to nic sie nie wykona.
3. Używanie Coroutine ma swoje zalety i wady. W tym przypadku lepiej jest użyć zwykłych funkcji.
4. Publiczne zmienne jakie zadeklarujesz pojawią ci się w inspektorze, jeżeli masz zaznaczony obiekt w którym jest twój skrypt. Do tych zmiennych musisz przypisać wartość (wystarczy że przeciągniesz odpowiednie obiekty z hierarchii do inspektora do tych pól)
public GameObject Camera1;
public GameObject Camera2;
public GameObject Control1;
public GameObject Control2;
5. Ta linijka jest dla korutyn, bo one muszą coś zwracać
yield return new WaitForSeconds(0.01f);
6. Kod
void viewOne()
{
Camera1.SetActive(true); //aktywujemy pierwszą kamerę
Camera2.SetActive(false); //dezaktywujemy drugą kamerę
Control1.GetComponent<PlayerControler>().enabled = true; //aktywujemy w pierwszej postaci (chyba to jest postać) komponent PlayerControler
Camera1.GetComponent<AudioListener>().enabled = true; //aktywujemy w pierwszej kamerze audiolistener
Camera2.GetComponent<AudioListener>().enabled = false; //dezaktywujemy w drugiej kamerze audiolistener
Control2.GetComponent<RigidbodyControler>().enabled = false; //dezaktywujemy w drugiej postaci komponent RigidbodyControler
}
void viewTwo()
{
if(!Control1.GetComponent<CharacterController>().isGrounded) { return; } //jeżeli pierwsza postać nie jest na ziemi to tutaj kończymy wykonywanie funkcji
Camera2.SetActive(true); //aktywujemy drugą kamerę
Camera1.SetActive(false); //dezaktywujemy pierwszą kamerę
Control1.GetComponent<PlayerControler>().enabled = false; //dezaktywujemy w pierwszej postaci komponent PlayerControler
Camera1.GetComponent<AudioListener>().enabled = false; //dezaktywujemy w pierwszej kamerze audiolistener
Camera2.GetComponent<AudioListener>().enabled = true; //aktywujemy w drugiej kamerze audiolistener
Control2.GetComponent<RigidbodyControler>().enabled = true; //aktywujemy w drugiej postaci komponent RigidbodyControler
}
7. Co do linijki
if(!Control1.GetComponent<CharacterController>().isGrounded) { return; }
// \/ to jest to samo /\
if(!Control1.GetComponent<CharacterController>().isGrounded)
{
return;
}
// \/ to jest to samo /\
if(Control1.GetComponent<CharacterController>().isGrounded == false)
{
return;
}