• 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,519 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 388 wizyt
pytanie zadane 17 maja 2020 w OpenGL, Unity przez Stami Gaduła (3,790 p.)
0 głosów
1 odpowiedź 3,913 wizyt
pytanie zadane 11 stycznia 2019 w C# przez niezalogowany
0 głosów
0 odpowiedzi 505 wizyt
pytanie zadane 12 kwietnia 2021 w C# przez koleś34 Gaduła (3,270 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...