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

Transform Rotate - Unity

42 Warsaw Coding Academy
–1 głos
1,025 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,840 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 314 wizyt
pytanie zadane 15 lutego 2017 w C# przez Adam Olesiak Gaduła (3,290 p.)
0 głosów
0 odpowiedzi 665 wizyt
pytanie zadane 30 grudnia 2015 w C# przez Adrian1999 Nałogowiec (34,570 p.)
0 głosów
2 odpowiedzi 256 wizyt
pytanie zadane 17 kwietnia 2017 w HTML i CSS przez czujek22 Dyskutant (7,670 p.)

93,398 zapytań

142,390 odpowiedzi

322,580 komentarzy

62,759 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
...