اجرای یک تابع در هر یک یا چند ثانیه در یونیتی 5_تابع InvokeRepeating در یونیتی
جمعه, ۲۲ آبان ۱۳۹۴، ۱۰:۳۳ ب.ظ
منبع :gameover.blog.ir
شکل کلی :
public void InvokeRepeating(string methodName, float time, float repeatRate);
توضیح :
اولین پارامتر اسم تابعی هست که می خوایم مدام اجراش کنیم.
دومین پارامتر زمان انتظار برای اولین شروع بر حسب ثانیه هست.
سومین پارامتر هم زمان تاخیر بین هر فراخوانی هست.
مثال: کد زیر بلافاصله(بعد از صفر ثانیه انتظار) تابع دلخواه رو اجرا می کنه و هر 1 ثانیه دوباره اونو اجرا می کنه:
InvokeRepeating("YOUR FUNCTION NAME", 0, 1.0f);دقت کنید که حتما باید توی Start بذاریدش نه update. مثال :
void Start () { InvokeRepeating("f1", 1.0f,1.0f);//call function f1() every 1 second }در مثال فوق تابع f1 هر ثانیه یکبار فراخوانی میشه.
تابع Invoke هم هست . این تابع برای اجرای یک تابع دیگه فقط یکبار بدون تکرار بکار می ره.
مثال:
اگه بخوایم 2 ثانیه صبر کنیم بعدش تابعی رو اجرا کنیم این کد رو اجرا می کنیم:
Invoke("YOUR FUNCTION NAME", 2);
به جای YOUR FUNCTION NAME اسم تابعی که ساختیم رو می ذاریم.
دقت کنید که حتما باید توی Start بذاریدش نه update.
یه مثال دیگه میزنم:
اسکریپت سیشارپ زیر باعث میشه هر ثانیه یکی از 4 اسپرایت ورودی روی اسپرایت شما تنظیم بشه(یادتون نره 4 متغیر public که تعریف می کنیم در زیر، در inspector ظاهر خواهند شد و باید عکس اسپرایت ها رو بکشیم بندازیم روشون. بعد از اختصاص اسکریپت به new sprite ساخته شده در یونیتی 5):
using UnityEngine; using System.Collections; //Author:Sajjad3011 public class timer1 : MonoBehaviour { public Sprite[] sprArr=new Sprite[4];//set it in the inspector SpriteRenderer sprRndr1; private int i=0; // Use this for initialization void Start () { sprRndr1=this.gameObject.GetComponent<SpriteRenderer> ();//access to component SpriteRenderer InvokeRepeating("f1", 1.0f,1.0f);//call function f1() after 1 second } // Update is called once per frame void Update () { } void f1() { Debug.Log (i); sprRndr1.sprite = sprArr[i]; i++; if (i > 3) i = 0; }//f1 }
سوالی بود بپرسید.