ย  ย  Queue<float> _qTime = new Queue<float>();


ย  ย  WaitForSeconds ws1 = new WaitForSeconds(0.07f);

ย  ย  WaitForSeconds ws2 = new WaitForSeconds(0.2f);

ย  ย  WaitForSeconds ws3 = new WaitForSeconds(0.03f);


ย  ย  IEnumerator Start()

ย  ย  {

ย  ย  ย  ย  //์ฝ”๋ฃจํ‹ด์„ ๋‹ค๋ฅธ ๊ฐ„๊ฒฉ์œผ๋กœ 5ํšŒ ์‹คํ–‰์‹œํ‚จ๋‹ค.

ย  ย  ย  ย  //0.07f๋ฅผ ๋„ฃ์–ด๋„ย ์‹ค์ œ๋ก  0.08~0.09๊นŒ์ง€ ์•„์Šฌ์•„์Šฌํ•˜๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ. print๋ฌธ์ด ๋ฌด๊ฑฐ์›Œ์„œ ๊ทธ๋Ÿด์ˆ˜๋„ ์žˆ๊ณ  ์—๋””ํ„ฐ์˜ ๋ฌธ์ œ์ผ์ˆ˜๋„ ์žˆ์„๋“ฏ.

ย  ย  ย  ย  RunCoroutine(1);

ย  ย  ย  ย  yield return ws1; //์ฒซ๋ฒˆ์งธ ์ง€์—ฐ์‹œ๊ฐ„์€ ๋ฌด์Šจ ์ด์œ ์—์„œ์ธ์ง€ 0.07f ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„  0.07์ดˆ๋ฅผ ๋„˜๊ฒจ์„œ ์‹คํŒจํ•จ.

ย  ย  ย  ย  RunCoroutine(2);

ย  ย  ย  ย  yield return ws1; //๋‘๋ฒˆ์งธ๋ถ€ํ„ฐ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์„ ์˜ˆ์ƒํ•˜์ง€๋งŒ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๊ทธ ์ด์ƒ์˜ ์‹œ๊ฐ„ ์ง€์—ฐ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ console์ฐฝ์—์„œ ๋‘ ์ฝ”๋ฃจํ‹ด ์‚ฌ์ด์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ฐจ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

ย  ย  ย  ย  RunCoroutine(3);

ย  ย  ย  ย  yield return ws2; //์„ธ๋ฒˆ์งธ๋Š” ์˜๋„์ ์œผ๋กœ 0.2f์˜ ์‹œ๊ฐ„์ฐจ๋ฅผ ์ค˜์„œ ์ •์ง€์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

ย  ย  ย  ย  RunCoroutine(4);

ย  ย  ย  ย  yield return ws3; //๋„ค๋ฒˆ์จฐ๋Š” 0.03f๋กœ ๊ฑฐ์˜ ์‹คํŒจ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์ˆ˜์ค€์˜ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค.

ย  ย  ย  ย  RunCoroutine(5);

ย  ย  }


ย  ย  void RunCoroutine(int no)

ย  ย  {

ย  ย  ย  ย  StartCoroutine("Repeat", no);

ย  ย  }


ย  ย  IEnumerator Repeat(int x)

ย  ย  {

ย  ย  ย  ย  //์ฝ”๋ฃจํ‹ด์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค _qTime์— ํ˜„์žฌ ์‹คํ–‰ ์ˆœ๊ฐ„์˜ ์‹œ๊ฐ„์„ ์ž…๋ ฅ, 2๊ฐœ๊ฐ€ ์Œ“์ด๋ฉด ์ด์ „ ์ฝ”๋ฃจํ‹ด ์‹คํ–‰์‹œ ์‹œ๊ฐ„๊ณผ ํ˜„์žฌ ์‹คํ–‰์‹œ ์‹œ๊ฐ„ 2๊ฐœ๊ฐ€ ๋ชจ์—ฌ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ˆ๊นŒ ๊ทธ ๋‘˜ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ๊ตฌํ•œ๋‹ค.


ย  ย  ย  ย  _qTime.Enqueue(Time.realtimeSinceStartup); //์‹คํ–‰ ์ˆœ๊ฐ„์˜ time.realtime์„ _qTime์— ๋„ฃ์Œ.


ย  ย  ย  ย  if (_qTime.Count >ย 1) //์ฒ˜์Œ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ์—” ๋น„๊ต๊ฐ€ ์˜๋ฏธ ์—†์œผ๋‹ˆ ๋‘๋ฒˆ์งธ๋ถ€ํ„ฐ..

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  float t = Time.realtimeSinceStartup - _qTime.Dequeue(); //ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ์ง์ „ ์ฝ”๋ฃจํ‹ด ์‹œ๊ฐ„์˜ ๊ฐ„๊ฒฉ.ย 

ย  ย  ย  ย  ย  ย  print(x + "ย  " + t);


ย  ย  ย  ย  ย  ย  if (t < 0.1f) //๋‘ ์ฝ”๋ฃจํ‹ด์˜ ์‹คํ–‰ ๊ฐ„๊ฒฉ์ด 0.1์ดˆ ๋ฏธ๋งŒ์ด๋ฉด ์ฝ”๋ฃจํ‹ด์„ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค.

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  print(x + " stop " + _qTime.Count);ย 


ย  ย  ย  ย  ย  ย  ย  ย  StopAll();

ย  ย  ย  ย  ย  ย  ย  ย  yield break;

ย  ย  ย  ย  ย  ย  }

ย  ย  ย  ย  }


ย  ย  ย  ย  while (true) // ์ด ์ฝ”๋ฃจํ‹ด์˜ ๋ฉ”์ธ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ถ€๋ถ„.

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  print("running");

ย  ย  ย  ย  ย  ย  yield return null;

ย  ย  ย  ย  }

ย  ย  }


ย  ย  void StopAll()

ย  ย  {

ย  ย  ย  ย  StopCoroutine("Repeat");

ย  ย  }


๋ฏธ์•ˆ ๋งค๋ฒˆ ์ˆ˜์ •ํ•˜๋ฉด์„œ๋„ย ์˜ค๋ฅ˜๋•Œ๋ฌธ์— ์ž‘๋™์ด ์•ˆ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์žˆ์—ˆ๋„ค.. ใ… ใ… ย ์ง์ „์ฝ”๋“œ๋Š” ๊ฐ’์ด 0์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฑธ ๋นผ๋จน๊ธฐ๋„ ํ•˜๊ณ  ์—‰๋ง์ง„์ฐฝ์ด์—ˆ์Œ


์ด๋ฒˆ์—” ์ •๋ง ๊ทธ๋ƒฅ ๋””๋ฒ„๊ทธ๊นŒ์ง€ ๋‚จ๊ฒจ์„œ ๋ฐฉ๊ธˆ ์‹คํ–‰ํ•œ ์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ์˜ฌ๋ฆฌ๋‹ˆย ํ•œ๋ฒˆ๋งŒ ๋” ํ™•์ธํ•ด ์ค˜.


์ฒ˜์Œ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋˜ ๊ฑด ์ฒซ๋ฒˆ์งธย ์ฝ”๋ฃจํ‹ด์„ ์‹คํ–‰ํ•˜๊ณ  yield return new waitforseconds(0.07f); ์ด๋ ‡๊ฒŒ ์‹œ๊ฐ„ ์ง€์—ฐ์„ ์คฌ์„ ๋•Œ ์‹ค์ œ๋กœ๋Š” 0.07์ดˆ๋ณด๋‹ค ํ›จ์”ฌ ๊ธด ์‹œ๊ฐ„์ด ์ง€๋‚  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ๋ชฐ๋ผ์„œ์˜€์Œ ๊ทธ๋ž˜์„œ ์ž๊พธ 0.07์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœย ๋‘ ์ฝ”๋ฃจํ‹ด์„ ์‹คํ–‰ํ•ด๋„ ์‹ค์ œ ์‹œ๊ฐ„์€ ๊ทธ ์ด์ƒ ๊ฑธ๋ ค์„œ ์ค‘๋‹จ์„ ์•ˆ ์‹œํ‚ค๊ณ  ์žˆ๋”๋ผ. ๋ฏธ๋ฆฌ ์บ์‹œ๋ฅผ ํ•ด๋„ ์ฒ˜์Œ ํ•œ๋ฒˆ์€ ์‹œ๊ฐ„์ด ๊ฝค ๊ธธ๊ฒŒ ๊ฑธ๋ฆฌ๋Š”๋ฐย ์–ด๋–ป๊ฒŒ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Œ.


ํ•˜์ง€๋งŒ ์–ด์ฐจํ”ผ ์‹ค์ œ ๊ฒŒ์ž„์—์„  ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚  ๋ฆฌ๊ฐ€ ์—†์„ํ…Œ๋‹ˆ ๊ฐ ์ฝ”๋ฃจํ‹ด์„ 0.07์ดˆ, 0.07์ดˆ, 0.2์ดˆ, 0.03์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๊ณ  ๋‘ ์‚ฌ์ด ์‹คํ–‰ ๊ฐ„๊ฒฉ์ด 0.1์ดˆ ์ดํ•˜๋ฉด ์ค‘๋‹จ๋˜๋Š”์ง€ ํ™•์ธ์„ ํ–ˆ์–ด. ๊ฒฐ๊ณผ๋Š” 3, 5๋ฒˆ์งธ ์ฝ”๋ฃจํ‹ด์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ ๋ชจ๋“  ์ฝ”๋ฃจํ‹ด์ด ์ •์ง€ํ•จ.


์ด ์ฝ”๋“œ๋กœ ํ•œ๋ฒˆ๋งŒ ๋” ํ™•์ธ ๋ถ€ํƒํ• ๊ฒŒ. ์•ž์„  ์ฝ”๋“œ๋Š” ์ •๋ง ๋ฏธ์•ˆ ใ… ใ