阅读背景:

Unity绘制模型的内切长方体

来源:互联网 



using UnityEngine;
using System.Collections;

public class BoundUtil : MonoBehaviour
{
    private Vector3 min = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue);
    private Vector3 max = new Vector3(float.MinValue, float.MinValue, float.MinValue);
	// Use this for initialization
	void Start () {
        Search(transform, ref min, ref max);
	}
	
	// Update is called once per frame
	void Update () {
        DrawBound(min, max);
	}

    /// <summary>
    /// 递归计算所有子物体的范围
    /// </summary>
    /// <param name="tf">需要计算范围的模型变换</param>
    /// <param name="min"></param>
    /// <param name="max"></param>
    private void Search(Transform tf,ref Vector3 min,ref Vector3 max)
    {
        MeshFilter mFilter = tf.GetComponent<MeshFilter>();
        if (mFilter != null && mFilter.mesh != null)
        {
            Vector3 meshMax = mFilter.mesh.bounds.max + tf.position;
            if (meshMax.x > max.x) max.x = meshMax.x;
            if (meshMax.y > max.y) max.y = meshMax.y;
            if (meshMax.z > max.z) max.z = meshMax.z;

            Vector3 meshMin = mFilter.mesh.bounds.min + tf.position;
            if (meshMin.x < min.x) min.x = meshMin.x;
            if (meshMin.y < min.y) min.y = meshMin.y;
            if (meshMin.z < min.z) min.z = meshMin.z;
        }
        //递归遍历所有子物体
        for (int i = 0; i < tf.childCount; i++)
        {
            Search(tf.GetChild(i), ref min, ref max);
        }
    }

    /// <summary>
    /// 绘制一个3D边框
    /// </summary>
    /// <param name="min"></param>
    /// <param name="max"></param>
    private void DrawBound(Vector3 min,Vector3 max)
    {
        Debug.DrawLine(min, new Vector3(min.x, max.y, min.z), Color.red);
        Debug.DrawLine(min, new Vector3(max.x, min.y, min.z), Color.red);
        Debug.DrawLine(min, new Vector3(min.x, min.y, max.z), Color.red);
        Debug.DrawLine(max, new Vector3(min.x, max.y, max.z), Color.red);
        Debug.DrawLine(max, new Vector3(max.x, max.y, min.z), Color.red);
        Debug.DrawLine(max, new Vector3(max.x, min.y, max.z), Color.red);

        Debug.DrawLine(new Vector3(max.x, max.y, min.z), new Vector3(min.x, max.y, min.z), Color.red);
        Debug.DrawLine(new Vector3(max.x, max.y, min.z), new Vector3(max.x, min.y, min.z), Color.red);
        Debug.DrawLine(new Vector3(min.x, max.y, max.z), new Vector3(min.x, min.y, max.z), Color.red);
        Debug.DrawLine(new Vector3(min.x, min.y, max.z), new Vector3(max.x, min.y, max.z), Color.red);
        Debug.DrawLine(new Vector3(max.x, min.y, max.z), new Vector3(max.x, min.y, min.z), Color.red);
        Debug.DrawLine(new Vector3(min.x, max.y, min.z), new Vector3(min.x, max.y, max.z), Color.red);
    }
}
using UnityEngine;
using System.Collec



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: