2017-07-09 3 views
-1

J'ai le code suivantpauses de mise à jour fonctionnent dans l'unité

public Rigidbody2D rb; 
public float speed = 5f; 

void FixedUpdate() 
{ 
    if (Input.GetKeyDown("w")) 
    { 
     Fire(); 
    } 
} 

void Fire() 
{ 
    rb.MovePosition(rb.position + Vector2.down * speed * Time.deltaTime); 
} 

, mais chaque fois que je joue le jeu, la balle ne se déplace pas en fonction de la fonction de feu, il ne descend par 1 sur l'axe des y .

Comment puis-je modifier mon code, afin que le Rigidbody se déplace selon la fonction Fire()?

Répondre

1

Il pourrait y avoir quelques choses qui ne vont pas ici. La première chose qui ressort de moi est que vous utilisez Input.GetKeyDown au lieu de Input.GetKey - GetKeyDown ne renvoie true que sur la première image sur laquelle la touche est enfoncée (donc utile pour des choses comme tirer une fois par pression de touche), tandis que GetKey renvoie true pendant tout le temps que la touche est enfoncée (donc c'est utile pour des choses comme le mouvement). Changer cela devrait vous donner le comportement que vous attendez.

Un autre problème est que vous effectuez la vérification des entrées dans FixedUpdate. Il fonctionne sur une boucle de jeu séparé de mise à jour, et vous pouvez trouver plus de détails à ce sujet ici: Is it really wrong to use Input.GetKey() on FixedUpdate?

J'utiliser Input et GetKey pour stocker l'état d'entrée dans une Vector2 dans la boucle de mise à jour, et ensuite utiliser ces données dans FixedUpdate pour faire le mouvement réel:

public Rigidbody2D rb; 
public float speed = 5f; 
private Vector2 velocity = Vector2.zero; 

void Update() 
{ 
    if (Input.GetKey("w")) 
    { 
     velocity = Vector2.down * speed; 
    } 
    else { 
     velocity = Vector2.zero; 
    } 
} 

void FixedUpdate() 
{ 
    MoveBall(); 
} 

void MoveBall() 
{ 
    rb.MovePosition(rb.position * velocity * Time.deltaTime); 
} 

de cette façon, vous avez également une séparation plus nette entre le code d'entrée et le code de mouvement, et il sera plus facile à gérer une fois que vous commencez à essayer de mettre en œuvre une plus grande complexité. Bonne chance!

+0

Oui, 'Input.GetKeyDown' est l'un des problèmes. – Programmer