[Résolu] [C#] Orienter un objet sur un seul axe

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
Avatar de l’utilisateur
Steyo
Messages : 8
Inscription : 22 Juil 2015 16:35
Localisation : Bordeaux

[Résolu] [C#] Orienter un objet sur un seul axe

Message par Steyo » 22 Juil 2015 17:31

Bonjour tout le monde !

Après plusieurs jours à m'arracher les cheveux pour réussir à faire marcher un truc tout bête, je me décide à venir humblement demander de l'aide.

Voici ce que je veux faire (Vidéo d'un proto que j'ai fait sur Virtools).

https://www.youtube.com/watch?v=cGcc4j4 ... e=youtu.be

J'ai deux personnage, reliés par un objet 3D. Le but c'est que cet objet se place toujours à côté du P1 et regarde toujours en direction du P2 tout en étant parallèle au sol. Je scale également l'objet pour qu'il s'élargisse en fonction de la distance entre les deux persos.

J'ai donc besoin :
1) De placer l'objet à côté du P1
2) D'augmenter la taille de l'objet ("Lien") en fonction de la distance entre P1 et P2
3) D'orienter mon objet vers le P2 continuellement.

Voici là où j'en suis :

Code : Tout sélectionner

public class LienBehavior : MonoBehaviour {

	public GameObject player1OBJ;
	public GameObject player2OBJ;
	public float distance; // distance entre P1 et P2
	
	// Update is called once per frame
	void Update () {

		Vector3 player1 = player1OBJ.transform.position; // Position P1
		Vector3 player2 = player2OBJ.transform.position; // Position P2
		Vector3 lien = transform.position; // Position du lien
		//Vector3 player2Mid = new Vector3 (player2.x,lien.y,player2.z);
		Vector3 positionLien = new Vector3 (player1.x, player1.y,player1.z);
		transform.position = positionLien;

		distance = Vector3.Distance(player1, player2);

		transform.localScale = new Vector3(1,1,distance);
		transform.LookAt(player2, Vector3.forward); 

		Debug.Log(distance);


	}
}
Pour ce résultat :

https://www.youtube.com/watch?v=wd5mPu7 ... e=youtu.be
Comme vous vous en doutez, je ne suis pas très satisfait :

1) Mon objet se positionne bien, mais par son centre. Je voudrais qu'il le fasse par son extrémité gauche.
2) La distance a l'air d'être bonne mais je ne peux pas vérifier
3) Mon objet s'oriente pas trop mal mais je ne veux pas qu'il "bascule" comme il le fait lorsque je suis trop près du P2. Je veux qu'il reste droit.

Si vous avez des suggestions ça m'aiderait beaucoup ;)

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [C#] Orienter un objet continuellement sur un seul axe

Message par cayou66 » 22 Juil 2015 18:03

C'est le problème du LookAt quand tu vas t'approcher.
Ce que tu peux rajouter après le LookAt c'est un reset sur l'axe qui traverse ton bloc (les x?).

Code : Tout sélectionner

transform.eulerAngles = new Vector3(0f, transform.eulerAngles.y, transform.eulerAngles.z);
À voir si ça marche.
Ensuite sinon l'objet en question je placerais son point de pivot sur une extrémité et je le positionnerais sur le p1. Ensuite le LookAt oriente, et le localScale.x dépend de la distance en p1 et p2.
Par contre, assures toi d'avoir pour ton objet 1u = 1m, si t'as pris le cube d'unity t'es bon car il fait exactement ça mais si tu utilises ton propre mesh attention aux échelles.

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: [C#] Orienter un objet continuellement sur un seul axe

Message par artemisart » 22 Juil 2015 20:24

Et si tu ne veux/peux pas changer le point de pivot, tu peux le garder au centre avec transform.position = (player1 + player2) / 2;

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [C#] Orienter un objet continuellement sur un seul axe

Message par cayou66 » 22 Juil 2015 22:04

artemisart a écrit :Et si tu ne veux/peux pas changer le point de pivot, tu peux le garder au centre avec transform.position = (player1 + player2) / 2;
Exact, c'est juste un peu plus chiant.

Avatar de l’utilisateur
Steyo
Messages : 8
Inscription : 22 Juil 2015 16:35
Localisation : Bordeaux

Re: [C#] Orienter un objet continuellement sur un seul axe

Message par Steyo » 23 Juil 2015 00:29

Merci beaucoup pour vos réponses les gars !!

Comme je ne sais pas changer un point de pivot (et qu'une recherche rapide n'a rien donné), j'ai utilisé le milieu que j'avais déjà calculé sur un autre script. Un de mes problèmes d'orientation venait du fait que le P2 et le P1 n'étaient pas vraiment au même niveau (car pour le P2 j'avais utilisé un cube au centre, qui m'a faussé mes calculs). Je m'en suis rendu compte quand j'ai utilisé la variable "milieu" ci-dessus.

Merci pour le coup de main ;)

Image

Verrouillé

Revenir vers « (C#) CSharp »