激活或者禁用当前选中的物体(们)
在开发时,常用的一个操作就是激活或者禁用当前的物体,下面的代码可以实现这个功能(原博好像是在 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;
}
网友评论