[DB-Al] Animer un click to move object

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Apter-X
Messages : 3
Inscription : 07 Déc 2016 14:43

[DB-Al] Animer un click to move object

Message par Apter-X » 12 Déc 2016 15:00

Bonjour à tous,

Je débute sur C# et actuellement je bosse sur un script pathfinding tout en utilisant l'outil Animator, l'objectif c'est de pouvoir activer le parameter d'Animator "IsRunning" quand l'objet est en déplacement et de le désactiver quand ce dernier arrive à destination.

Tout semble fonctionner sauf quand l'objet arrive a destination ou le "IsRunning" ne se désactive pas. Il me semble qu'une ligne de code me manque dont je ne sais comment l'interpreter pour prévenir que quand le nav mesh (que j'utilise d'ailleurs) passe en off ou quand l'objet arrive à destination, de désactiver le paramètre "IsRunning".

Voici le code que j'utilise :

Code : Tout sélectionner

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

[DisallowMultipleComponent]
[RequireComponent(typeof(UnityEngine.AI.NavMeshAgent))]
public class ClickToMove : MonoBehaviour {
	private Vector3 targetPosition;	

	private Animator anim; // Hello Animator
	private bool running; // Voici ton paramètre
	
	UnityEngine.AI.NavMeshAgent agent;

	void Awake()
	{
		agent = GetComponent<UnityEngine.AI.NavMeshAgent> ();
	}

	void Start () 
	{
		anim = GetComponent<Animator>(); //Quand je dis anim je dis...

		targetPosition = transform.position;
		running = false; //Narmol tu ne t'active pas alors que t'es immobile
	}

	void Update ()
	{
		if (Input.GetMouseButton (0))
		SetTargetPosition ();

		MovePlayer ();

		anim.SetBool ("IsRunning", running); // Je met en place le parametre 
	}

	void SetTargetPosition()
	{
		Plane plane = new Plane (Vector3.up, transform.position);
		Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
		float point = 0f;

		if (plane.Raycast (ray, out point))
			targetPosition = ray.GetPoint (point);
		
		running = true; // L'activation du paramètre
	}

	void MovePlayer()
	{
		agent.SetDestination (targetPosition);

		Debug.DrawLine (transform.position, targetPosition, Color.red);
	}
}
Voila, merci pour votre aide.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-Al] Animer un click to move object

Message par Moi 1971 » 12 Déc 2016 18:22

Bonjour,
Il manque dans ton code la ligne "running = false;" quand "transform.position == targetPosition"

De plus, tu n'as pas enlever les commentaires de celui qui a fait le code pour toi.....

Apter-X
Messages : 3
Inscription : 07 Déc 2016 14:43

Re: [DB-Al] Animer un click to move object

Message par Apter-X » 12 Déc 2016 22:04

Salut 71,

En fait je voulais utiliser le marqueur pour marquer les lignes qui nous intéresse, mais puisque c'est en code autant laissé des commentaires. Je suis en fait les vidéos de BurgZerg Arcade sur Youtube si mes sources t'intéressent.

J'ai essayé les deux lignes de code que tu me propose, mais cela ne semble pas être pris en compte, le paramètre ne se désactive pas, peut être parce que ça entre en conflit avec le NavMeshAgent ou parce que je m'y prend mal si tu peux être plus précis.

Merci.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-Al] Animer un click to move object

Message par Moi 1971 » 13 Déc 2016 11:33

Bonjour,
C'est Moi 1971... et non pas OSS 0017, ni double 117, ni 777... :)

Alors :
Il manque dans ton code la ligne "running = false;" quand "transform.position == targetPosition"
Se traduit par :
SI "transform.position == targetPosition" ALORS "running = false;"
Se traduit par :
if (transform.position == targetPosition) { running = false;}

D'un point de vue logique, maintenant il faut décider à quel endroit dans le code il faut le mettre ce bout de code. On ne peut pas le mettre n'importe où.
Mettre à "false" sa capacité de courir veut dire qu'il est arrivé à destination donc il ne faut plus le faire se déplacer. donc je le mettrais dans l'update() en conditionnant le déplacement tant qu'il n'est pas arrivé à destination.

Code : Tout sélectionner

void Update ()
   {
      if (Input.GetMouseButton (0))
      SetTargetPosition ();
      if (transform.position == targetPosition) {
                running = false;
      }else{
                MovePlayer ();
     }
      anim.SetBool ("IsRunning", running); //On peut mettre ce que l'on veut dans les commentaires. On peut aussi
                                                                                  // les modifier ou le supprimer....
   }
C'est pas forcément la meilleur façon de faire, mais ça devrait marcher.
J'espère que tu vas essayer de comprendre le code pour progresser... ;-)

Apter-X
Messages : 3
Inscription : 07 Déc 2016 14:43

Re: [DB-Al] Animer un click to move object

Message par Apter-X » 15 Déc 2016 17:30

Ca semble fonctionner! Merci pour tes explications Toi 1971. :)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-Al] Animer un click to move object

Message par boubouk50 » 15 Déc 2016 17:34

Si ton problème est résolu, édite le titre de ton premier message en ajoutant [RESOLU] devant stp. Merci.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « (C#) CSharp »