Unity3D le mouvement du Joueur de script
J'ai un script qui vous permet de contrôler un joueur, et de sauter.
Cependant, j'essaie de faire en sorte que le joueur est constamment en mouvement, et non contrôlable via les touches WASD du clavier.
Chaque fois que j'essaie d'utiliser seulement controller.Move()
mon Gravité de la fonction disparaît.
En ce moment, avec ce code Gravité fonctionne, mais WASD est activé en tant que bien.
Ma question est: Comment puis-je faire de ce code que mon lecteur se déplacer constamment, et de toujours utiliser la gravité?
using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour {
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.back;
void Update() {
CharacterController controller = GetComponent<CharacterController>();
if (controller.isGrounded)
{
controller.Move (Vector3.back * Time.deltaTime);
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump"))
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
}
OriginalL'auteur Lynnstrum | 2016-09-24
Vous devez vous connecter pour publier un commentaire.
C'est un comportement attendu comme indiqué dans la documentation: https://docs.unity3d.com/ScriptReference/CharacterController.Move.html
Au lieu d'obtenir les commentaires du joueur, spécifiez votre propre
moveDirection
. Par exemple:moveDirection = new Vector3(1, 0, 1);
Jetez un oeil à la doc de valeurs possibles: https://docs.unity3d.com/ScriptReference/Input.GetAxis.html
Une note de côté:
CharacterController controller = GetComponent<CharacterController>();
Je sais que vous copiez à partir de la documentation mais
GetComponent
chaque mise à Jour n'est pas la performance sage. Cache de la place!OriginalL'auteur Cù Đức Hiếu