http://blog.csdn.net/linxinfa/article/details/46506261 转载自林新发
//这个类全是静态方法,所已你直接调用就好了,不会和mono起冲突
public class AroundCollider {//父物体
private static GameObject s_aroundCols;
//我们创建的边的长度
private static float m_sideLength = 60f;
//我们创建的碰撞体的厚度是多少
private static float m_widthlength = .05f;
//由于是以摄像机为中心创建的,所以为了让物体呈现在摄像机内,我们需要偏移一下
private static Vector3 m_sceneOffest = new Vector3(0, 0, 30);
//创建6个碰撞面
public static void CreateAroundColliders()
{
//如果没有根节点,我们创建一个根节点
if (s_aroundCols != null) return;
s_aroundCols = new GameObject("aroundCols");
s_aroundCols.transform.localScale = Vector3.one;
s_aroundCols.transform.localEulerAngles = Vector3.zero;
//分别设置模型的6个中心点,上下左右前后,这个将来要作为碰撞器的中心点,在z轴为3米处的位置开始绘制,可以很方便的处理正交摄像机,但是处理3D摄像机只能在那个纵深绘制出来
Vector3 top = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2f, Screen.height, 3f));
Vector3 bottom = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2f, 0f, 3f));
Vector3 left = Camera.main.ScreenToWorldPoint(new Vector3(0f, Screen.height / 2f, 3f));
Vector3 right = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height / 2f, 3f));
Vector3 minDepth = new Vector3(0, 0, 10f);
Vector3 maxDepth = new Vector3(0, 0, -20f);
float width = Vector3.Distance(left, right);
float height = Vector3.Distance(bottom, top);
PhysicMaterial pmat = new PhysicMaterial();
pmat.dynamicFriction = 0f; //动摩擦力//
pmat.staticFriction = 0f; //静摩擦力//
pmat.bounciness = 1f; //弹力//
pmat.frictionCombine = PhysicMaterialCombine.Maximum; //接触物体之间的摩擦力计算//
pmat.bounceCombine = PhysicMaterialCombine.Maximum; //接触物体之间的弹力计算//
//创建6个盒式碰撞器
createOnCollider("top", s_aroundCols.transform, Vector3.zero, top, new Vector3(width, m_widthlength, m_sideLength), pmat);
createOnCollider("bottom", s_aroundCols.transform, Vector3.zero, bottom, new Vector3(width, m_widthlength, m_sideLength), pmat);
createOnCollider("left", s_aroundCols.transform, Vector3.zero, left, new Vector3(m_widthlength, height, m_sideLength), pmat);
createOnCollider("right", s_aroundCols.transform, Vector3.zero, right, new Vector3(m_widthlength, height, m_sideLength), pmat);
createOnCollider("minDepth", s_aroundCols.transform, Vector3.zero, minDepth, new Vector3(200f,100f, .05f), pmat);
createOnCollider("maxDepth", s_aroundCols.transform, Vector3.zero, maxDepth, new Vector3(200f,100f,.05f), pmat);
//在创建所有的子物体之后将父物体的偏移设置一下
s_aroundCols.transform.position = m_sceneOffest;
}
//创建一个碰撞器
/// <summary>
///
/// </summary>
/// <param name="name">名字</param>
/// <param name="parent">父亲</param>
/// <param name="pos">这个碰撞体的坐标</param>
/// <param name="center">中心点</param>
/// <param name="size">这个碰撞器的尺寸</param>
/// <param name="mat">物理材质</param>
private static void createOnCollider(string name, Transform parent, Vector3 pos, Vector3 center, Vector3 size, PhysicMaterial mat)
{
Debug.Log("pos" + pos);
GameObject col = new GameObject(name);
col.transform.position = pos;
col.transform.parent = parent;
BoxCollider box = col.AddComponent<BoxCollider>();
box.center = center;
box.size = size;
box.material = mat;
}
}