本節(jié)要點
1.金錢副本細節(jié)完善
1.寶箱自動掉落
給寶箱預制體添加剛體組件即可。
2.實現(xiàn)按鍵寶箱批量掉落
①將實例化生成寶箱的代碼單獨封裝成一個函數(shù);
②使用 for 循環(huán),批量生成寶箱。
3.寶箱自動掉落
現(xiàn)在我們是通過按下某鍵,然后程序調(diào)用“生成寶箱”的函數(shù),來實現(xiàn)功能。
在真正的游戲中,這個“生成寶箱”的函數(shù),也是需要由程序自動調(diào)用的。
那么如何實現(xiàn)那??
2.Invoke 函數(shù)
1.Invoke 函數(shù)代碼
Invoke(string,float):多少秒后執(zhí)行某個函數(shù)[只會調(diào)用一次]。
參數(shù)說明:
String:要執(zhí)行的函數(shù)的名稱;
Float:秒數(shù),倒計時的時間;
InvokeRepeating(string,float,float):多少秒[第二個參數(shù)]后執(zhí)行某
個函數(shù),并且以后每隔多少秒[第三個參數(shù)]都會執(zhí)行該函數(shù)一次[重復調(diào)用 N 次]。
參數(shù)說明:
String:要執(zhí)行的函數(shù)的名稱;
Float:秒數(shù),準備時間,預熱時間;
Float:秒數(shù),重復調(diào)用的間隔時間;
CancelInvoke():取消這個腳本中所有的 Invoke 調(diào)用。
2.Invoke 函數(shù)的家在哪兒?
Class 類可以理解成是一個“家”,各種各樣的函數(shù)(方法),字段,屬性可以理
解成是這個“家”的家庭成員。
那么,這三個 Invoke 相關(guān)的函數(shù),他們的家在哪兒?回答:MonoBehaviour 類。
我們先階段寫的腳本,都是默認繼承“MonoBehaviour”類的,我們自己寫的腳本類,都是這個“MonoBehaviour”類的子類,所以我們可以直接通過寫方法名的形式,就可以調(diào)用父類中的方法。
3.金錢副本主角控制
1.主角基本控制
①創(chuàng)建一個 Cube 模型,美化一下,作為主角;
②添加剛體組件,使用剛體的 MovePosition 結(jié)合按鍵控制主角移動。
2.控制主角與 Box 碰撞
①主角碰撞到 Box,Box 自動銷毀。
關(guān)鍵代碼
PlayerController
public class PlayerController : MonoBehaviour {
//使用MovePosition方法必須有剛體屬性和位置屬性 所以定義以下兩個變量
private Rigidbody m_Rigidbody;
private Transform m_Transoform;
// Use this for initialization
void Start () {
//初始化兩個變量賦值
m_Rigidbody=gameObject.GetComponent<Rigidbody>();
m_Transoform=gameObject.GetComponent<Transform>();
}
// Update is called once per frame
void Update () {
//通過按鍵使用MovePosition 方法
if (Input.GetKey(KeyCode.A))
{
m_Rigidbody.MovePosition(m_Transoform.position+Vector3.left*Time.deltaTime);
//太慢了,用以下方法;
m_Rigidbody.MovePosition(m_Transoform.position + Vector3.left *0.2f);
}
if (Input.GetKey(KeyCode.D))
{
// m_Rigidbody.MovePosition(m_Transoform.position+Vector3.right*Time.deltaTime);
m_Rigidbody.MovePosition(m_Transoform.position + Vector3.right *0.2f );
}
if (Input.GetKey(KeyCode.W))
{
// m_Rigidbody.MovePosition(m_Transoform.position+Vector3.forward*Time.deltaTime);
m_Rigidbody.MovePosition(m_Transoform.position+Vector3.forward*0.2f);
}
if (Input.GetKey(KeyCode.S))
{
// m_Rigidbody.MovePosition(m_Transoform.position + Vector3.back * Time.deltaTime);
m_Rigidbody.MovePosition(m_Transoform.position + Vector3.back * 0.2f);
}
}
//碰撞后銷毀寶箱
//碰撞有三個方法,注意調(diào)用的是哪一個? OnCollsitionEnter OnCollsitionStay OnCollsitionExit
//觸發(fā)有三個方法 OnTriggerEnter OnTriggerStay OnTiggerExit
void OnCollisionEnter(Collision coll) {
//判斷游戲物體碰到寶箱后銷毀寶箱 怎么判斷呢?寶箱都是預置體,統(tǒng)一下標簽就可 Box
if (coll.gameObject.tag=="Box")
{
//系統(tǒng)自帶銷毀方法
GameObject.Destroy(coll.gameObject);
//如果沒有銷毀,檢查下方法有沒有寫對,關(guān)鍵是單詞有沒有拼對~
}
}
}
小結(jié)

金錢副本-壇子.png

Unity API.png