๋ณด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š”๋ฐ


๊ฐ๊ฐ์˜ ํŒจํ„ด์„ IEnumerator ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  List ์— ๋‹ด์•„์„œ ์…”ํ”Œํ•˜๊ณ  ํ•˜๋‚˜๋ฅผ ๋ฝ‘์•„์„œ StartCoroutine ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ์“ธ ์˜ˆ์ •์ด๊ฑฐ๋“ ?


๊ทผ๋ฐ ์ด๋•Œ ํŒจํ„ด์„ ๋‹ด์„๋ผ๊ณ  ํ•˜๋ฉด (ex. Moving()) ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์ด ๋˜๋ฒ„๋ฆฌ๋Š”๋ฐ ์‹คํ–‰์•ˆํ•˜๊ณ  ๋‹ด๋Š”๋ฒ•์ด ์žˆ์„๊นŒ?


์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ์งœ์•ผ๋ ๊นŒ?


์ด๊ฑฐ๋•Œ๋งค ์–ด์ œ 5์‹œ์— ์žค๋Š”๋ฐ ์•„์ง๋„ ์ด๋Ÿฌ๊ณ ์žˆ๋‹ค ใ… ใ… 


์ฝ”๋“œ์ถ”๊ฐ€


ํŒจํ„ด >ย 

private IEnumerator Moving()
{
//soundManager.PlayClip(runSound);
//์• ๋‹ˆ๋ฉ”์ด์…˜
RunningPattern();
Rotate();
while (true)
{
float distance = targetTransform.position.x - transform.position.x;
if (Mathf.Abs(distance) < 2f)
{
//soundManager.StopClip();
//์• ๋‹ˆ๋ฉ”์ด์…˜
rigid.velocity = Vector2.zero;
break;
}
rigid.velocity = GetDirection() * currentStats.speed;
yield return null;
}
state = PatternState.SUCCESS;
}

ํŒจํ„ด ์‹คํ–‰ >

private void ActionPattern()
{
StopAllCoroutines();
SetDistance(targetTransform.position);
StartCoroutine(GetPattern());
}

ํŒจํ„ด ์„ธํŒ… >

private Dictionary<Distance, List<IEnumerator>> patternDict = new Dictionary<Distance, List<IEnumerator>>();
protected void SetPattern(Distance distance, List<IEnumerator> pattern)
{
if (pattern != null)
patternDict.Add(distance, pattern);
}

ํŒจํ„ด ๊ฐ€์ ธ์˜ค๊ธฐ >

protected IEnumerator GetPattern()
{
List<IEnumerator> patternList;
if (patternDict.TryGetValue(targetDistance, out patternList))
{
for (int i = 0; i < patternList.Count; i++)
{
int ran = Random.Range(0, patternList.Count);
IEnumerator ranPattern = patternList[ran];
patternList[ran] = patternList[i];
patternList[i] = ranPattern;
return ranPattern;
}
}
return null;
}

ํ•˜๊ณ  ์žˆ๋Š” ์ง“๊ฑฐ๋ฆฌ >

private List<IEnumerator> closeRange = new List<IEnumerator>();
closeRange.Add(Moving());
SetPattern(Distance.CloseRange, closeRange);

๋ฉ์ฒญํ•˜๊ฒŒ๋„ ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ..