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

[Unity] [C#] Poruszanie sie, skakanie, opóźnienie w poruszaniu.

Object Storage Arubacloud
0 głosów
2,618 wizyt
pytanie zadane 18 marca 2018 w C# przez ArekPogromca Szparek Początkujący (440 p.)
edycja 18 marca 2018 przez ArekPogromca Szparek

Witam, mam problem, napisałem kod na poruszanie się w prawo i lewo, lecz nie umiem napisać kodu na skakanie, c# uczę się od wczoraj. Jeszcze proszę o pomoc w opóźnieniu w poruszaniu się, np. naciskam D, i idzie w prawo, z opóźnieniem 0.2 s. napisałem już takie coś ale nie działało jak chciałem.

Kod:

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

public class PlayerMovement : MonoBehaviour {

    public float pSpeed = 5.0f;
    public float pSprintSpeed = 12.0f;

    public float pJumpHeight = 5.0f;

    private void Start()
    {
        print("Starting...");
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.A))
        {
            if (Input.GetKey(KeyCode.LeftShift))
            {
                transform.Translate(-pSprintSpeed * Time.deltaTime, 0f, 0f);
                // Tutaj ze sprintem w prawo.
            }
            else
            {
                transform.Translate(-pSpeed * Time.deltaTime, 0f, 0f);
                // Tutaj bez sprintu w prawo.
            }
        } else if (Input.GetKey(KeyCode.D))
        {
            if (Input.GetKey(KeyCode.LeftShift))
            {
                transform.Translate(pSprintSpeed * Time.deltaTime, 0f, 0f);
                // Tutaj ze sprintem w lewo.
            }
            else
            {
                transform.Translate(pSpeed * Time.deltaTime, 0f, 0f);
                // Tutaj bez sprintu w lewo.
            }
        } else if (Input.GetKey(KeyCode.Space))
        {
                
                // Tutaj bez sprintu jump.
        }
    }
    // Gettery i setery których nie umiem robic... i nawet nie wiem czy są.

}

Za wszystkie odp. z góry dzięki.

Pozdrawiam.

EDIT: Od razu piszę, to działa źle:

transform.Translate(0f * Time.deltaTime, pJumpHeight, 0f);

 

2 odpowiedzi

0 głosów
odpowiedź 18 marca 2018 przez Utau Użytkownik (900 p.)
wybrane 18 marca 2018 przez ArekPogromca Szparek
 
Najlepsza
using UnityEngine;
using System.Collections;
 
public class PlayerControler : MonoBehaviour {
 
    //Obiekt odpowiedzialny za ruch gracza.
    public CharacterController characterControler;
 
    //Prędkość poruszania się gracza.
    public float predkoscPoruszania = 9.0f;
    //Wysokość skoku.
    public float wysokoscSkoku = 7.0f;
    //Aktualna wysokosc skoku.
    public float aktualnaWysokoscSkoku = 0f;
    //Predkosc biegania.
    public float predkoscBiegania = 7.0f;
 
    //Czulość myszki (Sensitivity)
    public float czuloscMyszki = 3.0f;  
    public float myszGoraDol = 0.0f;
    //Zakres patrzenia w górę i dół.
    public float zakresMyszyGoraDol = 90.0f;
 
    // Use this for initialization
    void Start () {
        characterControler = GetComponent<CharacterController>();
    }
     
    // Update is called once per frame
    void Update() {
        klawiatura();
        myszka();
    }
 
    /**
     * Metoda odpowiedzialna za poruszanie się na klawiaturze.
     */
    private void klawiatura(){
        //Pobranie prędkości poruszania się przód/tył.
        // jeżeli wartość dodatnia to poruszamy się do przodu,
        // jeżeli wartość ujemna to poruszamy się do tyłu.
        float rochPrzodTyl = Input.GetAxis("Vertical") * predkoscPoruszania;
        //Pobranie prędkości poruszania się lewo/prawo.
        // jeżeli wartość dodatnia to poruszamy się w prawo,
        // jeżeli wartość ujemna to poruszamy się w lewo.
        float rochLewoPrawo = Input.GetAxis("Horizontal") * predkoscPoruszania;
        //Debug.Log (rochLewoPrawo);
         
        //Skakanie
        // Jeżeli znajdujemy się na ziemi i została naciśnięta spacja (skok)
        if(characterControler.isGrounded && Input.GetButton("Jump")){
            aktualnaWysokoscSkoku = wysokoscSkoku;
        } else if (!characterControler.isGrounded ){//Jezeli jestesmy w powietrzu(skok)
            //Fizyka odpowiadająca za grawitacje (os Y).
            aktualnaWysokoscSkoku += Physics.gravity.y * Time.deltaTime;
        }
         
        Debug.Log (Physics.gravity.y);
         
        //Bieganie
        if(Input.GetKeyDown("left shift")) {
            predkoscPoruszania+=predkoscBiegania;
        } else if(Input.GetKeyUp("left shift")) {
            predkoscPoruszania-=predkoscBiegania;
        }
         
        //Tworzymy wektor odpowiedzialny za ruch.
        //rochLewoPrawo - odpowiada za ruch lewo/prawo,
        //aktualnaWysokoscSkoku - odpowiada za ruch góra/dół,
        //rochPrzodTyl - odpowiada za ruch przód/tył.
        Vector3 ruch = new Vector3(rochLewoPrawo, aktualnaWysokoscSkoku, rochPrzodTyl);
        //Aktualny obrót gracza razy kierunek w którym sie poruszamy (poprawka na obrót myszką abyśmy szli w kierunku w którym patrzymy).
        ruch = transform.rotation * ruch;
         
        characterControler.Move(ruch * Time.deltaTime);
    }
 
    /**
     * Metoda odpowiedzialna za ruch myszką.
     */
    private void myszka(){
        //Pobranie wartości ruchu myszki lewo/prawo.
        // jeżeli wartość dodatnia to poruszamy w prawo,
        // jeżeli wartość ujemna to poruszamy w lewo.
        float myszLewoPrawo = Input.GetAxis("Mouse X") * czuloscMyszki; 
        transform.Rotate(0, myszLewoPrawo, 0);
         
        //Pobranie wartości ruchu myszki góra/dół.
        // jeżeli wartość dodatnia to poruszamy w górę,
        // jeżeli wartość ujemna to poruszamy w dół.
        myszGoraDol -= Input.GetAxis("Mouse Y") * czuloscMyszki;
         
        //Funkcja nie pozwala aby wartość przekroczyła dane zakresy.
        myszGoraDol = Mathf.Clamp(myszGoraDol, -zakresMyszyGoraDol, zakresMyszyGoraDol);
        //Ponieważ CharacterController nie obraca się góra/dół obracamy tylko kamerę.
        Camera.main.transform.localRotation = Quaternion.Euler(myszGoraDol, 0, 0);
    }
 
}

 

0 głosów
odpowiedź 18 marca 2018 przez Jacek Rojek Bywalec (2,380 p.)
transform.Translate(0f, pJumpHeight * Time.deltaTime, 0f);

Podobne pytania

0 głosów
0 odpowiedzi 410 wizyt
pytanie zadane 17 maja 2020 w OpenGL, Unity przez Stami Gaduła (3,790 p.)
0 głosów
1 odpowiedź 4,086 wizyt
pytanie zadane 11 stycznia 2019 w C# przez niezalogowany
0 głosów
0 odpowiedzi 566 wizyt
pytanie zadane 12 kwietnia 2021 w C# przez koleś34 Gaduła (3,270 p.)

92,762 zapytań

141,686 odpowiedzi

320,499 komentarzy

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

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!

...