本文章是關(guān)于Unity3D官方Demo(Roll-A-Ball)的知識點總結(jié)。
移動角色:
-
FixedUpdate
只在有關(guān)物理計算時調(diào)用,所以有關(guān)物理效果的代碼寫在這里 -
Input.GetAxis
:根據(jù)坐標軸名稱返回虛擬坐標系中的值,范圍在 -1 與 1 之間鳞骤。有過渡效果 - 我們通過給角色施加力來移動角色败匹。我們首先需要獲取 Rigidbody 組件早像,然后調(diào)用
AddForce
方法來施加力。AddForce
方法參數(shù)為一個Vector3
類型變量 -
Time.deltaTime
:以秒計算失受,完成最后一幀的時間(只讀)讶泰。我們可以使用Time.deltaTime
使移動更加平滑
// 實例代碼
void FixedUpdate(){
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal , 0.0f, moveVertical ); // 因為只在一個平面上移動,所以y設(shè)置為0.0f
GetComponent<Rigidbody>().AddForce(movement* speed*Time.deltaTime);
}
移動攝像機:
- 將 Camera 的父節(jié)點設(shè)置為角色拂到,這樣當(dāng)角色移動時痪署,Camera 也會跟著移動,但角色旋轉(zhuǎn)時兄旬,Camera 也會跟著旋轉(zhuǎn)狼犯,不符合需求
- 一般情況下余寥,我們希望 Camera 以一個相對的距離跟隨角色移動,但不會跟著角色旋轉(zhuǎn)悯森。那么宋舷,我們最好使用代碼進行控制。
-
LateUpdate
:LateUpdate
是在所有Update
函數(shù)調(diào)用后被調(diào)用瓢姻。這可用于調(diào)整腳本執(zhí)行順序祝蝠。例如:當(dāng)物體在Update
里移動時,跟隨物體的相機可以在LateUpdate
里實現(xiàn)幻碱。
// 相機控制腳本
public GameObject player; // 在編輯器里需要和對應(yīng)控件綁定绎狭。
private Vector3 offset;
void Start(){
offset = transform.position; // 獲取當(dāng)前坐標作為offset
}
void LateUpdate(){
transform.position = player.transform.position + offset; // 使相機與角色保持一個相對的距離
}
游戲區(qū)域及拾取物體:
- 這個游戲中我們的游戲區(qū)域是正方形,我們可以使用 Cube 作為 Wall 來限定游戲的區(qū)域
- 拾取物體 有多個時褥傍,我們可以使用 Prefab 來保存儡嘶,這樣當(dāng)我們修改 Prefab 時,所有的 拾取物體 都會修改
- 創(chuàng)建 Wall 與 拾取物體
- 我們可以修改 拾取物體 的 tag 來標志改物體恍风,這樣后續(xù)的碰撞檢測時我們就能區(qū)分拾取物體與其他
- 為了讓 拾取物體 更加顯眼蹦狂,我們可以使用
Rotate
旋轉(zhuǎn) 拾取物體
角色移動:
- 為了實現(xiàn)角色接觸到 拾取物體 時,拾取物體 消失朋贬。我們需要把 拾取物體 的碰撞器設(shè)置為觸發(fā)器凯楔。然后使用
OnTriggerEnter
方法來檢測 - 需要注意的是,我們把 拾取物體 改為了每幀旋轉(zhuǎn)锦募。計算碰撞時啼辣,靜態(tài)物體不會被影響,動態(tài)物體會被影響御滩。物理引擎有"碰撞器"重疊發(fā)生時鸥拧,物理引擎還在計算碰撞器體積并追蹤碰撞器的重疊,但不會在碰撞重疊的物體上體現(xiàn)出來削解,因為這不叫碰撞富弦。所以我們使用觸發(fā)器的方法。
- 任何含有Rigidbody的組件會被當(dāng)作動態(tài)物體氛驮,反之則為靜態(tài)物體腕柜。
- 靜態(tài)物體不會移動,動態(tài)物體可以移動矫废,他們含有Rigidbody盏缤,標準的Rigidbody通過作用力移動,Kinematic Rigibody通過Transform移動蓖扑。
// 角色控制腳本
void OnTriggerEnter(Collider other){
if(other.gameObject.tag == "PickUp"){ // 這個PickUp 是我們拾取物體的 tag
other.gameObject.SetActive("false");
}
}
發(fā)布:
- “File -> Build Settings”,選擇需要發(fā)布的平臺唉铜,添加需要包含的場景,點擊 build 就完成了