• 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
64 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ź 125 wizyt
pytanie zadane 8 sierpnia 2018 w C# i .NET przez Yashe Dyskutant (7,620 p.)
0 głosów
1 odpowiedź 91 wizyt
pytanie zadane 8 października 2018 w OpenGL, Unity przez HitMan Użytkownik (660 p.)
0 głosów
0 odpowiedzi 102 wizyt
pytanie zadane 19 marca 2018 w C# i .NET przez ArekPogromca Szparek Początkujący (440 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

64,846 zapytań

111,307 odpowiedzi

234,117 komentarzy

46,718 pasjonatów

Przeglądających: 196
Pasjonatów: 12 Gości: 184

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.

...