我正在尝试创建一个脚本,将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:我是团结的新手。
假设你有一个平面和一个从上面看它的相机。将屏幕视为摄像机的镜头,将光标视为走过它的小蚂蚁。如果我没记错的话,ScreenToWorldPoint会在世界空间中返回蚂蚁的位置,这是天空中的某个地方。通过设置z:= 0,无论光标位于何处,都会在相机正下方得到一个点。
你应该做的是通过蚂蚁从摄像机视图的中心投射光线,并将其与飞机相撞。碰撞点就是你要找的东西。它可以通过ScreenPointToRay方法完成。
你应该看看Brackeys RPG tutorial,他做了类似的事情。
希望能帮助到你 :)