Donc, je suis un peu nouveau dans toute cette histoire d'unité. Je programme en C # depuis un moment maintenant et généralement pour que quelque chose bouge, je fais juste un petit "_playerPosition.x + = 5;" mais j'ai essayé cela dans Unity et cela ne semble pas fonctionner. Voici mon code de mouvement actuel:

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

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

// Update is called once per frame
void Update () {
    if (Input.GetKey(KeyCode.W)) {
        _playerPosition.y += 5f; 
    }

    if (Input.GetKey(KeyCode.S)) {
        _playerPosition.y -= 5f;
    }

    if (Input.GetKey(KeyCode.D)) {
        _playerPosition.x += 5f;
    }
    if (Input.GetKey(KeyCode.A)) {
        _playerPosition.x -= 5f;
    }
    Player.transform.position = _playerPosition;
}

}

2
Liam Earle 21 avril 2017 à 00:54

3 réponses

Meilleure réponse

Vous devez simplement déplacer votre lecteur pour que le script soit également attaché

public float speed = 5f;

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;
    }
}

Question similaire sur Unity

Vous pouvez modifier la valeur de speed comme vous le souhaitez.

1
I.B 20 avril 2017 à 23:12

Essayez ceci dans votre mise à jour

void Update(){
    int d = 0;
    int speed = 5;
    if (Input.GetKeyDown(KeyCode.W)) {
       d=90; 
    }
    if (Input.GetKeyDown(KeyCode.S)) {
        d = 270;
    }
    if (Input.GetKeyDown(KeyCode.D)) {
        d = 0;
    }
    if (Input.GetKeyDown(KeyCode.A)) {
        d=180;
    }
    this.transform.position += new Vector3((int)(speed * Mathf.Sin(d * Mathf.Deg2Rad)), 0, (int)(speed * Mathf.Cos(d * Mathf.Deg2Rad)));
}

C'est plutôt pour un 3d mais peut simplement être transféré vers 2d

0
Edward 20 avril 2017 à 23:41

_playerPosition est une variable qui contient Vector2 comme vous l'avez mentionné dans le commentaire. Assurez-vous de définir une nouvelle position à l'aide de cette variable après tous les calculs.

Éditer

Vérifiez cela. N'oubliez pas d'assigner votre objet Player de la scène au script.

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

public class PlayerMovement : MonoBehaviour {
    Vector2 _playerPosition;
    public GameObject Player; // assign your player prefab

    void Start () {
        _playerPosition = Vector2.zero;
    }

    void Update () {
        if (Input.GetKey(KeyCode.W)) {
            _playerPosition.y += 5f; 
        }

        if (Input.GetKey(KeyCode.S)) {
            _playerPosition.y -= 5f;
        }

        if (Input.GetKey(KeyCode.D)) {
            _playerPosition.x += 5f;
        }
        if (Input.GetKey(KeyCode.A)) {
            _playerPosition.x -= 5f;
        }

        Player.transform.position = _playerPosition;
    }

}
0
Oen44 20 avril 2017 à 23:10