本節(jié)要點(diǎn)
#1.碰撞體簡(jiǎn)介
1.碰撞體
使用剛體移動(dòng)的物體高诺,與場(chǎng)景中其他的物體相碰撞:
其實(shí)是碰撞的目標(biāo)物體的“碰撞體”組件,也就是 Collider。
另外和目標(biāo)物體碰撞的梳虽,是我們移動(dòng)的物體的自身的“碰撞體”組件岖圈。
碰撞體可以理解為我們的模型的“外骨骼”魂挂。
模型只要加了剛體粹断,就必須要加碰撞體派敷,否則沒(méi)有意義癌压。
2.給物體添加碰撞體組件
選中游戲物體-->菜單 Component-->Physics-->Xxxx Collider
(我們?cè)?Unity 中創(chuàng)建的基本模型仰泻,自身都帶有碰撞體組件)
#2.Box Collider
1.簡(jiǎn)介
盒子碰撞體,形狀是立方體形滩届,用于包裹類似“立方體”的模型集侯,比如:盒子,
箱子帜消,門棠枉,房子等。
2.組件屬性
Center[中心點(diǎn)]
設(shè)置 Box Collider 的中心點(diǎn)泡挺。
Size[大小]
設(shè)置 Box Collider 的大小辈讶。
#3.Sphere Collider
1.簡(jiǎn)介
球形碰撞體,形狀是球形娄猫,用于包裹類似“球形”的模型贱除。
2.組件屬性
Radius[半徑]
設(shè)置 Sphere Collider 的大小咳促。
#4.Capsule Collider
1.簡(jiǎn)介
膠囊碰撞體,形狀是膠囊狀勘伺,用于包裹“膠囊形”的模型跪腹。
2.組件屬性
Height[高度]
設(shè)置 Capsule Collider 的高度。
Direction[方向]
設(shè)置 Capsule Collider 的高度方向(軸向)飞醉。
#5.Mesh Collider
1.簡(jiǎn)介
網(wǎng)格碰撞體冲茸,用于包裹復(fù)雜結(jié)構(gòu)的模型。
2.組件屬性
Mesh[網(wǎng)格]
根據(jù)指定的網(wǎng)格缅帘,生成碰撞體轴术。
場(chǎng)景視圖
關(guān)鍵代碼
InputTest
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//鍵盤的值
//按下A鍵持續(xù)返回true
if (Input.GetKey(KeyCode.A))
{
Debug.Log("Get...........A");
}
//按下A鍵瞬間返回true
if (Input.GetKeyDown(KeyCode.A))
{
Debug.Log("Getkeydown...........A Down!");
}
//松開(kāi)A鍵瞬間返回true
if (Input.GetKeyUp(KeyCode.A))
{
Debug.Log("Getkeyup..............A Up!");
}
//鼠標(biāo)的值
//獲取鼠標(biāo)的按鍵,持續(xù)返回true
if (Input.GetMouseButton(0))
{
Debug.Log("Mouse Left");
}
//點(diǎn)擊鼠標(biāo)按鍵瞬間返回true
if (Input.GetMouseButtonDown(0))
{
Debug.Log("Left Down!");
}
//松開(kāi)鼠標(biāo)瞬間返回true
if (Input.GetMouseButtonUp(0))
{
Debug.Log("Left Up!");
}
}
}
StudentMove
public class StudentMove : MonoBehaviour {
private Transform m_Transform;
// Use this for initialization
void Start () {
//獲取相應(yīng)組件的引用钦无,聲明同類型字段去接收
m_Transform=gameObject.GetComponent<Transform>();
}
// Update is called once per frame
void Update () {
//移動(dòng)物體位置的關(guān)鍵語(yǔ)句
// m_Transform.Translate(Vector3.forward*0.1f,Space.World);
//參數(shù)1:Vector3移動(dòng)物體的三維變量(枚舉類型),表示x逗栽,y,z失暂;Space參數(shù)2:移動(dòng)物體的坐標(biāo)系(枚舉類型)自身坐標(biāo)系或世界坐標(biāo)系
//0.1f 表示將當(dāng)前速度下調(diào)到原來(lái)十分之一彼宠;切記加上f
//獲取相應(yīng)鍵控制方向;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);
}
}
}
小結(jié)
外骨骼(碰撞器).jpg
剛體和碰撞器.png