• 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.

Object Storage Arubacloud
+1 głos
866 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 (630 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!
komentarz 2 września 2021 przez SeJaSe Nowicjusz (100 p.)
mam podobny problem . A jak wygląda cały Kod ?

Podobne pytania

0 głosów
1 odpowiedź 1,034 wizyt
pytanie zadane 8 sierpnia 2018 w C# przez Yashe Dyskutant (7,720 p.)
0 głosów
1 odpowiedź 755 wizyt
pytanie zadane 8 października 2018 w OpenGL, Unity przez HitMan Użytkownik (850 p.)
0 głosów
0 odpowiedzi 48 wizyt

92,566 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...