• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

(C#) Unity - dodawanie momentu obrotowego względem kamery.

+1 głos
60 wizyt
pytanie zadane 21 listopada 2018 w Systemy operacyjne, programy przez MikeMG Początkujący (330 p.)
edycja 21 listopada 2018 przez MikeMG

Witam serdecznie. Mam za zadanie zaprogramować ruch kulki oraz kamery w perspektywie trzeciej osoby, w 3D, w Unity na wersji 2018.2.14f1.

Całość ma działać na prostej zasadzie: Przy naciśnięciu klawisza "W" kulka porusza się do przodu względem świata (nadanie momentu obrotowego funkcją rigidbody.AddTorque(Vector3.right * 2f) powoduje nadanie momentu obrotowego względem konkretnej osi w świecie. Skutkuje to oczywiście tym, że gdy obrócę myszką kamerę wokół kuli, którą steruję, przy naciśnięciu klawisza "W" nie poruszam się kulą w kierunku, w którym patrzę. Ona dalej turla się do przodu względem świata.

Pobrałem wartość wektora transform.rotation z kamery i na jego podstawie próbowałem nadać moment obrotowy kuli względem tej kamery, ale, niestety, z marnym skutkiem.

Szukam zatem jakiegoś łatwego do zaimplementowania w kodzie sposobu na nadawanie momentu obrotowego w kierunku, w którym patrzymy. Jestem początkujący, wykonuję zadanie do tworzonej gry na zajęciach.

Mój kod w skrypcie podpiętym pod kulę:

FollowingCamera followingCamera = GameObject.Find("CameraBase").GetComponent<FollowingCamera>(); // pobranie komponentu kamery
float rotat = followingCamera.realRotY; // odczytanie obrotu KAMERY wokół osi Y
Vector3 direction = Vector3.zero; // utworzenie wektora kierunku

void moveForward() // podczas naciskania klawisza "W"
{
        Vector3 tempRot = transform.localEulerAngles; // przypisanie nowemu wektorowi buforowemu wartości obrotu KULI wokół osi Y
        tempRot.y = rotat; // nadanie osi Y w buforze wartości obrotu KAMERY wokół osi Y
        transform.localEulerAngles = tempRot; // obrócenie KULI na pozycję, w którą skierowana jest KAMERA (chcemy w tym kierunku ruszyć)
        direction = transform.right * 2f; // nadanie momentu obrotowego
}

 

1 odpowiedź

+1 głos
odpowiedź 21 listopada 2018 przez Borys Kaczmarek Użytkownik (650 p.)

Nie potrzebujesz pobierać żadnej rotacji. Wystarczy funkcja "transform.TransformDirection" która zwraca ci wektor względem obiektu.

void MoveForward() {
    Vector3 direction = transform.TransformDirection(Vector3.forward * speed);
}

 

1
komentarz 22 listopada 2018 przez MikeMG Początkujący (330 p.)
I w jaki sposób mógłbym połączyć przy pomocy tej funkcji kulę z kierunkiem, w którym patrzy kamera? Przepraszam, ale kombinuję z tym trochę i nie rozumiem...
1
komentarz 22 listopada 2018 przez MikeMG Początkujący (330 p.)
Ach! Dobrze, dobrze! Już mam! :) Wystarczyło wywołać tę funkcję nie na rzecz kuli, ale na rzecz kamery. Całość działa cudownie, jesteś wielki!

Podobne pytania

0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 8 sierpnia 2018 w C# i .NET przez Yashe Dyskutant (7,620 p.)
0 głosów
0 odpowiedzi 92 wizyt
pytanie zadane 19 marca 2018 w C# i .NET przez ArekPogromca Szparek Początkujący (400 p.)
0 głosów
1 odpowiedź 82 wizyt
pytanie zadane 8 października 2018 w OpenGL, Unity przez HitMan Użytkownik (580 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

62,306 zapytań

108,432 odpowiedzi

226,358 komentarzy

35,031 pasjonatów

Przeglądających: 156
Pasjonatów: 1 Gości: 155

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...