[Curiosité] Dessiner avec le GUI

Questions à propos du GUI, y compris la partie script.
Avatar de l’utilisateur
patmaba
Messages : 105
Inscription : 23 Jan 2011 00:43

Re: [Curiosité] Dessiner avec le GUI

Message par patmaba » 24 Nov 2011 11:23

mon ptit loulou,

tu viens de nous fournir des infos précieuses.

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

Re: [Curiosité] Dessiner avec le GUI

Message par Max » 24 Nov 2011 11:34

Sympa en effet le petit tuto sur le mixage des deux type de cameras
Image
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
patmaba
Messages : 105
Inscription : 23 Jan 2011 00:43

Re: [Curiosité] Dessiner avec le GUI

Message par patmaba » 25 Nov 2011 00:17

Je viens d'écrire le code pour dessiner une ligne en 3d.

Code : Tout sélectionner

function CreateLine3D(x1,y1,z1,x2,y2,z2) {
	var go = new GameObject("line");
	go.AddComponent(MeshFilter);
	go.AddComponent(MeshRenderer);	
	var mesh = go.GetComponent(MeshFilter).mesh;

	var array = new Array( mesh.vertices );
	var arrayuv = new Array( mesh.uv );

	mesh.Clear();	
	array.push( Vector3(x1,y1,z1));	
	array.push( Vector3((x1+x2)/2,(y1+y2)/2,(z1+z2)/2));
	array.push( Vector3(x2,y2,z2));
	mesh.vertices = array.ToBuiltin(Vector3);

	arrayuv.push( Vector2(0,0));
	arrayuv.push( Vector2(0,0));
	arrayuv.push( Vector2(1,0));
	
	mesh.uv = arrayuv.ToBuiltin(Vector2);

	array = new Array( mesh.triangles );
  		array.push( 0 );
		array.push( 2 );
		array.push( 1 );
	mesh.triangles = array.ToBuiltin(int);
	mesh.RecalculateNormals();

	return go;
}

J'aimerai rendre le ligne sur des coordonnées pixelisé 2D avec l'idée de loulou. 
Avez-vous une idée ?


Avatar de l’utilisateur
Loulou
Messages : 239
Inscription : 23 Nov 2011 01:04
Localisation : Paris
Contact :

Re: [Curiosité] Dessiner avec le GUI

Message par Loulou » 30 Nov 2011 03:14

Fichier Line2D.cs

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Drawing : object {
	public static GameObject Line2D(Vector2 begin, Vector2 end, float size)
	{
		GameObject _gameObject;
		MeshFilter _meshFilter;
		MeshRenderer _meshRenderer ;
		
		_gameObject = new GameObject("Line");
		_meshFilter = _gameObject.AddComponent<MeshFilter>() as MeshFilter;
		_meshRenderer = _gameObject.AddComponent<MeshRenderer>() as MeshRenderer;
		_meshRenderer.material = new Material(Shader.Find("Self-Illumin/Diffuse"));
		
		Mesh mesh = new Mesh();
		mesh.name = "Line";
		mesh.Clear();
		_meshFilter.mesh = mesh;
		
		Vector3[] vertices = new Vector3[4];
		vertices[0] = new Vector3(0.0f, -0.5f, 0.0f);
		vertices[1] = new Vector3(1.0f, -0.5f, 0.0f);
		vertices[2] = new Vector3(1.0f, 0.5f, 0.0f);
		vertices[3] = new Vector3(0.0f, 0.5f, 0.0f);
		mesh.vertices = vertices;
		
		Vector2[] uv = new Vector2[4];
		uv[0] = new Vector2(0.0f, 0.0f);
		uv[1] = new Vector2(1.0f, 0.0f);
		uv[2] = new Vector2(1.0f, 1.0f);
		uv[3] = new Vector2(0.0f, 1.0f);
		mesh.uv = uv;
		
		Vector3[] normals = new Vector3[4];
		normals[0] = new Vector3(0.0f, 0.0f, 1.0f);
		normals[1] = new Vector3(0.0f, 0.0f, 1.0f);
		normals[2] = new Vector3(0.0f, 0.0f, 1.0f);
		normals[3] = new Vector3(0.0f, 0.0f, 1.0f);
		mesh.normals = normals;
		
		int[] triangles = {0, 1, 2, 0, 2, 3};
		mesh.triangles = triangles;
		
		Vector2 direction = new Vector2(end.x - begin.x, end.y - begin.y);
		float angle = Vector2.Angle(-Vector2.right, direction);

		if (end.y > begin.y) angle *= -1;
		
		_gameObject.transform.localRotation =Quaternion.Euler(0.0f, 0.0f,  angle);
		_gameObject.transform.localScale = new Vector3(-Vector2.Distance(begin, end), size, 1.0f);
		_gameObject.transform.position = new Vector3(begin.x, begin.y, 0.0f);
		return _gameObject;
	}
}
Fichier TestLine2D.cs

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

[RequireComponent (typeof (Camera))]
public class TestLine2D : MonoBehaviour {

	private Vector3 _begin, _end;
	private bool _beginIsSet;
	private float _size = 0.5f;

	// Update is called once per frame
	void Update () {
		if (Input.GetMouseButtonDown(0))
		{
			if (!this._beginIsSet)
			{
				this._begin = camera.ScreenToWorldPoint(Input.mousePosition);
				this._beginIsSet = true;
			}
			else
			{
				this._end = camera.ScreenToWorldPoint(Input.mousePosition);
				this._beginIsSet = false;
				Drawing.Line2D(new Vector2(this._begin.x, this._begin.y), new Vector2(this._end.x, this._end.y),this._size);
			}
		}
	}
}
Pour tester il faut mettre le script TestLine2D sur une camera ortho qui a un transform :
  • Position
    • x: 0
      y: 0
      z: 10
    Rotation
    • x: 0
      y: 180
      z : 0
J'ai pas cherché la façon la plus sexy de dessiner des lignes mais ça marche.

Avatar de l’utilisateur
patmaba
Messages : 105
Inscription : 23 Jan 2011 00:43

Re: [Curiosité] Dessiner avec le GUI

Message par patmaba » 30 Nov 2011 23:07

Je reçois ce message
Assets/TestLine2D.cs(4,18): error CS0101: The namespace `global::' already contains a definition for `Drawing'

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

Re: [Curiosité] Dessiner avec le GUI

Message par cayou66 » 30 Nov 2011 23:37

Changes le nom en DrawingToto (c'est un exemple :D) en reprenant bien ce nom partout dans le code, et ça devrait fonctionner. Cela vient du fait que "Drawing" existe déjà dans Unity.

Avatar de l’utilisateur
patmaba
Messages : 105
Inscription : 23 Jan 2011 00:43

Re: [Curiosité] Dessiner avec le GUI

Message par patmaba » 02 Déc 2011 00:31

Ok, j'ai plus l'erreur mais j'ai rien à l'écran. :|

Avatar de l’utilisateur
Loulou
Messages : 239
Inscription : 23 Nov 2011 01:04
Localisation : Paris
Contact :

Re: [Curiosité] Dessiner avec le GUI

Message par Loulou » 02 Déc 2011 00:46

Tu as bien créé une camera comme je l'ai expliqué et ajouté le script de teste a la camera ?
J'ai pas le temps ce soir mais si tu as toujours ce problème, je te fais un petit projet d'exemple demain matin.

Au faite, j'ai fait mes tests sur Unity 3.0.2f4, autrement dit je ne suis pas a jour. Je vérifie sur une version a jour demain.

Avatar de l’utilisateur
Loulou
Messages : 239
Inscription : 23 Nov 2011 01:04
Localisation : Paris
Contact :

Re: [Curiosité] Dessiner avec le GUI

Message par Loulou » 02 Déc 2011 11:19

Voici un projet avec une scene qui marche :
http://www.remibodin.fr/files/DrawLine.zip
Quand tu lances la scene, un premier clique souris sur l'ecran definit le point de depart de la ligne, un second clique definie le point d'arrivé et crée la ligne.

Je viens de tester avec Unity 3.4.2f2 (a jour donc) et pas de souci.

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

Re: [Curiosité] Dessiner avec le GUI

Message par Max » 02 Déc 2011 11:26

Loulou a écrit :Je viens de tester avec Unity 3.4.2f2 (a jour donc) et pas de souci.
pas mal en effet, cela tourne bien. C'est de plus plutôt instructif à décortiquer comme code (pour ce qui me concerne).
Merci :P
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 « L'interface GUI »