public class GameEditorWindow : OdinEditorWindow
{
#region 窗口
[MenuItem("Tools/游戏编辑窗口")]
public static void OpenWindow()
{
GetWindow<GameEditorWindow >().Show();
}
/// <summary>
/// 窗口激活时调用
/// </summary>
private void OnEnable()
{
SceneView.duringSceneGui += OnSceneView; //注册场景视图刷新回调
}
/// <summary>
/// 窗口关闭时调用
/// </summary>
private void OnDisable()
{
SceneView.duringSceneGui -= OnSceneView; //移除场景视图刷新回调
}
/// <summary>
/// SceneView刷新回调
/// </summary>
/// <param name="sceneView"></param>
private void OnSceneView(SceneView sceneView)
{
//检测鼠标点击
if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
{
var mousePos = Event.current.mousePosition; //获取鼠标在SceneView中的屏幕位置
var ray = HandleUtility.GUIPointToWorldRay(mousePos); //生成屏幕坐标-->世界坐标的射线
RaycastHit hit; //定义射线检测结果结构体
if (Physics.Raycast(ray, out hit, float.MaxValue, layerMask)) //进行射线检测,layerMask是检测层级
{
var obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); //如果检测成功,创建一个球体。
obj.transform.position = hit.point; //把球体坐标设置为hit交点处。
}
}
}
}
Unity 编辑器状态下从鼠标位置发射射线,获取射线与物品交互位置
最新推荐文章于 2024-07-08 20:25:41 发布