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;
}
相关推荐
老朱佩琪!5 小时前
Unity备忘录模式
java·unity·备忘录模式
一帘多啦A梦6 小时前
解决unity2022.3.x版本项目使用vs无法生成解决方案的问题
unity·vs
咬人喵喵7 小时前
18 类年终总结核心 SVG 交互方案拆解
前端·css·编辑器·交互·svg
若数7 小时前
vscode如何打开多个标签
ide·vscode·编辑器
weixin_424294678 小时前
Unity LocalPosition 和 Position 的区别?还有其他的Position 没?
unity·游戏引擎
许商8 小时前
【stm32】cmake构建vscode开发环境(复杂大型项目)
ide·vscode·编辑器
UX20179 小时前
Git LFS 管理 Unity 大文件
git·unity
厚国兄9 小时前
esp32+vscode,在vscode底部不显示esp32的命令图标问题解决
ide·vscode·编辑器
咬人喵喵9 小时前
告别无脑 <div>:HTML 语义化标签入门
前端·css·编辑器·html·svg
nnsix9 小时前
Unity WebGL端调用Windows窗口选择文件
unity·游戏引擎·webgl