Camera---创建一个等同屏幕碰撞器

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值