Newbie : écran 42'' tactile et rotation objet

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Newbie : écran 42'' tactile et rotation objet

Message par kangt » 12 Mai 2012 16:30

Bonjour,

Je suis nouveau dans unity et en fait j'aimerai être capable de faire tourner un objet autour de son axe en glissant un doigt sur un écran 42''.
J'voulais juste savoir selon vous quelle serait la meilleur solution d'un point de vue conceptuel. J demande pas du code car je veux apprendre, mais si j peux ne pas prendre le chemin le plus dur car il me manque des infos ca m'aiderait ;)

Merci d'avance

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

Re: Newbie : écran 42'' tactile et rotation objet

Message par cayou66 » 12 Mai 2012 16:36

Yop,
c'est un écran tactile, mais quelle techno? Normalement c'est juste l'implémentation de la souris sur l'écran, donc tu peux très bien utiliser un rotate object comme on en trouve partout sur le net avec la souris, classique.

J'ai fais un rotate "smooth", script à placer sur l'objet en question:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class rotateObject : MonoBehaviour {

	 float speed = 1.0f; //how fast the object should rotate
	
	Vector3 centerPos, targetPos, refPos;

 	void Update()
	{
		
		if(Input.GetMouseButtonDown(0))
		{
			centerPos = Input.mousePosition;
		}
		
		if(Input.GetMouseButton(0))
		{
			targetPos = Input.mousePosition;
		}
		centerPos = Vector3.SmoothDamp(centerPos,targetPos,ref refPos, 0.5f);
		Vector3 targetRotate = new Vector3(targetPos.y - centerPos.y, -(targetPos.x - centerPos.x), targetPos.z - centerPos.z);
		transform.Rotate(targetRotate * Time.deltaTime * speed,Space.World);
 	}
}

kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Re: Newbie : écran 42'' tactile et rotation objet

Message par kangt » 12 Mai 2012 18:46

Allo,

Merci beaucoup pour le script ... j'en suis à le décortiquer un peu même si finalement j voyais ça plus compliqué que cela ;)
Bon et si je veux rajouter un bouton pour remettre à zéro j'ai juste à tester si je clique sur le bouton avant de lancer la partie de la rotation ? c'est bien ça ?

Merci

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

Re: Newbie : écran 42'' tactile et rotation objet

Message par cayou66 » 12 Mai 2012 19:04

Oui,
dans un OnGUI si tu cliques tu mets une rotation à 0:

Code : Tout sélectionner

void OnGUI()
{
  if(GUI.Button...)
    transform.eulerAngles = new Vector3(0,0,0);
}

kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Re: Newbie : écran 42'' tactile et rotation objet

Message par kangt » 12 Mai 2012 23:42

Re,

Super tout ce bout là fonctionne très bien. Il a fallu que je fouille un peu pour me trouver un shader double face pour mon modèle et que je l'adapte un peu ... oufff pas la prtie la plus simple ca par exemple mais bon je suis pas mécontent du résultat.
Dernière petit info pour être sur la bonne voie ... j'aimerai que quand je clic sur une partie de mon modèle et bien que cela fasse apparaitre une tite pop-up avec un pti texte explicatif sur la zone cliquée.
La j'avoue que je sèche un peu sur cette partie là ...

À priori faudrait que je joue avec des colliders ?

Merci encore !

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

Re: Newbie : écran 42'' tactile et rotation objet

Message par cayou66 » 13 Mai 2012 16:56

hum,
il te faut effectivement des mesh collider sur les partie de ton objet.
Ensuite le plus simple c'est lorsque tu cliques de lancer un Raycast depuis la position de ta souris vers ton objet, et de retourner le nom de l'objet touché.
Sinon tu peux mettre un script sur chaque objet (si tu n'en a pas 50 ça devrait pas être trop long) qui implémente la fonction OnMouseDown et qui appelle une fonction sur ton script principal avec son nom en paramètre.
En sachant que le OnMouseDown fait un Raycast pour toi, du coup si tu as 50 objets qui implémente la fonction OnMouseDown tu as 50 Raycast à chaque fois, ça peut être un peu lourd.

Si tu optes pour la 1ere solution, il faut convertir dans un 1er temps la position de la souris à l'écran vers une position dans la scène avec Camera.main.ScreenToWorldPoint (de mémoire), la doc fournie pas mal d'exemples en C# et en JS.
Une fois que tu as ton point dans l'espace, tu peux lancer un raycast (Physics.Raycast) vers la direction de ton modèle.

Tu verra c'est pas évident, surtout si tu n'a jamais fait, tu peux poser des questions ici si tu as besoin d'aide, mais internet est rempli d'exemple sur les raycast avec Unity, tu devrais t'en sortir :P

kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Re: Newbie : écran 42'' tactile et rotation objet

Message par kangt » 13 Mai 2012 17:58

Allo :)
Parfait merci beaucoup de me pointer dans la bonne direction.
J'en ai pas 50 mais tant qu'à faire je vais faire ca bien donc on va y aller par raycast au clic de la souris.
Je vais essayer de me debrouiller .. google et le forum devrait m'être utile et pis si vraiment je galère j'hésiterais pas.

Merci

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

Re: Newbie : écran 42'' tactile et rotation objet

Message par cayou66 » 13 Mai 2012 18:01

Bonne chance ;)

kangt
Messages : 9
Inscription : 11 Mai 2012 23:09

Re: Newbie : écran 42'' tactile et rotation objet

Message par kangt » 14 Mai 2012 20:50

Allo
Et bien me voila donc de retour :)
J'ai fait qq tests et à date j'en suis rendu là :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class raycaster : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		if(Input.GetMouseButtonDown(0)) {
			Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
			RaycastHit hit;
			if(Physics.Raycast(ray,out hit)) {
				Debug.Log(hit.transform.name);
			}
		}
	
	}
}
Sauf que maintenant il faudrait que j'affiche une popup ou whatever pour afficher un texte explicatif ou une video en fonction du mesh que mon rayon a touché. Je suis donc capable maintenant de savoir ce que j'ai touché mais je dois mal chercher car je ne trouve pas comment faire apparaitre un genre de popup pour afficher mes affaires.
Donc
1/ est ce que le code que j'ai fait est à peu près correct ?
2/ est ce que quelqu'un peut orienter ma recherche un peu ?

Merci d'avance

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

Re: Newbie : écran 42'' tactile et rotation objet

Message par cayou66 » 14 Mai 2012 20:58

Ton code est bon,
tu rentres dans le test du Ray et tu affiches son nom correctement dans le log.
A ce niveau là tu peux faire ce que tu veux, libre à ton imagination, à partir du moment où tu as l'event.
Exemple, un code qui affiche un GUI.Label:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class raycaster : MonoBehaviour {

   private bool isObject = false;
   // Use this for initialization
   void Start () {
   
   }
   
   // Update is called once per frame
   void Update () {
      if(Input.GetMouseButtonDown(0)) {
         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         RaycastHit hit;
         if(Physics.Raycast(ray,out hit)) {
            Debug.Log(hit.transform.name);
            isObject = true;
         }
         else
         {
            isObject = false;
         }
      }
   
   }

   void OnGUI()
   {
      if(isObject)
      {
         GUI.Label(new Rect(0,0,100,50), "TEST");
      }
   }
}
C'est tout bête et ce n'est pas le résultat que tu souhaites, mais tu peux voir que je réagit en affichant ou non TEST selon le retour.

Répondre

Revenir vers « Unity le logiciel »