[Résolu] Mesure de distance : Raycast + objets taggués

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
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

[Résolu] Mesure de distance : Raycast + objets taggués

Message par freepl » 22 Sep 2016 14:31

Bonjour
J'utilise ce script pour mesurer une distance entre 2 points.

Code : Tout sélectionner

using UnityEngine;

public class LineScript : MonoBehaviour {

	Transform [] _tr = new Transform[2];
	LineRenderer line;
	TextMesh text;
	Transform _transform;
	static float frequency = 0.5f;
	
	void Awake(){
		line = GetComponent<LineRenderer>();
		text = GetComponent<TextMesh>();
		_transform = GetComponent<Transform>();
		line.material = new Material(Shader.Find("Particles/Additive"));
	}

	public void SetTransformArray(Transform first, Transform second){
		_tr [0] = first;
		_tr [1] = second;
	}
	
	public bool ContainTransform(Transform tr){
		return (tr == _tr[0] || tr == _tr[1]);
	}
	public void DestroyThis(){
		Destroy (gameObject);
	}
	
	public void DrawLine(){
		Vector3 dist = _tr[0].position - _tr[1].position;
		int discreteCount = (int)(dist.magnitude / frequency);
		line.SetVertexCount(discreteCount);
		line.SetPosition(0, _tr[0].position);
		Vector3 _tempPosition = _tr[0].position;
		_tempPosition.y += 200f;//200f
		Vector3 _finalPosition = _tr[1].position;
		_finalPosition.y += 200f;
		int index = 1;
		RaycastHit hit;
		Physics.Raycast(_tr[0].position,Vector3.down, out hit);
		Vector3 __tr0 = hit.point;
		__tr0.y+= 1f;
		Physics.Raycast(_tr[1].position,Vector3.down, out hit);
		Vector3 __tr1 = hit.point;
		__tr1.y+= 1f;
		while(index < discreteCount){		
			Physics.Raycast(_tempPosition,Vector3.down,out hit);
			Vector3 linePos = hit.point;
			linePos.y +=0.5f;// +=0.5f Hauteur du texte pa rapport au sol
			line.SetPosition(index++,linePos);
			_tempPosition = Vector3.MoveTowards(_tempPosition,_finalPosition,frequency);
		}
		line.SetPosition(discreteCount - 1, _tr[1].position);
		text.text = dist.magnitude.ToString ("0.00"+"m");
		Vector3 pos = _tr[1].position + dist * 0.5f; //0.5f
		pos.y += 30.0f; // 30.0f
		_transform.position = pos;
	}
}
Il fonctionne par création d'un rayon qui touche tous les objets ayant un collider et on dessine un trait rouge
Image.

Mon pb est que je ne veut pas qu'il dessine sur tous les objets ayant un collider. Certains servent pour les vl ( détecteurs, modif des vitesses ..)
Sur l'image on voit des "encoches" qui correpondent à ces objets; Je cherche à ne pas afficher ces " encoches" pour n'avoir qu'un trait sur la chaussée.

J'ai essayé de modifier le script mais je ne sais pas où mettre les modif.

Je cherche à dire :
tracer un trait sur les objets ayant un collider sauf ceux taggués en Panneau ou en Autre.

Code : Tout sélectionner

&& ( tag != Autre || tag !=Panneau) 
Merci du coup de main

:!: Attention à la section où tu postes. :!:
Nom d'un Ewok chauve, depuis le temps que tu es là,
on en est encore à te reprendre !
Dernière édition par freepl le 27 Sep 2016 18:56, édité 1 fois.

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: Mesure de distance : Raycast + objets taggués

Message par axel » 22 Sep 2016 15:03

J'ai fais un développement de ce genre il y a quelques temps.

Image

Utilise les layers plutôt que les tags.

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Mesure de distance : Raycast + objets taggués

Message par freepl » 22 Sep 2016 15:07

Salut

Pas mal la capture d'écran.
Que j'utilise des layers ou bien des tag, je ne sais pas où modifier le script.


Ps : désolé pour la rubrique, je m'en suis aperçu en validant :oops: :oops:

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Mesure de distance : Raycast + objets taggués

Message par freepl » 22 Sep 2016 17:41

Pour Axel

J'ai vu tes 2 liens.
Chapeau l'artiste. Dessin , sculpture !! Bravo c'est magnifique. :amen: :amen:

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Mesure de distance : Raycast + objets taggués

Message par freepl » 25 Sep 2016 12:25

Résolu.

Merci

Je n'avais pas pensé à regarder les détails des raycast.
Merci Axel.

Code : Tout sélectionner

	public void DrawLine(){
		Vector3 dist = _tr[0].position - _tr[1].position;
		int discreteCount = (int)(dist.magnitude / frequency);
		line.SetVertexCount(discreteCount);
		line.SetPosition(0, _tr[0].position);

		Vector3 _tempPosition = _tr[0].position;
		_tempPosition.y += 200f;//200f

		Vector3 _finalPosition = _tr[1].position;
		_finalPosition.y += 200f;

		int index = 1;

		RaycastHit hit;

		Physics.Raycast(_tr[0].position,Vector3.down, out hit, 1000.0f, layerProjet);
		Vector3 __tr0 = hit.point;
		__tr0.y+= 1f;

		Physics.Raycast(_tr[1].position,Vector3.down, out hit, 1000.0f, layerProjet);
		Vector3 __tr1 = hit.point;
		__tr1.y+= 1f;

		while(index < discreteCount){		
			Physics.Raycast (_tempPosition,Vector3.down,out hit, 1000.0f, layerProjet);
			Vector3 linePos = hit.point;
			linePos.y +=0.5f;// +=0.5f Hauteur du texte pa rapport au sol
			line.SetPosition(index++,linePos);
			_tempPosition = Vector3.MoveTowards(_tempPosition,_finalPosition,frequency);
		}

		line.SetPosition(discreteCount - 1, _tr[1].position);
		text.text = dist.magnitude.ToString ("0.00"+"m");
		Vector3 pos = _tr[1].position + dist * 0.5f; //0.5f
		pos.y += 30.0f; // 30.0f
		_transform.position = pos;
	}
Image

Merci

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: Mesure de distance : Raycast + objets taggués

Message par Iwa » 27 Sep 2016 10:56

Hello,

Et depuis le temps tu sais aussi qu'il faut basculer ton post en [RESOLU] quand tu as tout ce qu'il te faut ;).

Merci d'y penser.
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

Re: Mesure de distance : Raycast + objets taggués

Message par freepl » 27 Sep 2016 18:46

Je vois où verrouiller le sujet mais comment le mettre en Résolu ?

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mesure de distance : Raycast + objets taggués

Message par Max » 27 Sep 2016 18:48

freepl a écrit :Je vois où verrouiller le sujet mais comment le mettre en Résolu ?
Il faut que tu édites le titre de ton message initial pour y ajouter devant '[Résolu]'.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
freepl
Messages : 1034
Inscription : 20 Mai 2012 19:33
Localisation : salon de provence

[Résolu] Re: Mesure de distance : Raycast + objets taggués

Message par freepl » 27 Sep 2016 18:55

Merci Max

Répondre

Revenir vers « (C#) CSharp »