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

Transform Rotate - Unity

Object Storage Arubacloud
–1 głos
861 wizyt
pytanie zadane 19 marca 2017 w OpenGL, Unity przez Emil Panecki Bywalec (2,100 p.)
edycja 19 marca 2017 przez Emil Panecki

Robie Gre ale RPG i mam problem z poruszaniem, napisałem kod by postać przekręcałą się w tą strone w którą ma iść i klikam np. W  to postać idzie i się kręci do okoła. Prubowałem dodać set transform.Rotate(0, 0, 180);  to Unity miało problem z ";" ktoś wie jak zrobić by postać raz się przekręciła?

 

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

public class Ruch : MonoBehaviour
{

    public float Speed = 8;
	public float SpeedMAX = 12;
	public int DMG = 25;
	public int HealPoint = 20;
    public Rigidbody2D Rigid
    {
        get
        {
            return GetComponent<Rigidbody2D>();
        }
	}

    void Update()
    {

        if (Input.GetKey(KeyCode.D))
        {
            transform.position += Vector3.right * Speed * Time.deltaTime;
			transform.Rotate(0, 0, 270);
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.position += Vector3.left * Speed * Time.deltaTime;
			transform.Rotate(0, 0, 90);
        }
        if (Input.GetKey(KeyCode.W))
        {
            transform.position += Vector3.up * Speed * Time.deltaTime;
			transform.Rotate(0, 0, 0);
        }
        if (Input.GetKey(KeyCode.S))
        {
            transform.position += Vector3.down * Speed * Time.deltaTime;
			transform.Rotate(0, 0, 180);
		}

    }
}

 

3 odpowiedzi

0 głosów
odpowiedź 19 marca 2017 przez michal12334 Obywatel (1,510 p.)
Spróbuj tak:

void Update() {

float rochPrzodTyl = Input.GetAxis("Vertical") * predkoscPoruszania;

float rochLewoPrawo = Input.GetAxis("Horizontal") * predkoscPoruszania;

if(characterControler.isGrounded && Input.GetButton("Jump")){
aktualnaWysokoscSkoku = wysokoscSkoku;
} else if (!characterControler.isGrounded ){

aktualnaWysokoscSkoku += Physics.gravity.y * Time.deltaTime;
}

if(Input.GetKeyDown("left shift")) {
predkoscPoruszania+=predkoscBiegania;
} else if(Input.GetKeyUp("left shift")) {
predkoscPoruszania-=predkoscBiegania;
}

Vector3 ruch = new Vector3(rochLewoPrawo, aktualnaWysokoscSkoku, rochPrzodTyl);

ruch = transform.rotation * ruch;
characterControler.Move(ruch * Time.deltaTime);

 

Spróbuj tak tylko zmień nazwy zmiennych na swoje, bo jest to fragment kody z mojej starej gry i nie modyfikowałem go pod twoje nazwy zmiennych. Źródło: https://www.youtube.com/watch?v=Iwxf640yxbI&index=2&list=PLQcjPyzULeKfY4gDmrfdQwcwSFWx0A7Y3
komentarz 19 marca 2017 przez Piter10p Bywalec (2,750 p.)
Ziomek, ty czytałeś wgl. ten post na początku?
komentarz 19 marca 2017 przez KubenQPL Maniak (62,820 p.)
Kod daj do znacznika do tego służącego.
0 głosów
odpowiedź 19 marca 2017 przez Piter10p Bywalec (2,750 p.)

Jakbyś zajrzał do API, wiedziałbyś że metoda "Rotate" powoduje nie ustawienie rotacji w przestrzeni a rotuje obiekt o dany kąt.

Ten kod teoretycznie powinien działać (nie sprawdzałem czy działa faktycznie):

void Update()
{
	Quaternion rotation = new Quaternion();
	clearRotation(rotation);

	if (Input.GetKey(KeyCode.D))
	{
		rotation.AngleAxis(270, Vector3.forward);
		transform.rotation = rotation;
	}
	if (Input.GetKey(KeyCode.A))
	{
		rotation.AngleAxis(90, Vector3.forward);
		transform.rotation = rotation;
	}
	if (Input.GetKey(KeyCode.W))
	{
		rotation.AngleAxis(0, Vector3.forward);
		transform.rotation = rotation;
	}
	if (Input.GetKey(KeyCode.S))
	{
		rotation.AngleAxis(180, Vector3.forward);
		transform.rotation = rotation;
	}

}

void clearRotation(rotation)
{
	rotation.AngleAxis(0, Vector3.up);
	rotation.AngleAxis(0, Vector3.right);
	rotation.AngleAxis(0, Vector3.forward);
}

Pozdrawiam

0 głosów
odpowiedź 19 marca 2017 przez Adam Olesiak Gaduła (3,290 p.)
edycja 19 marca 2017 przez Adam Olesiak
void Update () {
        if (Input.GetKey(KeyCode.W))
        {
            transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));
        }
        if (Input.GetKey(KeyCode.S))
        {
            transform.rotation = Quaternion.Euler(new Vector3(0, -180f, 0));
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.rotation = Quaternion.Euler(new Vector3(0, -90f, 0));
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.rotation = Quaternion.Euler(new Vector3(0,90f,0));
        }
    }

 

Podobne pytania

0 głosów
0 odpowiedzi 297 wizyt
pytanie zadane 15 lutego 2017 w C# przez Adam Olesiak Gaduła (3,290 p.)
0 głosów
0 odpowiedzi 636 wizyt
pytanie zadane 30 grudnia 2015 w C# przez Adrian1999 Nałogowiec (34,570 p.)
0 głosów
2 odpowiedzi 188 wizyt
pytanie zadane 17 kwietnia 2017 w HTML i CSS przez czujek22 Dyskutant (7,670 p.)

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 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!

...