Charger une Objet 3D dans un GUI

Questions à propos du GUI, y compris la partie script.
Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Charger une Objet 3D dans un GUI

Message par kealkeal » 01 Déc 2011 17:21

Bonjour,

J'aimerai donner la possibilité d'afficher un objet 3D dans un GUI et ainsi pouvoir manipuler (regarder l'objet sous tous les angles) le tout dans une scène 3D.

Si quelqu'un a des idées ... je suis preneur.

Merci. ;)
kealkeal

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

Re: Charger une Objet 3D dans un GUI

Message par cayou66 » 01 Déc 2011 17:23

30sec de recherche, pour trouver un script qui fait de la rotation d'objet avec la souris, avec un effet de décélération au lâché de souris:
http://answers.unity3d.com/questions/34 ... wn-on.html
Je vois pas le rapport avec le GUI :)

Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Re: Charger une Objet 3D dans un GUI

Message par kealkeal » 01 Déc 2011 17:30

Merci pour le script de la camera, ça j'avais déjà ! ;)

Pour le GUI, imaginons que je sois dans un musée avec des statues, lorsque je clique sur un bouton , un GUI s'affiche avec mon objet 3D, ici ma statue, et je peux tourner autour de ma statue, afficher des infos ...

Espérant que ma demande soit plus précise. :)
kealkeal

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

Re: Charger une Objet 3D dans un GUI

Message par cayou66 » 01 Déc 2011 17:51

Bha pour le GUI tu fais comme d'hab.
Imaginons que ton script GUI est sur ta caméra, et que ton objet sera "enfant" de cette caméra, tu peux le placer en utilisant les coordonnées "écran" via ce code là:

Code : Tout sélectionner

Ray ray  = Camera.main.ScreenPointToRay (new Vector3(Screen.width/2,(Screen.height/2,0));
Vector3 pos = Camera.main.transform.InverseTransformPoint(ray.origin +( ray.direction*22f));
A noter que l'objet sera placer au centre de l'écran, et que Y = 0 est le bas de l'écran.
Le nombre 22 est une distance depuis la caméra, ça détermine le Z normalement.
Ensuite tu n'a plus qu'à positionner ton objet 3d (qui est enfant de la caméra, avec parent = maCamera...) avec :

Code : Tout sélectionner

transform.localPosition = pos;
Il est important de faire la transition des coordonnées monde vers locales étant donné que ton objet suivra la caméra, même si cette dernière bouge, comme un "vrai" GUI.

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: Charger une Objet 3D dans un GUI

Message par artemisart » 01 Déc 2011 17:53

Mon idée : tu crée une 2ème caméra (qui s'affiche au-dessus de la première et qui ne prend pas tout l'écran) et tu instancie un objet devant cette caméra (avec un layer différent si besoin).
Et quand tu n'as plus besoin de cette caméra tu la désactive(par un clic sur un GUI.Button par exemple).

Parce que de la 3D en GUI, c'est techniquement impossible (ou alors de la 3D précalculée, mais c'est pas super :? ).

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Charger une Objet 3D dans un GUI

Message par ZJP » 01 Déc 2011 19:13

Clair.
La méthode de Cayou consiste à faire croire que l'objet 3D fait partie intégrante du GUI en le plaçant au bon endroit (x et y) .Par exemple dans un fenêtre crée par le GUI. Seul souci, trouver la bonne profondeur (z).

JP

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

Re: Charger une Objet 3D dans un GUI

Message par cayou66 » 01 Déc 2011 19:47

ZJP a écrit :Clair.
La méthode de Cayou consiste à faire croire que l'objet 3D fait partie intégrante du GUI en le plaçant au bon endroit (x et y) .Par exemple dans un fenêtre crée par le GUI. Seul souci, trouver la bonne profondeur (z).

JP
Tout à fait, je me sers de cette méthode afin de faire des systèmes "GUI" via des 3DText ou Plane. On s'en sert avec les coordonnées écran, il suffit de penser à faire tous les objets du "GUI" enfant de la caméra.

Et comme tu dis, il faut y aller à tâtons avec le z, qui dépend de la longueur du Raycast.

Gruguir
Messages : 27
Inscription : 31 Mars 2011 17:54
Contact :

Re: Charger une Objet 3D dans un GUI

Message par Gruguir » 02 Déc 2011 17:00

Si t'es sous Unity pro utilise simplement un Render Texture dans un Gui :)

Code : Tout sélectionner

var renderTexture : Texture;

function OnGUI() {

	if (GUI.Button(Rect(10,70,64,64),renderTexture)) {
	// code...
	}
	
}

Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Re: Charger une Objet 3D dans un GUI

Message par kealkeal » 02 Déc 2011 17:57

"RendreTexture" va permettre d'afficher un Objet 3D dans le GUI ... ? :roll:

De ce que j'ai vu cela ne permet que d'afficher un Texture 2D, non ?
kealkeal

Gruguir
Messages : 27
Inscription : 31 Mars 2011 17:54
Contact :

Re: Charger une Objet 3D dans un GUI

Message par Gruguir » 02 Déc 2011 20:06

kealkeal a écrit :"RendreTexture" va permettre d'afficher un Objet 3D dans le GUI ... ? :roll:?
ca va te permettre d'afficher une vue de caméra dans un élément GUI (label, button etc)
http://unity3d.com/support/documentatio ... xture.html

Répondre

Revenir vers « L'interface GUI »