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;
}
}
3 réponses
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;
}
}
Vous pouvez modifier la valeur de speed
comme vous le souhaitez.
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
_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;
}
}
Questions connexes
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.