2017-09-08 1 views
0

L'appareil photo auquel le script est attaché est situé au-dessus du terrain. Et maintenant, quand je clique sur la souris, je reçois des points de liste. Mais maintenant je veux faire cela quand je clique sur la souris cela me donnera la position sur le terrain, y compris les hauts lieux du terrain comme les collines.Comment puis-je obtenir la position de la souris cliquer sur le terrain?

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class GetMousePosition : MonoBehaviour 
{ 
    private bool isMousePressed; 
    private List<Vector3> pointsList; 
    private Vector3 mousePos; 

    // Use this for initialization 
    void Start() 
    { 
     isMousePressed = false; 
     pointsList = new List<Vector3>(); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (Input.GetMouseButtonDown(0)) 
     { 
      isMousePressed = true; 
      pointsList.RemoveRange(0, pointsList.Count); 
     } 
     else if (Input.GetMouseButtonUp(0)) 
     { 
      isMousePressed = false; 
     } 

     if (isMousePressed) 
     {    
      mousePos = GetComponent<Camera>().ScreenToWorldPoint(Input.mousePosition); 
      mousePos.z = 0; 
      if (!pointsList.Contains(mousePos)) 
      { 
       pointsList.Add(mousePos); 
      } 
     } 
    } 
} 

Top View Camera

+3

Le terme que vous voulez rechercher est * raycast *. – Octopus

+0

Merci pour le travail. –

Répondre

1

Vous devez faire cela avec un Raycast, vous pouvez jeter un rayon de la position de la caméra sur le terrain et obtenir tous les détails que vous désirez utiliser les données que vous revenez.

Donc dans votre cas si vous voulez ajouter le point de succès à la liste que vous feriez quelque chose comme ça

float distance = 100f; 

// Update is called once per frame 
void Update() 
{ 
    if (Input.GetMouseButtonDown(0)) 
    { 
     isMousePressed = true; 
     pointsList.RemoveRange(0, pointsList.Count); 
    } 
    else if (Input.GetMouseButtonUp(0)) 
    { 
     isMousePressed = false; 
    } 

    if (isMousePressed) 
    {    
     Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
     RaycastHit hit; 

     if (Physics.Raycast (ray, out hit, distance)) 
     { 
      if(!pointsList.Contains(hit.point) 
      { 
       pointsList.Add(hit.point); 
      }   
     }  
    } 
} 

Il convient de noter dans l'exemple ci-dessus Physics.Raycast a beaucoup qui vous permettent surcharges personnaliser le déclenchement du rayon. Vous pouvez également utiliser les variables hit et ray pour obtenir beaucoup plus d'informations telles que le collisionneur spécifique touché ainsi que la position du monde d'origine du rayon, plus d'informations sur la façon de le faire peuvent être trouvées dans la documentation de l'API Unity page pour le Physics Raycast. Si vous souhaitez en savoir plus sur Raycasting, je vous recommande de regarder le official Unity video sur le sujet qui va dans les détails, vous l'utiliserez beaucoup dans le développement de jeu, donc ça vaut le coup d'apprendre autant que possible. à ce sujet avant d'aller de l'avant.