Unity3D開發(fā)常用API之Invoke函數(shù)調(diào)用(七)

本節(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容