[C#] -RaycastHelper.cs - raycast functionnalitees

Cette section est destinée aux scripts partagés par la communauté. Chaque post est destiné à un script. Suivez bien les recommandations.
Avatar de l’utilisateur
giyomuSan
Messages : 1799
Inscription : 09 Déc 2009 14:52
Localisation : Japon

[C#] -RaycastHelper.cs - raycast functionnalitees

Message par giyomuSan » 22 Mai 2012 14:08

-NOM DU SCRIPT : RaycastHelper

-AUTEUR(S): giyomuSan

-DESCRIPTION : Classe pour definir diverse operation avec raycast..pour le moment juste une seule fonction pour un raycast avec la camera, par la suite cette classe peut etre etendu avec plus de functions ( que j'ajouterais en update ici ).
Le but etant juste de se faire une sorte de wrapper / helper classe pour gerer certaine operation sans avoir a les re-ecrires a chaque coup ou de devoir drag dropper un script a chaque fois ...
Selon les besoins les arguments du constructeur peuvent etre etendu..

Le script fonctionne pour n'importe quelle plateforme ( y compris mobile si on utilise un single touch )

-UTILISATION : Importer le fichier RayCastHelper.cs dans votre projet, et creer une instance de celui-ci depuis n'importe quel autre script, en lui passant les arguments necessaires dans son constructeur

- SCRIPT :

Code : Tout sélectionner

using UnityEngine;

public class RaycastHelper
{
	private readonly Camera _camera;
	
        // Constructeur
	public RaycastHelper(Camera camera)
	{
		_camera = camera;
	}
	
	public bool GetCameraRayCastInfos(Vector2 input, out RaycastHit hit)
	{
		var ray = _camera.ScreenPointToRay(input);
		hit = new RaycastHit();
		
		if(Physics.Raycast(ray, out hit, Mathf.Infinity))
			return true;
		
		return false;
	}
}
- EXEMPLE D' UTILISATION : creez un game object empty et placez ce script dessus.

Vous pouvez telecharger le package il contient deja la scene toute prete et les deux scripts

Code : Tout sélectionner

using UnityEngine;

// TestRay.cs
public class TestRay : MonoBehaviour
{
	private RaycastHelper _raycastHelper;
	private bool _rayFlag = false;
	private RaycastHit _hit = new RaycastHit();
	private Transform _hitTransform;

	// Use this for initialization
	void Start ()
	{
                // Creation d'une instance RaycastHelper
		_raycastHelper = new RaycastHelper(Camera.mainCamera);
	}
	
	// Update is called once per frame
	private void Update ()
	{
		if(Input.GetMouseButtonDown(0))
		{
			if( _raycastHelper.GetCameraRayCastInfos(Input.mousePosition, out _hit))
			{
				_rayFlag = true;
				_hitTransform = _hit.collider.transform;
			}
			else
			{
				_hitTransform = null;
				_rayFlag = false;
			}
		}
		
		if(_hitTransform)
			_hitTransform.Rotate(new Vector3(10f, 20f, 10f) * Time.deltaTime);
	}
	
	private void OnGUI()
	{
		if(_rayFlag)
		{
			var labelPos = Camera.mainCamera.WorldToScreenPoint( _hit.point);
			GUI.Label(new Rect(labelPos.x, Screen.height - labelPos.y, 300f, 50f), "Distance\nFrom\nCamera = " + _hit.distance);
			GUI.Label(new Rect(labelPos.x, Screen.height - labelPos.y + 50f, 300f, 50f), "I am a " + _hit.collider.name);
		}
	}
	
	private void OnDrawGizmos()
	{
		if(_rayFlag)
		{
			Gizmos.color = Color.red;
			Gizmos.DrawSphere(_hit.point, 0.1f + (_hit.distance / 100f));
			
			Gizmos.color = Color.cyan;
			Gizmos.DrawRay(_hit.point, _hit.normal.normalized * 2f);
		}
	}
}
Pièces jointes
RayCast.unitypackage.zip
Package exemple contenant scene prete a jouer et les deux scripts presenter ici
(7.74 Kio) Téléchargé 165 fois

Avatar de l’utilisateur
db22
Messages : 742
Inscription : 31 Mars 2011 12:07

Re: [C#] -RaycastHelper.cs - raycast functionnalitees

Message par db22 » 22 Mai 2012 18:29

Merci giyomuSama ^^ ça va me servir 8-)
Bienvenue !

Répondre

Revenir vers « Scripts »