Animer NavMeshAgent

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
AmiinGoo
Messages : 1
Inscription : 28 Avr 2017 15:04

Animer NavMeshAgent

Message par AmiinGoo » 28 Avr 2017 15:13

Bonjour a tous,

Etant toujours débutant et en plein progression sur Unity et la programmation en c#, je rencontre souvent des problèmes que j'essaye tant bien que mal de régler mais cet fois ci je vois blanc même si j'ai essayé de me débrouiller seul mais faut faut s'avouer vaincu des fois et rendre els armes et demander de l'aide.

bref passons a mon problème les amis, donc ca peut paraître simple pour certain et j'aurai aimer que ce soit le cas pour moi ( je m’égare encore, excusez moi j'aime écrire), j'essaye de donner une condition a mon NavMeshAgent pour realiser une animation en fonction de sa vitesse qui est a la base = a 0, mon animation est en type Blend tree avec 2 animation Float, la première " idle " ==0 et deuxième "walk" ==1, ce que j'aimerai realiser c'est de poser une condition " si je clique sur ma souris, la vitesse de mon agent passe a 1 jusqu'a la fin de sa course" sauf que je sais pas comment poser une telle condition, enfin la ou ca me pose probleme c'est comment dire jusqu'a la fin de sa course et ensuite la vitesse repassera a 0, ce qui va me permettre de jouer mon animation sans aucun soucis, voici mon script :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
 
public class ClickToMve : MonoBehaviour {
 
    //Variables
 
    public    RaycastHit HitInfo = new RaycastHit();
    private  NavMeshAgent Agent;
 
 
 
 
 
    // Use this for initialization
    void Start () {
        Agent = GetComponent<NavMeshAgent>();
        Agent.speed = 0f;
 
    }
     
    // Update is called once per frame
    void Update () {
 
        if (Input.GetMouseButtonDown(0))
        {
 
 
             
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray.origin, ray.direction, out HitInfo))
 
               Agent.destination = HitInfo.point;
            Agent.speed = 1f;
 
        }
 
    }
 
}

voila ca fait quelques jours que je cherche je voulais pas déranger le monde mais bon j'ai le dos au mur,

merci d'avance pour votre aide !

Avatar de l’utilisateur
evereal
Messages : 109
Inscription : 06 Nov 2015 18:46

Re: Animer NavMeshAgent

Message par evereal » 28 Avr 2017 15:42

Hello,

Alors je vais d'abord pointer ta grosse erreur de raisonnement qui est à la base de ton problème.
le NavMeshAgent.speed est la vitesse MAXIMUM que peux atteindre ton agent, pas sa vitesse actuelle !

Il faut une méthode pour savoir si ton agent a fini sa course et changer la variable de ton blendTree en conséquence.

Ensuite il y à l'air d'avoir également un soucis sur les variables de ton blendtree.
Je ne vois pas pourquoi tu as 2 variables, il suffit d'une variable float "speed". Puis tu défini que si cette variable est a 0, tu joue l'animation idle, si elle est à 1, tu joues l'animation marche

Code : Tout sélectionner

Animator myAnimator = GetComponent<Animator>();
float dist=agent.remainingDistance; 
if (dist!=Mathf.infinite && agent.pathStatus==NavMeshPathStatus.completed && agent.remainingDistance==0) {
   // on joue l'animation d'idle
   myAnimator.SetFloat("speed", 0);
}
else {
  // on joue l'animation de marche
  myAnimator.SetFloat("speed", 1);
}
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”

Répondre

Revenir vers « Scripting »