[英]How can i get mouse position click on 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);
}
}
}
}
您可以使用Raycast進行此操作,可以將射線從相機位置投射到地形,然后使用返回的數據獲得所需的所有細節。
因此,在您的情況下,如果您要將命中點添加到列表中,則可以執行以下操作
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);
}
}
}
}
在上面的示例中應注意,Physics.Raycast具有許多重載,可讓您自定義射線的發射方式。 您還可以使用hit和ray變量獲取更多信息,例如其命中的特定對撞機以及射線所處的世界位置,以及有關如何執行此操作的更多信息,請參見Unity API文檔。 物理Raycast的頁面。
如果您想了解有關Raycasting的更多信息,建議您觀看有關該主題的Unity官方視頻 ,該視頻將進行更詳細的介紹,您將在游戲開發中大量使用它,因此值得您盡可能多地學習。在繼續前進之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.