上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

Unity 中 Pivot 与 Center,重置模型物体的轴心为中心

guduadmin281月前

文章目录

  • 1. 概念
  • 2. 动态计算正确的模型中心点Center
  • 3. 重置模型物体的轴心为中心

    1. 概念

    在 Unity 面板的左上角有两个按钮,在本文中主要研究 Pivot/Center

    Unity 中 Pivot 与 Center,重置模型物体的轴心为中心,在这里插入图片描述,第1张

    • Pivot(轴心):模型的真实位置,是由建模软件设定的可在模型软件中更改,如果选中了场景中多个物体则坐标是第一个选择的Pivot坐标,transform.position 获取的就是 pivot ,是模型旋转、缩放的参考点

      对于Unity中可创建的2D,3D资源是不能更改轴心点的,对于导入的资源可以进行修改

      • 2D:可以在Project->选择2D精灵图片->Import Settings->Pivot
      • 3D:可以在模型软件中更改Pivot的坐标,也就是更改模型的轴

      Center(中心):由Unity根据模型的 mesh 计算出来的中心位置,是选择的所有物体的物理上的中心,如果选择了多个物体则坐标是所有选择的物体的中心,getComponent().bounds.center 获取的是center坐标

      2. 动态计算正确的模型中心点Center

      using UnityEngine;
       
      public class Util : MonoBehaviour
      {
          /// 
          /// 重新计算中心点
          /// 
          /// 要重新计算中心点的游戏物体
          public static void RecalculateCenter(GameObject go)
          {
              if (go.GetComponent() == null)
              {
                  Debug.LogWarning("游戏物体身上没有MeshRenderer组件");
                  return;
              }
              Vector3 center = go.GetComponent().bounds.center;
              GameObject newGo = new GameObject(go.name);
              newGo.transform.position = center;
              go.transform.SetParent(newGo.transform);
          }
      }
      

      3. 重置模型物体的轴心为中心

      遇到的问题:因为在Unity开发中经常会遇到模型物体的轴心点偏离模型很远的情况,导致我们在操作位置,旋转,缩放时很麻烦,我们很希望轴心点是物体模型的网格中心

      Unity 中 Pivot 与 Center,重置模型物体的轴心为中心,在这里插入图片描述,第2张

      解决方法:

      1.在建模软件(3dmax,maya等)里面设置后导出.个人觉得麻烦…

      2.自己创建一个空物体拖拽至目标模型的网格中心,然后将目标模型物体拖拽入创建的空物体中,来达到重置轴心的目的(但将空物体拖拽至目标模型的网格中心还是有些困难的,主要是得自己用眼色去判断…)

      3.写脚本(最方便)

      using UnityEngine;
      using UnityEditor;
      public class MyTool : ScriptableObject
      {
          //重置模型的轴心为中心
          [MenuItem("Tools/MyTool/ResetPivot")]
          static void ResetPivot()
          {
              //获取选中的物体
              GameObject target = Selection.activeGameObject;
              string dialogTitle = "Tools/MyTool/ResetPivot";
              if (target == null)
              {
                  EditorUtility.DisplayDialog(dialogTitle, "没有选中需要重置轴心的物体!!!", "确定");
                  return;
              }
              //获取目标物体下所有网格渲染
              MeshRenderer[] meshRenderers = target.GetComponentsInChildren(true);
              if (meshRenderers.Length == 0)
              {
                  EditorUtility.DisplayDialog(dialogTitle, "选中的物体不是有效模型物体!!!", "确定");
                  return;
              }
              //将所有的网格渲染的边界进行合并
              Bounds centerBounds = meshRenderers[0].bounds;
              for (int i=1;i
                  centerBounds.Encapsulate(meshRenderers[i].bounds);
              }
              //创建目标的父物体
              Transform targetParent = new GameObject(target.name + "-Parent").transform;
              
              //如果目标原来已有父物体,则将创建目标父物体的父物体设为原父物体;
              Transform originalParent = target.transform.parent;
              if (originalParent != null)
              {
                  targetParent.SetParent(originalParent);
              }
              //设置目标父物体的位置为合并后的网格渲染边界中心
              targetParent.position = centerBounds.center;
              //设置目标物体的父物体
              target.transform.parent = targetParent;
              Selection.activeGameObject = targetParent.gameObject;
              EditorUtility.DisplayDialog(dialogTitle, "重置模型物体的轴心完成!", "确定");
          }
      }
      

      使用方法:

      选择需要重置轴心的的物体,然后使用上方的Tools/MyTool下的的ResetPivot按钮就好了

      Unity 中 Pivot 与 Center,重置模型物体的轴心为中心,在这里插入图片描述,第3张

网友评论

搜索
最新文章
热门文章
热门标签
 
 男人梦见牙掉了是什么意思  海南局王解梦  女人梦见摘柿子好不好