Comment faire une IA des ennemis qui permettrait de suivre le joueur, sans rotation ou en regardant le joueur?
Je suis nouveau en programmation et je fais un 2D side-scrolling beat em' up pour mon projet. J'ai eu une IA de travail pour mes ennemis, mais mon ennemi objets sont modélisés de façon à être à plat de sorte que d'un seul côté est destiné à être montré. Lorsque je démarre mon jeu, les ennemis tourne immédiatement à face le joueur quand je voulais rester comme il est, mais encore se déplacer vers le joueur.
http://i.imgur.com/TJYtfro.png C'est ce que je veux sur les ennemis pour rester, tout en ayant ce visage montré qu'il glisse vers le joueur, sans rotation ou de basculement.
http://i.imgur.com/n0gI2Rf.png C'est ce qui se passe quand je lance le jeu, c'est pourquoi je ne veux pas les objets pour les faire pivoter ou incliner. Si vous souhaitez plus d'informations de ce que j'ai fait ou si je suis pas clair, faites le moi savoir. C'est ma première fois de demander en ligne.
C'est le code que j'ai pour le enemyAI. Je sais que le code est tout faux quand il s'agit de ce que je veux réaliser, mais j'ai peu de connaissances de codage et encore à apprendre.
//------------Variables----------------//
public Transform target;
public int moveSpeed;
public int rotationSpeed;
public int maxdistance;
private Transform myTransform;
//------------------------------------//
void Awake()
{
myTransform = transform;
}
void Start ()
{
maxdistance = 2;
}
void Update ()
{
if(Vector3.Distance(target.position, myTransform.position) > maxdistance)
{
//Move towards target
transform.LookAt (target.position);
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
}
- qu'advient-il si vous commentez transformer.LookAt() ou transformation.LookAt(nouveau Vecteur(0,0,1)) de sorte qu'il semble le long de l'axe Z? Jetez un oeil à ceci: docs.unity3d.com/Documentation/ScriptReference/...
- Quand j'en commentaire, aucun des ennemis bougent. Quand je l'ai comme transformer.LookAt(new Vector3(0,0,1)) , Le tout commencer à regarder vers le haut en ignorant le joueur complètement.
Vous devez vous connecter pour publier un commentaire.
Votre problème est que vous avez une certaine confusion sur ce "avant" signifie. Vous devez décider de la direction à suivre est. Actuellement, "l'avant" est "hors de l'écran", parce que vous êtes en train de faire un 2D side scroller et vous avez toutes vos ennemis en face de l'écran.
Cependant, vous essayez d'utiliser
LookAt()
pour que les caractères de regarder le joueur. Mais bien sûr qu'ils vont tourner, parce que "l'avant" pour chaque ennemi mesh/modèle est actuellement la direction en face de leur visage.Vous avez deux options. L'une est de faire tourner tous vos modèles de 90 degrés de sorte que l'avant est en train de sortir de leur côté. Dans ce cas, vous pouvez toujours utiliser LookAt() et puis de dire les ennemis pour aller de l'avant, mais visuellement, ils souhaitez toujours être à la recherche dehors de l'écran. Cependant, les ennemis tournant autour de l'arrière si vous avez obtenu sur l'autre côté. Donc probablement pas une bonne option.
L'autre option est que vous ne devriez pas être l'ennemi de transformation de position/à l'aide de la "forward" vecteur. Il suffit de régler la position de l'ennemi basée sur un vecteur qui est la différence entre la position de l'ennemi et la position du joueur. Soustraire la position de l'ennemi vecteur à partir de la position du joueur vecteur et vous aurez un vecteur pointant dans la direction du joueur. Normaliser pour obtenir une unité de vecteur de direction. Puis la multiplier par la vitesse de déplacement et le delta du temps que vous avez ci-dessus. Utiliser à la place de "l'avant" et vos ennemis vont vers le joueur. Dans ce cas, vous n'appelez pas la
LookAt()
à tous, parce que vous voulez toujours les ennemis en face de l'écran.EDIT: je n'ai pas de copie de l'Unité, mais il devrait être quelque chose comme ceci: