Newbie : écran 42'' tactile et rotation objet

Toutes les questions et les news sur Unity

Modérateur: LudlowFx

Newbie : écran 42'' tactile et rotation objet

Messagepar 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
kangt
 
Messages: 9
Inscription: 11 Mai 2012, 23:09

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

Messagepar 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);
    }
}
Subaeria Suivez le jeu sur lequel je travaille en ce moment !
Blog (tutoriels UI, trucs et astuces, news)
Avatar de l’utilisateur
cayou66
 
Messages: 6128
Inscription: 30 Juin 2011, 14:45
Localisation: Montréal

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

Messagepar 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
kangt
 
Messages: 9
Inscription: 11 Mai 2012, 23:09

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

Messagepar 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);
}
Subaeria Suivez le jeu sur lequel je travaille en ce moment !
Blog (tutoriels UI, trucs et astuces, news)
Avatar de l’utilisateur
cayou66
 
Messages: 6128
Inscription: 30 Juin 2011, 14:45
Localisation: Montréal

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

Messagepar 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 !
kangt
 
Messages: 9
Inscription: 11 Mai 2012, 23:09

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

Messagepar 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
Subaeria Suivez le jeu sur lequel je travaille en ce moment !
Blog (tutoriels UI, trucs et astuces, news)
Avatar de l’utilisateur
cayou66
 
Messages: 6128
Inscription: 30 Juin 2011, 14:45
Localisation: Montréal

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

Messagepar 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
kangt
 
Messages: 9
Inscription: 11 Mai 2012, 23:09

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

Messagepar cayou66 » 13 Mai 2012, 18:01

Bonne chance ;)
Subaeria Suivez le jeu sur lequel je travaille en ce moment !
Blog (tutoriels UI, trucs et astuces, news)
Avatar de l’utilisateur
cayou66
 
Messages: 6128
Inscription: 30 Juin 2011, 14:45
Localisation: Montréal

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

Messagepar 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
kangt
 
Messages: 9
Inscription: 11 Mai 2012, 23:09

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

Messagepar 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.
Subaeria Suivez le jeu sur lequel je travaille en ce moment !
Blog (tutoriels UI, trucs et astuces, news)
Avatar de l’utilisateur
cayou66
 
Messages: 6128
Inscription: 30 Juin 2011, 14:45
Localisation: Montréal

Suivante


Retourner vers Unity le logiciel




Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Traduction par: phpBB-fr.com