本节要点
#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[网格]
根据指定的网格,生成碰撞体。
场景视图
关键代码
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<Transform>();
}
// 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<Rigidbody>();
m_Tranform=gameObject.GetComponent<Transform>();
//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);
}
}
}