Jump to content
Unity Insider Forum

[Gelöst] Objekt bewegt sich auf Android Build schneller als im Editor (trotz Time.deltaTime)


J3nsis

Recommended Posts

Hallo, 

ich habe ein Problem, und zwar gebe ich meinem GO beim Start (man muss eine Taste drücken) einen Startboost per Rigidbody.AddForce() allerdings ist das GO auf dem Android Build viel schneller bzw. fliegt viel weiter als im Editor obwohl ich Time.deltaTime benutze! Hier mein Code:

bool alreadyStarted = false;

void Update() {

	#if UNITY_EDITOR
    transform.Translate(Input.GetAxis("Horizontal") * Time.deltaTime * RightLeftSpeed, 0f, 0f);
    #else
    
    Touch touch = Input.GetTouch(0);      
    transform.Translate(((touch.position.x / Screen.width)*2-1) *  Time.deltaTime * (RightLeftSpeed/2), 0f, 0f);

	if ((Input.GetKeyDown(KeyCode.Space) || Input.touchCount == 1) && alreadyStarted == false) 
    { 
        StartBoost(); 
    } 
}

void StartBoost()
{        
  	alreadyStarted = true;
  	rb.AddForce(transform.forward * 290000 * Time.deltaTime);
  	rb.AddForce(transform.up * 60000 * Time.deltaTime); 
}

Danke schonmal!

 

Noch eine Frage am Rande, ich benutze um die Kugel am Handy zu steuern folgendes im Code:

transform.Translate(((touch.position.x / Screen.width)*2-1) *  Time.deltaTime * (RightLeftSpeed/2), 0f, 0f);

Eine andere Methode ist mir noch nicht eingefallen, aber diese ist auf jeden Fall unschön, da sich die Kugel nur sehr ruckartig bewegt, hast du vielleicht eine andere Idee das GO per Touch nach rechts und links zu steuern?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du solltest nicht gleichzeitig einen Rigidbody und Transform.Translate benutzen, die kommen sich im Zweifelsfall doch nur ins Gehege. Haue also alles raus bis auf den Rigidbody-Code, und hau den dann in FixedUpdate, weil der in Update nichts zu suchen hat.

Falls du dich fragst, wie du das, was Transform.Translate im Moment macht, ohne Transform.Translate machen kannst, verweise ich auf Rigidbody.velocity. Das kannst du setzen, um die Bewegungsrichtung deines Rigidbodys ganz direkt zu bestimmen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 23 Minuten schrieb Sascha:

Du solltest nicht gleichzeitig einen Rigidbody und Transform.Translate benutzen, die kommen sich im Zweifelsfall doch nur ins Gehege. Haue also alles raus bis auf den Rigidbody-Code, und hau den dann in FixedUpdate, weil der in Update nichts zu suchen hat.

Falls du dich fragst, wie du das, was Transform.Translate im Moment macht, ohne Transform.Translate machen kannst, verweise ich auf Rigidbody.velocity. Das kannst du setzen, um die Bewegungsrichtung deines Rigidbodys ganz direkt zu bestimmen.

Danke für die Antwort, aber da ist mir beim kopieren der Code teile ein Fehler unterlaufen. Natürlich seht die void StartBoost() nicht in der Updatefunktion sondern wird nur von dort aufgerufen😂. Also denkst du das liegt an dem transform.Translate()? Ich verstehe es nämlich echt nicht warum das GO auf dem Handy soviel schneller ist obwohl der Code gleich ist.

 

EDIT: Ich habe mal ausprobiert das mit dem Translate aus dem Code rauszunehmen um zu schauen ob es daran liegt, aber das hat auch nichts geändert!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also wenn du physikalische Befehle nutzen willst, dann mache es immer in der FixedUpdate. Nie in der Update!
Setze also eine Variable in der Update auf true und in der FixedUpdate fragst du die ab und machst dann da deinen Boost.
Reibungen, Drag-Werte und Schwerkraft werden immer nur in der Fixed berücksichtigt und berechnet. Somit kann es durchaus sein, dass der Boost in der Update auf deinem Rechner (60fps) und auf nem Handy (30fps) wegen der deltaTime unterschiedlich viel Power bekommt, die aber erst eine gewisse Zeit später berücksichtigt werden. Kann ja auch sein, dass dein Fixed Timestep für ein Handy zu gering ist und gar nicht eingehalten werden kann.

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 13 Minuten schrieb malzbie:

Also wenn du physikalische Befehle nutzen willst, dann mache es immer in der FixedUpdate. Nie in der Update!
Setze also eine Variable in der Update auf true und in der FixedUpdate fragst du die ab und machst dann da deinen Boost.
Reibungen, Drag-Werte und Schwerkraft werden immer nur in der Fixed berücksichtigt und berechnet. Somit kann es durchaus sein, dass der Boost in der Update auf deinem Rechner (60fps) und auf nem Handy (30fps) wegen der deltaTime unterschiedlich viel Power bekommt, die aber erst eine gewisse Zeit später berücksichtigt werden. Kann ja auch sein, dass dein Fixed Timestep für ein Handy zu gering ist und gar nicht eingehalten werden kann. 

Danke  für den Tipp, jetzt funktioniert es wie es soll, auf dem Handy wie im Editor!

Eine Frage noch, soweit ich weiß soll man ja Inputs immer in der Update Methode abfrage, aber wie mache ich es jetzt wenn ich z.B. sowas habe: 

transform.Translate(Input.GetAxis("Horizontal"), 0f, 0f);

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...