Unity3D物理组件之碰撞体(十)

本节要点

#1.碰撞体简介

1.碰撞体

使用刚体移动的物体,与场景中其他的物体相碰撞:

其实是碰撞的目标物体的“碰撞体”组件,也就是 Collider。

另外和目标物体碰撞的,是我们移动的物体的自身的“碰撞体”组件。

碰撞体可以理解为我们的模型的“外骨骼”。

模型只要加了刚体,就必须要加碰撞体,否则没有意义。

2.给物体添加碰撞体组件

选中游戏物体-->菜单 Component-->Physics-->Xxxx Collider

(我们在 Unity 中创建的基本模型,自身都带有碰撞体组件)

#2.Box Collider

1.简介

盒子碰撞体,形状是立方体形,用于包裹类似“立方体”的模型,比如:盒子,

箱子,门,房子等。

2.组件属性

Center[中心点]

设置 Box Collider 的中心点。
Size[大小]

设置 Box Collider 的大小。



#3.Sphere Collider

1.简介

球形碰撞体,形状是球形,用于包裹类似“球形”的模型。

2.组件属性

Radius[半径]

设置 Sphere Collider 的大小。

#4.Capsule Collider

1.简介

胶囊碰撞体,形状是胶囊状,用于包裹“胶囊形”的模型。

2.组件属性

Height[高度]

设置 Capsule Collider 的高度。

Direction[方向]

设置 Capsule Collider 的高度方向(轴向)。

#5.Mesh Collider

1.简介

网格碰撞体,用于包裹复杂结构的模型。

2.组件属性

Mesh[网格]

根据指定的网格,生成碰撞体。

场景视图

Unity3D物理组件之碰撞体(十)_第1张图片

关键代码

InputTest

// Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {

        //键盘的值
        //按下A键持续返回true
        if (Input.GetKey(KeyCode.A))
        {
            Debug.Log("Get...........A");
        }
        //按下A键瞬间返回true
        if (Input.GetKeyDown(KeyCode.A))
        {
            Debug.Log("Getkeydown...........A Down!");
        }
        //松开A键瞬间返回true
        if (Input.GetKeyUp(KeyCode.A))
        {
            Debug.Log("Getkeyup..............A Up!");
        }


        //鼠标的值
        //获取鼠标的按键,持续返回true
        if (Input.GetMouseButton(0))
        {
            Debug.Log("Mouse Left");
        }


        //点击鼠标按键瞬间返回true
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("Left Down!");
        }

        //松开鼠标瞬间返回true
        if (Input.GetMouseButtonUp(0))
        {
            Debug.Log("Left Up!");
        }
    }
}

StudentMove

public class StudentMove : MonoBehaviour {

    private Transform m_Transform;

    // Use this for initialization
    void Start () {

        //获取相应组件的引用,声明同类型字段去接收
        m_Transform=gameObject.GetComponent();
    }
    
    // Update is called once per frame
    void Update () {
    
        //移动物体位置的关键语句
      //  m_Transform.Translate(Vector3.forward*0.1f,Space.World);
        //参数1:Vector3移动物体的三维变量(枚举类型),表示x,y,z;Space参数2:移动物体的坐标系(枚举类型)自身坐标系或世界坐标系
        //0.1f 表示将当前速度下调到原来十分之一;切记加上f

        //获取相应键控制方向;w a s d
        if (Input.GetKey(KeyCode.W))
        {
            m_Transform.Translate(Vector3.forward*0.1f,Space.World);//往前
        }

        if (Input.GetKey(KeyCode.S))
        {
            m_Transform.Translate(Vector3.back * 0.1f, Space.World);//向后
        }

        if (Input.GetKey(KeyCode.A))
        {
            m_Transform.Translate(Vector3.left * 0.1f, Space.World);//向左
        }

        if (Input.GetKey(KeyCode.D))
        {
            m_Transform.Translate(Vector3.right * 0.1f, Space.World);//向右
        }


    
    }
}

RigidbodyMove

public class RigidbodyMove: MonoBehaviour {


    private Rigidbody m_Rigidbody;
    private Transform m_Tranform;
    // Use this for initialization
    void Start () {
        m_Rigidbody=gameObject.GetComponent();
        m_Tranform=gameObject.GetComponent();
        //Test
       // m_Rigidbody.MovePosition(m_Tranform.position+ Vector3.forward*10);
    
    }
    
    // Update is called once per frame
    void Update () {
        //向前
        if (Input.GetKey(KeyCode.W))
        {
            m_Rigidbody.MovePosition(m_Tranform.position+Vector3.forward*0.1f);
        }

        if (Input.GetKey(KeyCode.S))
        {
            m_Rigidbody.MovePosition(m_Tranform.position + Vector3.back * 0.1f);
        }



        if (Input.GetKey(KeyCode.A))
        {
            m_Rigidbody.MovePosition(m_Tranform.position + Vector3.left * 0.1f);
        }


        if (Input.GetKey(KeyCode.D))
        {
            m_Rigidbody.MovePosition(m_Tranform.position + Vector3.right * 0.1f);
        }




    
    }
}

小结

Unity3D物理组件之碰撞体(十)_第2张图片
外骨骼(碰撞器).jpg
Unity3D物理组件之碰撞体(十)_第3张图片
刚体和碰撞器.png

你可能感兴趣的:(Unity3D物理组件之碰撞体(十))