Ich habe folgenden Code geschrieben:Time.deltaTime nicht wie gewünscht arbeitet
using UnityEngine;
using System.Collections;
public class ObstacleSpawn : MonoBehaviour {
public PlayerScript pScript;
public ObstacleScript oScript;
public GameObject player;
public GameObject obstacle;
public float randomSpawnMin;
public float randomSpawnMax;
// Use this for initialization
void Start() {
InvokeRepeating ("Spawn", 2F, Random.Range (randomSpawnMin, randomSpawnMax));
}
// Update is called once per frame
void Update() {
}
void Spawn() {
if (pScript.isRight == true && pScript.inAir == false) {
obstacle.transform.localScale = new Vector3 (-1, 1, 1);
Instantiate (obstacle, player.transform.position + new Vector3 (0.05F, (4F + pScript.playerDimensionY + oScript.obstacleDimensionY) * Time.deltaTime, 0), Quaternion.identity);
} else if (pScript.isRight == false && pScript.inAir == false) {
obstacle.transform.localScale = new Vector3 (1, 1, 1);
Instantiate (obstacle, player.transform.position + new Vector3 (-0.05F, (4F + pScript.playerDimensionY + oScript.obstacleDimensionY) * Time.deltaTime, 0), Quaternion.identity);
}
}
}
In meinen Leeren Spawn() Ich laichen ein Element namens Hindernisses, das in Sekunden, um eine gewünschte Menge weg von meinem Player instanziiert werden soll . (Usw. es sollte 2 Sekunden weg sein, bevor der Spieler getroffen wird, oder 1 Sekunden und so weiter. Was Sie in meiner Leere sehen können, ist ich Instantiieren des Hindernisses an der Position des Spielers + ein Betrag, den ich gemessen habe, dann multipliziert mit der Zeit. DELTA. Doch meine Entfernung ändert sie nicht, ob ich meinen Wert ändern mit Time.deltaTime multipliziert oder nicht. Der Abstand zwischen meinen Objekten sind immer 0,02 Sekunden.
Wie kann ich dieses Problem umgehen mein Zeitintervall anpassen?
EDIT - Um eine Klarstellung zu machen, ist dies 2D, und ich werde auch dieses Beispiel zeigen, um etwas Verständnis zu schaffen .. Ich habe versucht, die Multiplikation von Time.deltaTime zu entfernen, da die Programmbewegung sowieso in deltaTime läuft:
void Spawn() {
if (pScript.isRight == true && pScript.inAir == false) {
obstacle.transform.localScale = new Vector3 (-1, 1, 1);
Instantiate (obstacle, player.transform.position + new Vector3 (0.05F, (4F + pScript.playerDimensionY + oScript.obstacleDimensionY), 0), Quaternion.identity);
} else if (pScript.isRight == false && pScript.inAir == false) {
obstacle.transform.localScale = new Vector3 (1, 1, 1);
Instantiate (obstacle, player.transform.position + new Vector3 (-0.05F, (4F + pScript.playerDimensionY + oScript.obstacleDimensionY), 0), Quaternion.identity);
}
}
Angezeigter Code gibt mir ein Intervall von 0,58 Sekunden, das ist mindestens ein Intervall. Mit dieser Logik glaubte ich dieser Code ein 1,16-Intervall bereitstellen sollte (zweimal das Intervall):
void Spawn() {
if (pScript.isRight == true && pScript.inAir == false) {
obstacle.transform.localScale = new Vector3 (-1, 1, 1);
Instantiate (obstacle, player.transform.position + new Vector3 (0.05F, (8F + pScript.playerDimensionY + oScript.obstacleDimensionY), 0), Quaternion.identity);
} else if (pScript.isRight == false && pScript.inAir == false) {
obstacle.transform.localScale = new Vector3 (1, 1, 1);
Instantiate (obstacle, player.transform.position + new Vector3 (-0.05F, (8F + pScript.playerDimensionY + oScript.obstacleDimensionY), 0), Quaternion.identity);
}
}
Dies jedoch gibt das Ergebnis von 0,92 Intervall, nicht 1,16 - das ist, wo ich wirklich verwirrt.
EDIT FÜR RAHMEN:
Das rote Hindernis bewegt sich immer nach unten den Spieler zu schlagen, aber ich brauche es zu einer einstellbaren Zeit zum Laichen entfernt (1 Sekunden entfernt, 0,5 Sekunden entfernt etc.) .
Time.deltaTime kann nur in Update() verwendet werden. Ihr Code ist völlig bedeutungslos und wird nicht funktionieren. – Fattie