2017-04-21 3 views
1

Also habe ich gerade mein Bewegungsskript fertig und mein Spiel scheint, als hätte es eine niedrige Framerate. Ich habe Fraps gebootet und festgestellt, dass mein Spiel mit 60FPS läuft. Was könnte das Problem sein? Auch das ist ein Top-Down-RPG-Stil-Spiel übrigens. Hier ist meine Bewegung Skript, ob das hilft:Bewegung scheint abgehackt, aber FPS ist gut

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class PlayerMovement : MonoBehaviour { 
Vector2 _playerPosition; 
public GameObject Player; 
// Use this for initialization 
void Start() { 
    _playerPosition = Vector2.zero; 
} 

// Update is called once per frame 
public float speed = 3f; 
void Update() 
{ 
if (Input.GetKey(KeyCode.W)) 
{ 
    transform.position += Vector3.up * speed * Time.deltaTime; 
} 

if (Input.GetKey(KeyCode.S)) 
{ 
    transform.position += Vector3.down * speed * Time.deltaTime; 
} 

if (Input.GetKey(KeyCode.D)) 
{ 
    transform.position += Vector3.right * speed * Time.deltaTime; 
} 
if (Input.GetKey(KeyCode.A)) 
{ 
    transform.position += Vector3.left * speed * Time.deltaTime; 
    } 
} 

}

+1

Wenn dieses Skript im Player Object Inspector angehängt ist, brauchen Sie die GameObject Zeile wirklich nicht. Die Time.deltaTime ist Zeit, um das letzte Bild zu vervollständigen. Sie haben Probleme mit dem Timing, das Sie verwenden möchten _Time [0], das ist die Zeit seit dem Start des Programms und sagen, dass jedes Mal, wenn es die Bewegungserlaubnis erhöht hat. 0 in der Halterung ist 1/20 einer Sekunde, 1 für 1 Sekunde verwenden und dann gibt es 2 und 3 für den Einsatz in der Halterung. – Edward

+0

@Edward Wie würde ich das hinzufügen? –

Antwort

1

beobachten YouTube-Tutorials können echte hilfreich sein, in neue Dinge über Unity lernen. hier bei 4 min und Sie werden Code sehen, dass ich für Ihre Transformation wie diese versuchen würden:

if (Input.GetKey(KeyCode.D)){ 
    transform.Translate(speed * Time.deltaTime,0f,0f); //x,y,z 
} 

Der Vorschlag, den ich in der Frage des Kommentar hätte, würde ich in einem Verfahren vor dem Update stellen Sie Ihre if-Anweisungen und rufen Sie die Verfahren sagen jede Sekunde wie so, die Einheit eine gute Gemeinschaft von question/answers hat auch

InvokeRepeating("MyMethod", 1f, 1f); //I believe this is every second 

ich würde auch eine vorschlagen ändern, um Ihren Code machen, die die Linien reduzieren würden und für Bewegungstasten von links erlauben, rechts, oben , unten sowie A, D, W, S und uns von Joystick-Bewegungen.

void Update(){ 
    transform.Translate(speed * Input.GetAxis("Horizontal") * Time.deltaTime, 0f, 
         speed * Input.GetAxis("Vertical") * Time.deltaTime) 
} 
+0

Wenn es dir nichts ausmacht, frage ich ... Was würde smoothDeltaTime helfen? –

+0

nicht wirklich sicher, scheint wie es von Gleichstrom zu Wechselstrom vergleichbar wäre. Was ich gerade gelesen habe, impliziert, dass DeltaTime Ihnen dabei helfen soll, Ihre Geschwindigkeit entsprechend dem FPS zu übersetzen. Wenn Ihr FPS also langsam ist, erzeugt es einen größeren Zug als wenn Ihr FPS schnell wäre. – Edward

+0

@LiamEarle sehen Sie das Update auch für kürzere Code-Vorschlag – Edward

Verwandte Themen