C# týden C# týden
Pořádné programy s pořádnou klávesnicí zdarma. Více zde
Pouze tento týden sleva až 80 % na C# .NET

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.8.2018 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.8.2018 10:15
Ty vaše internety!
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na Matěj Strnad
Luboš Běhounek Satik:5.8.2018 11:14

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

Editováno 5.8.2018 11:15
Nahoru Odpovědět 5.8.2018 11:14
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Matěj Strnad:5.8.2018 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.8.2018 11:49
Ty vaše internety!
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na Matěj Strnad
Luboš Běhounek Satik:5.8.2018 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.8.2018 12:40
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Matěj Strnad:5.8.2018 16:40

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

Nahoru Odpovědět 5.8.2018 16:40
Ty vaše internety!
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na Matěj Strnad
Luboš Běhounek Satik:5.8.2018 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.8.2018 17:23
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Matěj Strnad:5.8.2018 17:51

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

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

tak ukaz kod, co ted mas :)

Nahoru Odpovědět 5.8.2018 18:10
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Matěj Strnad:5.8.2018 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.8.2018 18:22
Ty vaše internety!
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Luboš Běhounek Satik:5.8.2018 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.8.2018 19:17
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Matěj Strnad:5.8.2018 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.8.2018 19:22
Ty vaše internety!
Avatar
Luboš Běhounek Satik
Autoredaktor
Avatar
Luboš Běhounek Satik:5.8.2018 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.8.2018 20:08
https://www.facebook.com/peasantsandcastles/
Avatar
Jan Procházka:8.8.2018 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.8.2018 13:19
Avatar
Šimon Raichl
Překladatel
Avatar
Odpovídá na Matěj Strnad
Šimon Raichl:9.8.2018 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.8.2018 13:44
Avatar
dez1nd
Člen
Avatar
Odpovídá na Šimon Raichl
dez1nd:10.8.2018 8:03

když je pohyb násobený

Time.deltaTime

tak je to taky dobře ne ?

 
Nahoru Odpovědět 10.8.2018 8:03
Avatar
Šimon Raichl
Překladatel
Avatar
Odpovídá na dez1nd
Šimon Raichl:10.8.2018 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.8.2018 9:02
Avatar
dez1nd
Člen
Avatar
Odpovídá na Šimon Raichl
dez1nd:10.8.2018 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.8.2018 11:41
Avatar
Šimon Raichl
Překladatel
Avatar
Odpovídá na dez1nd
Šimon Raichl:10.8.2018 14:44

To bys měl

 
Nahoru Odpovědět 10.8.2018 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.