Diskuze: Unity pohyb 2D letadla

C# .NET .NET (C# a Visual Basic) Unity pohyb 2D letadla American English version English version

Aktivity (3)
Avatar
Matěj Strnad:5. srpna 10:15

Pomůžete mi s scriptem na pohyb 2D letadla? K dispozici bude jen rychlost která se bude počítat jinde a nechci tam žádné Rigid body 2D. Zkoušel jsem hledat ale nic co by mě vyhovovalo jsem nenašel.

Odpovědět 5. srpna 10:15
Ty vaše internety!
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Matěj Strnad
Luboš Satik Běhounek:5. srpna 11:14

A co presne máš za problém?
Stačí jen měnit position v transform, ne? :)

Editováno 5. srpna 11:15
Nahoru Odpovědět 5. srpna 11:14
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Satik Běhounek
Matěj Strnad:5. srpna 11:49

Já se v tom vůbec nevyznám a vypočítanou rychlost v proměné potřebuji aplikovat na objekt :)

Nahoru Odpovědět 5. srpna 11:49
Ty vaše internety!
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Matěj Strnad
Luboš Satik Běhounek:5. srpna 12:40

Proste jen v update() toho objektu k pozici toho objektu prictes rychlost vynasobenou uplynulym casem, jak mas tu rychlost ulozenou?
Jako jeden float nebo celej vector i se smerem?

Nahoru Odpovědět 5. srpna 12:40
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Satik Běhounek
Matěj Strnad:5. srpna 16:40

Jako jeden float a vypadá např. takto: 2125 :)

Nahoru Odpovědět 5. srpna 16:40
Ty vaše internety!
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Matěj Strnad
Luboš Satik Běhounek:5. srpna 17:23

jen k ty pozici toho objektu (transform.po­sition) prictes tu rychlost * Time.deltaTime k ty ose, ve ktery se chces pohnout

Nahoru Odpovědět 5. srpna 17:23
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Satik Běhounek
Matěj Strnad:5. srpna 17:51

Mohu tě poprosit o kód nevím jak to udělat :P

Nahoru Odpovědět 5. srpna 17:51
Ty vaše internety!
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Odpovídá na Matěj Strnad
Luboš Satik Běhounek:5. srpna 18:10

tak ukaz kod, co ted mas :)

Nahoru Odpovědět 5. srpna 18:10
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Satik Běhounek
Matěj Strnad:5. srpna 18:22
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class pohyb : MonoBehaviour {
    public float speed;
    public float maxSpeed;
    public float s;
    public float p;
    public float k;
    public float k_b;
    public float drop_speed;
    public float crash;
    public float landing_speed;
    public float v;
    public float stop;

        // Use this for initialization
    void Start () {
        speed = speed * 10;
        maxSpeed = maxSpeed * 10;
        p = 0;
        k = 0;
        crash = 0;
        stop = 0;
         }

    // Update is called once per frame
    void Update () {



        if (stop  == 0) {
        if (Input.GetKeyDown(KeyCode.S))
        {
        if(s < drop_speed + 1)
            {
                s = s - 5;
            }
            else
            {
                v = v + 1;
                s = s - 1;
            }
        }
        else
        {
            if (Input.GetKeyDown(KeyCode.W))
            {
             if(v < 1)
                {

                }
                else
                {
                    s = s + 5;
                    v = v - 1;
                }

            }
        }
            if (Input.GetKeyDown(KeyCode.R))
        {
            if(s < maxSpeed - 1)
            {
                s = 1 * speed + s;
            }

        }
        else
        {
            if (Input.GetKeyDown(KeyCode.F))
            {
                if(s == 0)
                {

                }
                else
                {
                    s = s - speed;
                }
            }
        }
       p = p + 1;
        if(p == 100)
        {
            if (Input.GetKeyDown(KeyCode.R)) { }
            else {
                if (s == 0)
            {

            }
            else
            {
                s = s - 1;
            }
            }

            p = 0;
        }

        if (Input.GetKeyDown(KeyCode.K))
        {
            if(k == 0)
            {
                k = 1;
            }
            else
            {
                k = 0;
            }
        }
        if(k == 1)
        {
            s = s - k_b;
        }



        if (s < 1)
        {
            s = 0;
        }
        if(v > 0) {
        if(s < drop_speed + 1)
        {
            v = v - 5;
            s = s + 1;
        }
        }
        if (v == 0)
        {
            if(s > landing_speed)
            {
                crash = 1;
            }
        }
        if(v < 0)
        {

            crash = 1;
        }
        if(crash == 1)
        {
            v = 0;
            s = 0;
            stop = 1;
        }
        }

    }
}
:)
Nahoru Odpovědět 5. srpna 18:22
Ty vaše internety!
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Luboš Satik Běhounek:5. srpna 19:17

v

transform.position

mas ulozenou aktualni pozici, tak k ni jen pricti to co jsem psal nahore k nejaky ose (nevim, kterou chces pridavat)

Nahoru Odpovědět 5. srpna 19:17
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Satik Běhounek
Matěj Strnad:5. srpna 19:22

Chci aby letadlo letělo do předu tak musím zjistit jaká to je osa? ( jak to mám přicíst např.

transform.position = transform.position + s;

? )

Nahoru Odpovědět 5. srpna 19:22
Ty vaše internety!
Avatar
Luboš Satik Běhounek
Autoredaktor
Avatar
Luboš Satik Běhounek:5. srpna 20:08

transform.posi­tion.x nebo podle ktery osy chces a hlavne to vynasob tim casem, aby ta rychlost byla konstantni nezavisle na fps. :)

Nahoru Odpovědět 5. srpna 20:08
https://www.facebook.com/peasantsandcastles/
Avatar
Jan Procházka:8. srpna 13:19

Jen taková blbá otázka: to letadlo ve 2D lítá v souřadnicích "nahoru"/"dopředu" nebo "na sever"/"na západ"?

Pokud to druhé, tak nějak postrádám informaci o směru, protože rychlost je veličina vektorová, nikoli skalární...

transform.position.x+=dx;
transform.position.y+=dy;

, kde dx=vx*dt, vx je rychlost ve směru x a dt je rozdíl aktuálního času a času předchozí aktualizace polohy.

 
Nahoru Odpovědět 8. srpna 13:19
Avatar
Šimon Raichl
Redaktor
Avatar
Odpovídá na Matěj Strnad
Šimon Raichl:9. srpna 13:44

Hlavně pohyb nikdy neměj v Update, jelikož je závislý na fps, lepší je použít FixedUpdate.

 
Nahoru Odpovědět 9. srpna 13:44
Avatar
dez1nd
Člen
Avatar
Odpovídá na Šimon Raichl
dez1nd:10. srpna 8:03

když je pohyb násobený

Time.deltaTime

tak je to taky dobře ne ?

 
Nahoru Odpovědět 10. srpna 8:03
Avatar
Šimon Raichl
Redaktor
Avatar
Odpovídá na dez1nd
Šimon Raichl:10. srpna 9:02

Ano, to je správně, ale to je jen v případě kdy pracuješ přímo s deltaTime, ale v ostatních případech na pohyb a celkově manipulaci s fyzikou je nutný vždycky použít FixedUpdate.

 
Nahoru Odpovědět 10. srpna 9:02
Avatar
dez1nd
Člen
Avatar
Odpovídá na Šimon Raichl
dez1nd:10. srpna 11:41

V tom případě předělám svůj CharacterMovement kde používám rigidbody pro fyzyku

 
Nahoru Odpovědět 10. srpna 11:41
Avatar
Šimon Raichl
Redaktor
Avatar
Odpovídá na dez1nd
Šimon Raichl:10. srpna 14:44

To bys měl

 
Nahoru Odpovědět 10. srpna 14:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.