Page 1 sur 1

pourquoi pas de rayon?

Publié : 28 Avr 2019 02:11
par Kaloverian
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

Re: pourquoi pas de rayon?

Publié : 28 Avr 2019 10:48
par Max
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).

Re: pourquoi pas de rayon?

Publié : 28 Avr 2019 16:46
par Kaloverian
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

Re: pourquoi pas de rayon?

Publié : 28 Avr 2019 17:23
par Max
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.