2016-03-25 4 views
0

J'ai une petite ville maillage et un modèle d'appartement 3d. J'ajoute le mesh à ma scène et place le modèle 3d sur le mesh. J'essaie de gérer le clic de souris uniquement sur le modèle 3D. J'utilise le code ci-dessous. Mais je clique n'importe où sur l'écran, il définit comme sound = truePoignée de souris cliquez sur un objet de jeu - Unity3d

J'ajoute un collecteur de mailles au gameobject modèle 3D.

if (Input.GetMouseButtonDown (0)) { 
      Plane p = new Plane (Camera.main.transform.forward , transform.position); 
      Ray r = Camera.main.ScreenPointToRay (Input.mousePosition); 
      float d; 
      if(p.Raycast (r, out d)) { 
       sound = true; 
} 

Comment puis-je le résoudre?

Répondre

0

Vous pouvez vérifier l'étiquette/le nom de l'objet du jeu. vous devez utiliser comme ça:

void Update() 
{ 
    if (Input.GetMouseButtonDown (0)) { 

     Plane p = new Plane (Camera.main.transform.forward , transform.position); 
     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
     RaycastHit hit; 

     if (Physics.Raycast(ray, out hit, 100)) 
     { 
      //Choose one of them below!!! 

      /// Name Comparison 
      if(hit.collider.gameObject.name.equals("NameOfTheObject")){ 
       ///Do Logic 
      } 

      //Tag Comparison 
      if(hit.collider.gameObject.CompareTag("TagOfTheObject")){ 
       ///Do Logic 
      } 
     } 
    } 
} 
+0

Comment faire la même tâche avec Plane.Raycast? Il ne nécessite aucun collisionneur. Et ça ne consiste pas en un coup. – zumma

+0

@zumma A en juger par votre code, il semble que vous créez un plan que vous frappez toujours. Essayez de changer les valeurs du plan –

+0

@zumma quelle est la valeur d? S'il vous plaît écrire Debug.Log (d); après si déclaration. –