[RESOLU] Ajuster la position d'un gameObject sur l'axe z en fonction du FirstPersonCharacter

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
skillless
Messages : 3
Inscription : 27 Juil 2018 18:07

[RESOLU] Ajuster la position d'un gameObject sur l'axe z en fonction du FirstPersonCharacter

Message par skillless » 27 Juil 2018 18:10

Bonjour à vous et je vous remercie d'avance pour toutes les réponses que vous pourrez m'apporter,

je vais vous expliquer mon problème très rapidement : j'ai besoin, pour un projet sur unity 3D qu'un gameObject suive mon player sur l'axe z et qu'il n'y ait aucune autre modification. ( via un script )

merci d'avance

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

Re: Ajuster la position d'un gameObject sur l'axe z en fonction du FirstPersonCharacter

Message par Liven » 28 Juil 2018 01:20

Peut être simplement un truc comme ça :

Code : Tout sélectionner

Vector3 objectPosition = transform.position; // à mettre en start si le x et y ne bougent jamais
objectPosition = new Vector3(objectPosition, objectPosition, player.transform.position);

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

Re: Ajuster la position d'un gameObject sur l'axe z en fonction du FirstPersonCharacter

Message par boubouk50 » 30 Juil 2018 09:07

Tu peux également le parenter, mais tout suivra:

Code : Tout sélectionner

this.transform.parent = //le transform du player
"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

skillless
Messages : 3
Inscription : 27 Juil 2018 18:07

Re: Ajuster la position d'un gameObject sur l'axe z en fonction du FirstPersonCharacter

Message par skillless » 30 Juil 2018 11:15

Liven a écrit :
28 Juil 2018 01:20
Peut être simplement un truc comme ça :

Code : Tout sélectionner

Vector3 objectPosition = transform.position; // à mettre en start si le x et y ne bougent jamais
objectPosition = new Vector3(objectPosition, objectPosition, player.transform.position);
Merci pour cette réponse, mais, petite question objectposition correspond à une variable ou juste le nom du gameobject+position ?

skillless
Messages : 3
Inscription : 27 Juil 2018 18:07

Re: Ajuster la position d'un gameObject sur l'axe z en fonction du FirstPersonCharacter

Message par skillless » 30 Juil 2018 13:20

Merci pour tout ce que vous avez pu m'apporter ;-)
j'ai enfin trouvé la solution

Code : Tout sélectionner

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

public class drafgon : MonoBehaviour {

	 public Vector3 position;
	 public GameObject Player;
	 public GameObject RedDragon;

	// Use this for initialization
	void Start () {
	Vector3 playerPosition = transform.position;
	}
	
	// Update is called once per frame
	void Update () {

       RedDragon.transform.position = new Vector3(transform.position.x, transform.position.y, Player.transform.position.z);
	   
	}
}

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

Re: Ajuster la position d'un gameObject sur l'axe z en fonction du FirstPersonCharacter

Message par boubouk50 » 30 Juil 2018 15:22

skillless a écrit :
30 Juil 2018 13:20
j'ai enfin trouvé la solution
Quelques explications/infos/conseils en regardant ton code:

Code : Tout sélectionner

public class Dragon : MonoBehaviour {
	public GameObject player;
Par convention, une classe, un type prennent une majuscule, et les variables des minuscules. (Ceci, n'est pas obligatoire, mais utile à la lecture et évite des erreurs bêtes)

Code : Tout sélectionner

public Vector3 position;
public GameObject player;
public GameObject redDragon;
Ceci sont des déclarations de variables. Elles ne sont utiles que si tu les utilises. position n'est jamais utilisé, il n'est pas utile de l'ajouter.
Aussi, l'objet sur lequel est associé le script et directement accessible depuis le code. Pas besoin de le passer en variable. Je suppose qu'ici, le script est mis sur le GameObject RedDragon. Dans ce cas tu peux l'appeler directement avec this, sans le déclarer.

Code : Tout sélectionner

// Use this for initialization
void Start () {
	Vector3 playerPosition = transform.position;
}
Ici, tu déclares une variable locale au sein de la fonction Start (). Elle sera détruite à la fin de l'exécution de cette fonction. Donc, elle ne sert à rien.

Code : Tout sélectionner

RedDragon.transform.position = new Vector3(transform.position.x, transform.position.y, Player.transform.position.z);
Ici, on voit nettement l'utilisation du this, même s'il n'est pas écrit. En fait, transform.position.x correspond à this.transform.position.x, this étant facultatif. Si le script est sur RedDragon alors:
transform.position.x équivaut à this.transform.position.x qui équivaut à RedDragon.transform.position.x. Car à chaque fois tu accèdes la position x du Component Transform de l'objet qui possède ce script.

Voilà ce que donne ton code:

Code : Tout sélectionner

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

public class Dragon : MonoBehaviour {

	 public GameObject player; //Ici, le player à renseigner dans l'Inspector

	// Update is called once per frame
	void Update () {
		transform.position = new Vector3(transform.position.x, transform.position.y, player.transform.position.z);  
	}
}
Aussi, règle du forum: Lorsqu'un problème est résolu, merci de le préciser aux autres membres en éditant le premier message et ajoutant [RESOLU] en début de celui-ci. Je le fais cette fois-ci.
"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

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

Re: Ajuster la position d'un gameObject sur l'axe z en fonction du FirstPersonCharacter

Message par Liven » 30 Juil 2018 15:25

bravo, effectivement ça doit être fonctionnel, je me permet juste une petite remarque d'un point de vue opti : appeller ou modifier un transform.position (ou rotation) est très gourmand et à éviter à chaque que l'on peut dans les update.
Du coup comme la position x et y de ton objet ne change jamais tu peut les stocker dès le début dans une variable et utiliser cette variable par la suite. Ce qui donne pour ton code :

Code : Tout sélectionner

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

public class drafgon : MonoBehaviour {

	 public Vector3 redDragonPosition; // c'est la variable qui va stocker la position par défaut de ton object (que tu peux passer en privé si tu na pas besion d'y accéder dans d'autres sripts 
	 public GameObject Player; // si tu n'appel pas cette variable depuis un autre script vaut mieux utiliser "[serialisedfield] private" que "public" (c'est une bonne habitude à prendre que beaucoup de tuto négligent)
	 public GameObject RedDragon; // idem 

	// Use this for initialization
	void Start () {
	redDragonPosition= RedDragon.transform.position; // ici tu stock en mémoire la position par défaut de l'objet (par la suite tu y récupérera les valeur x et y)
	}
	
	// Update is called once per frame
	void Update () {

       RedDragon.transform.position = new Vector3(redDragonPosition.x, redDragonPosition.y, Player.transform.position.z); // ici tu attribue la nouvelle position en prenant comme référence la position x et y par défaut de ton objet (et ça t'évite d'appeler 2 fois le transform.position) par contre pour z, tu doit bien aller le cherché dans le transform.position du player puisque celui ci évolue en court de partie.
	   
	}
}

Edit : Je vois que mon VDD à été un poil plus rapide. C'est conseils sont tout à fait pertinents (mais il reste le petit soucis d'opti que j'évoque, on va dire que c'est complémentaire)

Répondre

Revenir vers « (C#) CSharp »