Camera.main.ScreenToWorldPoint(Input.mousePosition)总是返回摄像机位置,无论我点击哪里都无关紧要

问题描述 投票:0回答:1

我正在尝试创建一个脚本,将mouseclick位置转换为GridLayout中的位置。我试图使用Camera.main.ScreenToWorldPoint(),但是如果我使用固定在播放器上的静态相机或相机,它的相机的返回坐标,而不是点击的点,不会满足。我将此脚本附加到标准统一资产的CharacterRobotBoy预制件中。

using UnityEngine;

public class Position : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonUp(0))
        {
            Vector3 pz = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Debug.Log("camera:"+pz);
            pz.z = 0;
            GridLayout gridLayout = transform.parent.GetComponentInParent<GridLayout>();
            Vector3Int cellPosition = gridLayout.WorldToCell(pz);
            Debug.Log("cell position:"+cellPosition);
        }
    }
}

我的代码可以针对任务修复,还是针对该问题有不同的解决方案。谢谢你的帮助。 PS:我是团结的新手。

c# unity3d 2d
1个回答
2
投票

假设你有一个平面和一个从上面看它的相机。将屏幕视为摄像机的镜头,将光标视为走过它的小蚂蚁。如果我没记错的话,ScreenToWorldPoint会在世界空间中返回蚂蚁的位置,这是天空中的某个地方。通过设置z:= 0,无论光标位于何处,都会在相机正下方得到一个点。

你应该做的是通过蚂蚁从摄像机视图的中心投射光线,并将其与飞机相撞。碰撞点就是你要找的东西。它可以通过ScreenPointToRay方法完成。

你应该看看Brackeys RPG tutorial,他做了类似的事情。

希望能帮助到你 :)

© www.soinside.com 2019 - 2024. All rights reserved.