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 小时前
Linux系统 C/C++编程基础——基于Qt的图形用户界面编程
linux·c语言·c++·经验分享·qt·学习·编辑器
千航@abc7 小时前
vim在末行模式下的删除功能
linux·编辑器·vim
江西理工大学小杨8 小时前
VScode连接远程Linux服务器环境配置
ide·vscode·编辑器
Xing201712 小时前
unity打包ios Xcode问题记录
unity·游戏引擎
莲动渔舟13 小时前
国产编辑器EverEdit - 命令窗口应用详解
编辑器·emeditor·everedit
梓懿lwh14 小时前
vim的介绍
linux·编辑器·vim
手捧向日葵的话语16 小时前
Linux下的编辑器 —— vim
linux·编辑器·vim
学游戏开发的16 小时前
UE求职Demo开发日志#8 强化前置条件完善,给物品加图标
游戏引擎
莲动渔舟16 小时前
国产编辑器EverEdit - 快捷目录
编辑器
小唐C++17 小时前
C++小病毒-1.0勒索
开发语言·c++·vscode·python·算法·c#·编辑器