如何获得悬停的顶点世界空间位置?

问题描述

我正在使用编辑器工具,但是有问题。

如果我在SceneView中用鼠标悬停在网格顶点上,如何获得其在世界空间中的位置?

解决方法

在编辑脚本中,您需要从当前鼠标位置发出光线,通过HandleUtility进行转换,并处理hitInfo.collider是否包含请求的对象。

注意:如果您没有安装对撞机,我没有测试它是否可行

这也只有在SceneView获得焦点(单击它)后才起作用

void OnSceneGUI()
{
    Transform objectPreview;  //the transform to move
    Transform objectTouched = null; //the reference of the last object hit
    
    Ray worldRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
    
    RaycastHit hitInfo;
    
    if (Physics.Raycast(worldRay,out hitInfo,Mathf.Infinity))
    {
        if (hitInfo.collider.gameObject != null)
        {
            objectTouched = hitInfo.collider.gameObject;
            var yourPosition = objectTouched.transform.position;
        }
    }
}