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

Unity 2D problem ze skyptem od strzelania

42 Warsaw Coding Academy
0 głosów
185 wizyt
pytanie zadane 13 grudnia 2023 w Systemy operacyjne, programy przez M4jk3l07 Początkujący (310 p.)

Witam!

Tworzę prostą grę w unity 2d w której sterujemy kwadratem po całej planszy. Kwadrat może iść do przodu skręcać (obracać się). Chciałem dodatkowo zrobić system strzelania. Udało mi się zrobić kod na to jednak jest mały problem. System strzelania robiłem z tego poradnika: https://www.youtube.com/watch?v=wkKsl1Mfp5M&t=11s tam gościu robi system strzelania ale w oparciu na kamerze pisząc moimi słowami z boku postaci, a ja tworzą z kamerą skierowaną na postać z samej góry.  W wyniku tego pocisk u mnie po wystrzeleniu leci cały czas w prawo, a nie tak jakbym chciał że leci w tą stronę w którą skierowany jest kwadrat, czyli prosto. Oto kod na przemieszczanie się pocisku:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{

    public float speed = 20f;
    public Rigidbody2D rb;

    // Start is called before the first frame update
    void Start()
    {
        rb.velocity = transform.right * speed;
    }

    
}

Jeśli ktoś wie jak zrobić aby pocisk leciał prosto, to będę wdzięczny.

2 odpowiedzi

0 głosów
odpowiedź 13 grudnia 2023 przez neo1020 Dyskutant (8,950 p.)
może zmień ? transform.right - na - transform.up ? nie wiem nie znam się
0 głosów
odpowiedź 15 grudnia 2023 przez womecm Nowicjusz (180 p.)
x = sin y = cos pobierz obrót ( ciekawe czy poprawnie to napisałem po polskiemu ) rotation of Your object. a następnie wykorzystaj go z użyciem sinusa i cosinusa aby "szczelić" we właściwym kierunku. Zapewne twój "kwodrot" obraca się aby zwizualizować kierunek w którym patrzy, przyjmijmy że kierunek w który patrzy określa oś Z ( jeśli robisz grę 3D ) Przyjmijmy że Z = 218* W tym przypadku potrzebujesz utworzyć sobie "wektor" z tej wartości obrotu. Potrzebujesz 2 wartosci. - 1 ) Jak dużo przesunąć się w osi X - 2) Jak dużo przesunąć się w osi Y X uzyskasz poprzez x = sin( 218 ); y = cos( 218 ); oczywiście zamiast korzystać z 218 skorzystaj z aktualnego obrotu kwadratu. x = sin( Kwadrat.RotationZ ); Nie pamiętam czy funkcje trygonometryczne Unity korzystają też z radianów ale jeśli to swoje "Z" przemnóż przez... o ile mnie pamięć nie myli 0.0017444 x = sin ( Kwadrat.RotationZ * 0.0017444 ); y = cos ( Kwadrat.RotationZ * 0.0017444 ); sinus i cosinus w tym przypadku będą zwracać wartość pomiędzy -1 a 1 Aby uzyskać większy wektor możesz przemnożyć go przez jakąś wartość. x = sin( Kwadrat.RotationZ * 0.0017444 ) * Speed; y = sin( Kwadrat.RotationZ * 0.0017444 ) * Speed; potem zrób wektor z tego X i Y o przesuń "pocisk" o ten wektor. "Mondrala" pan neo1020 ( celowo z małych ) - poziom Stack Overflow. ogólnie jak chcesz uzyskać "punkt" na okręgu możesz po prostu użyć sin i cos...

//Edit:

Człowiek dodaje entery i pracuje nad odpowiedzią a potem cała odpowiedź i tak jest rozwalona przez skrypt... GJ.

Podobne pytania

0 głosów
0 odpowiedzi 929 wizyt
pytanie zadane 16 stycznia 2020 w C# przez Wungiel Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 263 wizyt
0 głosów
1 odpowiedź 1,448 wizyt
pytanie zadane 21 listopada 2017 w OpenGL, Unity przez Eryk Chojnacki Obywatel (1,420 p.)

93,395 zapytań

142,389 odpowiedzi

322,569 komentarzy

62,754 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...