美文网首页
编辑器工具:激活物体快捷键 And 校正模型中心位置

编辑器工具:激活物体快捷键 And 校正模型中心位置

作者: 烂醉花间dlitf | 来源:发表于2021-01-08 15:30 被阅读0次

    激活或者禁用当前选中的物体(们)

    在开发时,常用的一个操作就是激活或者禁用当前的物体,下面的代码可以实现这个功能(原博好像是在 CSDN)

        public const string KeyName = "我的工具/激活或者关闭选中物体 _s";
    
        //根据当前有没有选中物体来判断可否用快捷键
        [MenuItem(KeyName, true)]
        static bool ValidateSelectEnableDisable()
        {
            GameObject[] go = GetSelectedGameObjects() as GameObject[];
    
            if (go == null || go.Length == 0)
                return false;
            return true;
        }
    
        [MenuItem(KeyName)]
        static void SeletEnable()
        {
            bool enable = false;
            GameObject[] gos = GetSelectedGameObjects() as GameObject[];
    
            foreach (GameObject go in gos)
            {
                enable = !go.activeInHierarchy;
                EnableGameObject(go, enable);
            }
        }
    
        //获得选中的物体
        static GameObject[] GetSelectedGameObjects()
        {
            return Selection.gameObjects;
        }
    
        //激活或关闭当前选中物体
        public static void EnableGameObject(GameObject parent, bool enable)
        {
            parent.gameObject.SetActive(enable);
        }
    

    矫正模型中心点

    有时候模型可能模型拿过来的时候中心点不在模型中间,这个时候通常是在上面新建一个父物体,然后再靠眼神把模型中心点和刚刚新建的空物体原点对上,这样如果是对一个车轮胎这样的东西来说,就很灾难,因为车轮胎是需要旋转的,如果中心点对不准就会十分鬼畜,所以下面的方法,可以直接选中一个物体之后,点一下就会自动新建一个空物体并且处于模型的中心点位置。

    • 只能选择一个物体
    • 但这个物体下有多少个 MeshFilter 都没关系
        /// <summary>
        /// 矫正模型的中心位置
        /// </summary>
        [MenuItem("我的工具/校正模型的中心位置")]
        public static void CorrectCenterPosition()
        {
            GameObject[] selections = Selection.gameObjects;
            if (selections.Length > 1)
            {
                Debug.LogError("矫正模型中心只能选择一个物体");
                return;
            }
            MeshFilter[] meshs = selections[0].GetComponentsInChildren<MeshFilter>(true);
            Vector3 center = Vector3.zero;
            foreach(MeshFilter f in meshs)
            {
                //center += f.mesh.bounds.center;
                Vector3 c = f.sharedMesh.bounds.center;
                center += f.transform.TransformPoint(c);
            }
            center /= meshs.Length;
            GameObject g = new GameObject(selections[0].name);
            g.transform.parent = selections[0].transform.parent;
            g.transform.position = center;
            selections[0].transform.parent = g.transform;
        }
    

    相关文章

      网友评论

          本文标题:编辑器工具:激活物体快捷键 And 校正模型中心位置

          本文链接:https://www.haomeiwen.com/subject/ewhfaktx.html