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

VPS Starter Arubacloud
+1 głos
841 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,016 wizyt
pytanie zadane 8 sierpnia 2018 w C# przez Yashe Dyskutant (7,720 p.)
0 głosów
1 odpowiedź 751 wizyt
pytanie zadane 8 października 2018 w OpenGL, Unity przez HitMan Użytkownik (850 p.)
0 głosów
0 odpowiedzi 46 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...