Diskuze: Unity pohyb 2D letadla
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
A co presne máš za problém?
Stačí jen měnit position v transform, ne?
Já se v tom vůbec nevyznám a vypočítanou rychlost v proměné potřebuji
aplikovat na objekt
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?
Jako jeden float a vypadá např. takto: 2125
jen k ty pozici toho objektu (transform.position) prictes tu rychlost * Time.deltaTime k ty ose, ve ktery se chces pohnout
Mohu tě poprosit o kód nevím jak to udělat
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;
}
}
}
}
v
transform.position
mas ulozenou aktualni pozici, tak k ni jen pricti to co jsem psal nahore k nejaky ose (nevim, kterou chces pridavat)
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;
? )
transform.position.x nebo podle ktery osy chces a hlavne to vynasob tim
casem, aby ta rychlost byla konstantni nezavisle na fps.
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.
Hlavně pohyb nikdy neměj v Update, jelikož je závislý na fps, lepší je použít FixedUpdate.
když je pohyb násobený
Time.deltaTime
tak je to taky dobře ne ?
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.
V tom případě předělám svůj CharacterMovement kde používám rigidbody pro fyzyku
Zobrazeno 18 zpráv z 18.