web-dev-qa-db-fra.com

Script de saut Unity 2D

Quelqu'un at-il un bon script de saut pour les jeux 2d dans l'unité? Le code que j'ai fonctionne mais est encore loin de sauter, on dirait qu'il vole.

using UnityEngine;
using System.Collections;

public class movingplayer : MonoBehaviour {

public Vector2 speed = new Vector2(10,10);

private Vector2 movement = new Vector2(1,1);

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    float inputX = Input.GetAxis ("Horizontal");
    float inputY = Input.GetAxis ("Vertical");

    movement = new Vector2(
        speed.x * inputX,
        speed.y * inputY);

    if (Input.GetKeyDown ("space")){
                         transform.Translate(Vector3.up * 260 * Time.deltaTime, Space.World);
                 } 

}
void FixedUpdate()
{
    // 5 - Move the game object
    rigidbody2D.velocity = movement;
    //rigidbody2D.AddForce(movement);

}
}
11
user3189504

Habituellement, pour sauter, utilisez Rigidbody2D.AddForce avec Forcemode.Impulse. Il peut sembler que votre objet est poussé une fois dans l'axe Y et il tombera automatiquement en raison de la gravité.

Exemple:

rigidbody2D.AddForce(new Vector2(0, 10), ForceMode2D.Impulse);
25
Jay Kazama

La réponse ci-dessus est désormais obsolète avec Unity 5 ou plus récent. Utilisez-le à la place!

GetComponent<Rigidbody2D>().AddForce(new Vector2(0,10), ForceMode2D.Impulse);

Je veux également ajouter que cela laisse la hauteur de saut super privée et uniquement modifiable dans le script, c'est donc ce que j'ai fait ...

    public float playerSpeed;  //allows us to be able to change speed in Unity
public Vector2 jumpHeight;

// Use this for initialization
void Start () {

}
// Update is called once per frame
void Update ()
{
    transform.Translate(playerSpeed * Time.deltaTime, 0f, 0f);  //makes player run

    if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))  //makes player jump
    {
        GetComponent<Rigidbody2D>().AddForce(jumpHeight, ForceMode2D.Impulse);

Cela vous permet de modifier la hauteur de saut dans Unity lui-même sans avoir à revenir au script.

Note latérale - Je voulais commenter la réponse ci-dessus, mais je ne peux pas parce que je suis nouveau ici. :)

11
laszlar

Utilisez la méthode Addforce () d'un composant de corps rigide, assurez-vous que le corps rigide est attaché à l'objet et que la gravité est activée, quelque chose comme ceci

gameObj.rigidbody2D.AddForce(Vector3.up * 10 * Time.deltaTime); or 
gameObj.rigidbody2D.AddForce(Vector3.up * 1000); 

Voyez quelle combinaison et quelles valeurs correspondent à vos besoins et utilisez en conséquence. J'espère que cela aide

2
Vmanani