2022-06-18|閱讀時間 ‧ 約 5 分鐘

Unity C# | Invoke & InvokeRepeating

前言

  本篇文章將會告訴你延時方法的呼叫方式,Invoke是一種讓函式(function)延時啟動的官方函式,通常用於延後幾秒鐘啟動或用InvokeRepeating定時啟動函式,遊戲中常用於怪物的定時召喚或延遲觸發機關等等。
public void Invoke(string methodName, float time);
public void InvokeRepeating(string methodName, float time, float repeatRate);

Invoke

  這個英文的中文翻譯為「調用」,本身就有呼叫某種東西的涵義在內,而在程式中則是用於延遲幾秒鐘後呼叫指定函式(function),在官方的教學則是定時呼叫隨機位置的敵人。
  調用(Invoke)為MonoBehaviour中的函式,使用方式如下所示:
using UnityEngine;
using System.Collections.Generic;

public class ExampleScript : MonoBehaviour
{
   // Launches a projectile in 2 seconds

   Rigidbody projectile;

   void Start()
   {
       Invoke("LaunchProjectile", 2.0f);
   }

   void LaunchProjectile()
   {
       Rigidbody instance = Instantiate(projectile);
       instance.velocity = Random.insideUnitSphere * 5.0f;
   }
}
  官方示範了「用於給予實例隨機速度」,insideUnitSphere為在一個球體範圍內的隨機點,本篇不過多細說。
  其核心的程式碼為:
Invoke("LaunchProjectile", 2.0f);
Invoke("函式(function)名稱",延時秒數);
注意事項:
  • 如果時間設置為0,會在Update下一禎觸發。
  • 如果時間設置為負數,則等同於0。
  • 如果用於傳遞參數,更好的做法是使用「Coroutine」(本篇不介紹)

InvokeRepeating

  這個英文的中文翻譯為「重複調用」,為Invoke的重複版本,除了一開始的延時啟動的時間,還有每隔幾秒的調用的間隔秒數。
  重複調用(InvokeRepeating)為MonoBehaviour中的函式,使用方式如下所示:
using UnityEngine;
using System.Collections.Generic;

// Starting in 2 seconds.
// a projectile will be launched every 0.3 seconds

public class ExampleScript : MonoBehaviour
{
   public Rigidbody projectile;

   void Start()
   {
       InvokeRepeating("LaunchProjectile", 2.0f, 0.3f);
   }

   void LaunchProjectile()
   {
       Rigidbody instance = Instantiate(projectile);

       instance.velocity = Random.insideUnitSphere * 5;
   }
}
  官方示範了「延時3秒後,每隔0.3秒鐘給予實例隨機速度」
InvokeRepeating("LaunchProjectile", 2.0f, 0.3f);
InvokeRepeating("函式(function)名稱", 延時啟動秒數 , 間隔啟動秒數);
注意事項: (基本上等同於Invoke)
  • 如果間隔秒數為0,則本程式不作用。

應用:簡易計時器

private int second;

start
{
  InvokeRepeating("timer",0,1);
}

private void timer()
{
  second++;
  Debug.Log("現在時間為:"+second+"秒鐘");
}

後記

  在撰寫這篇文章的時候,我發現自己可以很順暢的一直撰寫下去,我相信我的程式能力已經有足夠的水準,足以讓我邊學習邊成長,又或許只是因為Invoke沒有太難的技術在內。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.