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

obliczanie kąta - Unity

Cloud VPS
0 głosów
564 wizyt
pytanie zadane 8 sierpnia 2017 w C# przez DODO Bywalec (2,950 p.)

Witam.

Wpadłem na pomysł zrobienia jakiejś gry gdzie lata się statkiem (w poprzednim pytaniu też był z nim problem) i coś tam się zbiera albo się walczy. Na razie chciałem zrobić sterowanie. Steruje się klawiszami wsad a statek obraca się tam gdzie lecimy. I tu jest problem z tym odwracaniem. Niby jakoś się obraca ale strasznie nienaturalnie i czasem przodem a czasem tyłem. Oto kod:

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

public class PlayerControls : MonoBehaviour {

    public float mSpeed = 5;
    public GameObject spaceship;
    float spdx;
    float spdz;
    float angle;
    Vector2 speed = new Vector2(0f, 0f);
    Vector2 zero = new Vector2(0f, 1f);

    void Start () {
        
	}
	
	void Update () {

        speed = new Vector2(spdx, spdz);
        if (spdx != 0 && spdz != 0)
        {
            angle = Vector2.Angle(speed, zero);
        }

        spdx *= 0.98f;
        spdz *= 0.98f;
        
        if (Input.GetKey("w"))
        {
            spdz += mSpeed;
        }
        if (Input.GetKey("s"))
        {
            spdz -= mSpeed;
        }
        if (Input.GetKey("a"))
        {
            spdx -= mSpeed;
        }
        if (Input.GetKey("d"))
        {
            spdx += mSpeed;
        }
        transform.Translate(spdx * Time.deltaTime, 0f, spdz * Time.deltaTime);
        spaceship.transform.rotation = Quaternion.Euler(90f, angle-90f, 0f);

        print(angle);

    }
}

Kod jest dodany do grupy objektów "Player" do której należą kamera i statek.

Proszę o pomoc z tym obracaniem.

komentarz 8 sierpnia 2017 przez DODO Bywalec (2,950 p.)
Postaram się jeszcze dodać wideo

1 odpowiedź

0 głosów
odpowiedź 8 sierpnia 2017 przez adrian313 Bywalec (2,850 p.)

Cześć, nie używałem Unity ale pisałem takie poruszanie się samemu:
 

publicvoid backward(float delta) {
        forward(delta);
    }

    publicfloat toRad(float degrees) {
        return (degrees * MathUtils.PI) / 180.f;
    }

    publicVector2 getMovementVector(float rotation) {
        Vector2 v = new Vector2();
        float rad = toRad(rotation);

        v.x = MathUtils.sin(rad);
        v.y = -MathUtils.cos(rad);

        return v;
    }

    public void forward(float delta) {
        Vector2 w = getMovementVector(sprite.getRotation());

        position.x -= w.x * SPEED * delta;
        position.y -= w.y * SPEED * delta;
    }

Może to Ci coś pomoże. 

Podobne pytania

–3 głosów
2 odpowiedzi 351 wizyt
pytanie zadane 9 października 2021 w C# przez xkamiz Użytkownik (500 p.)
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 2 września 2021 w C# przez Jakusss Początkujący (410 p.)
0 głosów
0 odpowiedzi 447 wizyt
pytanie zadane 28 sierpnia 2021 w C# przez Jakusss Początkujący (410 p.)

93,482 zapytań

142,414 odpowiedzi

322,761 komentarzy

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

Kursy INF.02 i INF.03
...