Unity编辑器下如何获取物体(GameObject)的中心位置

注意仅能在编辑器下才能使用该方法

实现方式依靠UnityEditor.Tools提供的参数,具体实现如下:

  • 获取单个物体的中心坐标
csharp 复制代码
public static Vector3 GetGameObjectCenter(GameObject gameObject)
{
    // 选中物体
    Selection.activeObject = gameObject;

    // 记录当前Scene窗口的Tool Handle状态
    var curPivotMode = Tools.pivotMode;
    // 将Handle转成Center模式
    Tools.pivotMode = PivotMode.Center;
    // 获取Scene的View
    SceneView view = SceneView.lastActiveSceneView;
    // 聚焦并重绘场景
    view.Focus();
    view.Repaint();
    // 保存当前handle的坐标,即为center坐标
    var center = Tools.handlePosition;
    // 复原状态
    Selection.objects = null;
    Tools.pivotMode = curPivotMode;

    return center;
}
  • 获取一组物体的中心坐标
csharp 复制代码
public static Vector3 GetGameObjectsCenter(GameObject[] gameObjects)
{
    // 选中所有物体
    Selection.objects = gameObjects;

    // 记录当前Scene窗口的Tool Handle状态
    var curPivotMode = Tools.pivotMode;
    // 将Handle转成Center模式
    Tools.pivotMode = PivotMode.Center;
    // 获取Scene的View
    SceneView view = SceneView.lastActiveSceneView;
    // 聚焦并重绘场景
    view.Focus();
    view.Repaint();
    // 保存当前handle的坐标,即为center坐标
    var center = Tools.handlePosition;
    // 复原状态
    Selection.objects = null;
    Tools.pivotMode = curPivotMode;

    return center;
}
相关推荐
mxwin8 小时前
Unity URP 法线贴图色彩空间、编码与解码
unity·游戏引擎·贴图·shader
玖玥拾10 小时前
Cocos学习笔记:项目框架搭建与异步加载进度
游戏引擎·cocos2d
mxwin11 小时前
Unity Shader URP:将法线可视化,便于调试
unity·游戏引擎·shader
蓝黑墨水11 小时前
unity相关链接
unity·游戏引擎
mxwin12 小时前
Unity Shader 法线贴图的七种错误用法
unity·游戏引擎·贴图·shader
mxwin14 小时前
Unity URP 切线空间详解
unity·游戏引擎·shader
睡一觉就好了。18 小时前
vim基础操作
linux·编辑器·vim
caimouse20 小时前
Godot Engine 最新版官方文档(简体中文完整翻译 & 精简梳理)
游戏引擎·godot
elirlove120 小时前
打造属于自己的网页工匠台:HTML在线编辑器技术深度解析
前端·编辑器·html
Tairitsu_H21 小时前
告别默认Vim:Linux下轻松配置Vim开发环境
linux·编辑器·vim·配置