乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MonoBehaviour類Invoke, Coroutine

       許多潤澤 2012-11-15

      MonoBehaviour概述


      MonoBehaviour 表示一個單一的行為。Unity中用戶對游戲?qū)ο蟮牟僮鞅环指畛扇舾蓚€單一行為。每個單一行為都作為一個MonoBehaviour類來封裝。再生成每個MonoBehaviour類的實例,并作為組件嵌入游戲?qū)ο?。然后按照一定的順序(從下到上)調(diào)用每個對象的重載方法來實現(xiàn)游戲?qū)ο蟮娜啃袨椤?/font>


      創(chuàng)建

      在菜單Assets->create中選擇javascript活C# script創(chuàng)建一個腳本類。Unity規(guī)定:這些類都必須繼承自MonoBehaviour。javascript 的腳本類自動繼承MonoBehaviour,c#腳本類必須顯式繼承這個類。

       

      特別之處

       繼承自MonoBehaviour的類,不需要自己創(chuàng)建它的實例,也不能自己創(chuàng)建(如 new 類名)。因為所有從MonoBehaviour繼承過來的類,unity都會自動創(chuàng)建實例,并且調(diào)用被重載的方法,如我們經(jīng)常用到的Awake,Start, Update等。而普通類,就可以用new來創(chuàng)建實例了。

       

      異步函數(shù)

      在一個方法執(zhí)行時調(diào)用另一個方法。而被調(diào)用的方法或者其中的某些語句不是立刻執(zhí)行,而是過一段時間后才執(zhí)行。

      MonoBehaviour提供了兩種異步方法

      調(diào)用(Invoke)

      協(xié)程(Coroutine)

       

       

      調(diào)用(Invoke)

      function Invoke (methodName: string, time : float) : void

      functionInvokeRepeating (methodName : String,time : float, repeatRate : float) : void

      function CancelInvoke () : void

      function IsInvoking (methodName: string) : bool

       

      協(xié)程(Coroutine)

      function StartCoroutine (routine: IEnumerator) : Coroutine

      function StartCoroutine (methodName: string, value : object = null) : Coroutine

      function StopCoroutine (methodName: string) : void

      function StopAllCoroutines () : void

       

      協(xié)程介紹

      協(xié)同程序與線程差不多,也就是一條執(zhí)行序列,擁有自己獨立的棧,局部變量和指令指針,同時又與其它協(xié)同程序共享全局變量和其它大部分東西。線程與協(xié)同程序的主要區(qū)別在于,一個具有多線程的程序可以同時運行幾個線程,而協(xié)同程序卻需要彼此協(xié)作地運行。就是說,一個具有多個協(xié)同程序的程序在任何時刻只能運行一 個協(xié)同程序,并且正在運行的協(xié)同程序只會在其顯示地掛起時,它的執(zhí)行才會暫停。

       

      Unity中協(xié)程

      一個協(xié)同程序在執(zhí)行過程中,可以在任意位置使用yield語句。yield的返回值控制何時恢復協(xié)同程序向下執(zhí)行。協(xié)同程序在對象自有幀執(zhí)行過程中堪稱優(yōu)秀。協(xié)同程序在性能上沒有更多的開銷。StartCoroutine函數(shù)是立刻返回的,但是yield可以延遲結(jié)果。直到協(xié)同程序執(zhí)行完畢。

       

      function StartCoroutine (routine: IEnumerator) : Coroutine

      參數(shù)表:IEnumerator

      IEnumerator是枚舉數(shù)接口。函數(shù)需要一個實現(xiàn)了這個接口的YieldInstruction對象??梢詣?chuàng)建一個WaitForSeconds對象,在它的構(gòu)造函數(shù)中傳入掛起時間。

      返回值:Coroutine

      只用來表示一個協(xié)同程序?qū)嵗囊谩]有任何暴露的變量和函數(shù)。一個coroutine是一個函數(shù),它能在中斷完成前掛起執(zhí)行。

       

      function StartCoroutine (methodName: string, value : object = null) :  Coroutine

      直接傳入一函數(shù)名,開銷大些。

       

      比較

      Invoke方法:執(zhí)行沒有被掛起,相當于設置完被調(diào)用函數(shù)的執(zhí)行時間后即時向下執(zhí)行。應用到?jīng)]隔一段時間執(zhí)行某個函數(shù)很方便。

      Coroutine方法:新開一條執(zhí)行序列(跟新建線程差不多)并掛起,等待中斷指令結(jié)束。開銷不大。當需要掛起當前執(zhí)行時使用。比如Player死了一條命后消失,再過1.5秒后重新出現(xiàn),就可以用將協(xié)同程序掛起。

      gameObject.renderer.enabled= false;

      yieldWaitForSeconds(1.5f);

      gameObject.renderer.enabled= true;



        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多