pourquoi pas de rayon?

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
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

pourquoi pas de rayon?

Message par Kaloverian » 28 Avr 2019 02:11

bonjour,

Avec ce petit script en C#,mon but est de dessiner un rayon partant de l'objet et arrivant jusqu'au point où le Raycast rencontre le 1er obstacle devant l'objet.Mais je n'y arrive pas;
Pourquoi?

Code : Tout sélectionner

sing UnityEngine;
using System.Collections;

public class basic_draw_ray : MonoBehaviour
{
	RaycastHit hit;
	public GameObject objet;
	public Transform obj;
	public float tp;
	// Use this for initialization
	void Start ()
	{
	}
	
	// Update is called once per frame
	void Update ()
	{
	     if(Physics.Raycast (obj.position, hit.point, out hit,10))
	        {Vector3 incomingVec = hit.point - obj.position; 
			  Debug.DrawRay (obj.position,incomingVec, Color.green,tp );}
	}
}
merci de votre aide

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

Re: pourquoi pas de rayon?

Message par Max » 28 Avr 2019 10:48

Bonjour,

As-tu regardé comment employer la fonction Raycast dans la doc (et les exemples qui y sont listés) ?
Cette fonction à la base demande une origine et une direction. hit.point n'est pas une direction (mais la position d'une collision éventuelle avec un élément de ta scène) ou alors ton utilisation m'échappe.

Code : Tout sélectionner

public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);
En suite, tu utilises Debug.DrawRay pour dessiner un rayon. Là encore, comme le souligne le doc, ce type de fonction ne fera un rendu que dans l'onglet "scène". Tu ne verras rien Ingame (regarde par exemple plutôt du coté des Trail Renderer).
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
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: pourquoi pas de rayon?

Message par Kaloverian » 28 Avr 2019 16:46

mon premier but est corrigé en remplaçant par:
if(Physics.Raycast (obj.position,incomingVec , out hit,dist))

par contre,je n'arrive pas à réaliser précisément mon second but avec ce second script qui est de dessiner grâce à DrawLine un rayon rouge de la position de l'objet translaté par un autre script jusqu'à la position du hit;en espérant que ce rayon rouge ne change de direction mais diminue de longueur au fur et à mesure que l'objet s'approche du hit
DrawLine,contrairemet à DrawRay, peut prendre en arguments 2 positions

second script

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class basic_draw_ray : MonoBehaviour
{
	RaycastHit hit;
	public GameObject objet;
	public Transform obj;
	public float tp,dist;
	
	// Use this for initialization
	void Start ()
	{
	 
		
	}


void Update ()
	{  
		Vector3 incomingVec = hit.point - obj.position; 
		obj.position = objet.GetComponent<Transform> ().position;
		Debug.DrawLine (obj.position,hit.point, Color.red,tp );


		//le raycast est enclenché dès que la distance dist entre l'objet et le hit <= dist
		if(Physics.Raycast (obj.position,incomingVec , out hit,dist))
	        {

			Debug.DrawRay (obj.position, incomingVec, Color.green, tp);
			}
	}
}



Ce second script trace un rayon rouge de la position de l'objet translaté à la position de départ de l'objet.Ce n'est pas mon second but

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

Re: pourquoi pas de rayon?

Message par Max » 28 Avr 2019 17:23

Pourquoi toute ces définitions obj, objet. Pourquoi pas seulement obj ?
Kaloverian a écrit :
28 Avr 2019 16:46
mon second but avec ce second script qui est de dessiner un rayon rouge de la position de l'objet translaté par un autre script jusqu'à la position du hit;
Tu fais ton calcul de direction pour ton Raycast à partir de ton Hit.position qui au départ est null.
Exemple, si ton objet est à une position (0, 1, 0), alors la direction calculée sera (0, -1, 0), soit un Raycast vers le bas.
Ton approche est étrange, ou mal posée...
En général, sur un objet qui se déplace, si on cherche à faire le test vers l'avant on passe par des chose du genre transform.forward par exemple pour ce qui est de la direction du Raycast.

Sinon, en annexe, on ne fait pas de GetComponent dans un Update (du moins on évite fortement). De plus, le Transform d'un GameObject est un component un peu particulier, et qui ne nescessite pas d'appel à GetComponent pour accéder à la référence. On peut simplement écrire objet.transform.
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

Répondre

Revenir vers « (C#) CSharp »