问题描述
我有我的编辑器摄像头,我想在它所看的地方生成对象,以及在实例化基元时通过统一的方式完成。
解决方法
据我所知,您想通过场景查看摄像机针对穿过世界原点并将其放置在命中位置的全局XZ轴进行射线广播。
要查找“编辑者”或更佳的SceneView相机,您可以使用SceneView.camera
。
var camera = SceneView.camera;
然后使用Camera.ScreenPointToRay
例如从中创建光线如果您要考虑鼠标位置
var ray = camera.ScreenPointToRay(Input.mousePosition);
或者只是摄像机的Transform.forward
向量
var ray = new Ray(camera.transform.position,camera.transform.forward);
或者,如果您是从Editor.OnSceneGUI
内调用此电话,也可以使用HandleUtility.GUIPointToWorldRay
var ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
然后要对全局XZ平面进行射线广播,可以使用数学Plane
// Creates a XZ plane going through world origin
var plane = new Plane(Vector3.up,Vector3.zero);
然后您可以使用Plane.Raycast
来对它进行光线投射
if(plane.Raycast(ray,out var distance)
{
var hitPoint = ray.GetPoint(distance);
// Spawn your object and set its position to hitPoint
}
,
我找到了解决问题的方法,但是最后我不需要这样做。
回答您的问题:
请具体说明您要尝试实现的目标。在>哪个相机前产生?而且“在前面”有多远?
无论距离多远,我都需要在XZ平面和编辑器的观察相机的Raycast镜头的相交处实例化我的机器人Prefab。
是的,我设法使它像雨果在他先前的回答中所说的那样起作用。