【问题标题】:How can i get mouse position click on terrain?如何在地形上获得鼠标位置?
【发布时间】:2017-09-09 05:30:29
【问题描述】:

脚本附加到的相机高于地形从顶部看地形。现在,当我单击鼠标时,我得到了列表点。但现在我想做到这一点,当我点击鼠标时,它会给我在地形上的位置,包括山丘等高地。

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
  • 谢谢它的工作。

标签: c# unity3d unity5


【解决方案1】:

您可以使用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 文档Physics Raycast 的页面。

如果您想了解有关 Raycasting 的更多信息,我建议您观看 official Unity video 关于该主题的更详细信息,您将在游戏开发中大量使用它,因此值得您尽可能多地学习在继续前进之前可以考虑一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    相关资源
    最近更新 更多