๋ณด์ค๋ฅผ ๋ง๋ค๊ณ ์๋๋ฐ
๊ฐ๊ฐ์ ํจํด์ 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;
}
{
//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);
}
{
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;
}
{
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);
SetPattern(Distance.CloseRange, closeRange);
๋ฉ์ฒญํ๊ฒ๋ ๋ฐฉ๋ฒ์ ๋ชฐ๋ผ..
๊ทธ๋ฅ enum BossPatternType ๋ง๋ค๊ณ switch๋ก ์คํ์์ผ
List> closeRange = new List>(); closeRange.Add(() => Moving());
๊ทผ๋ฐ ๊ตณ์ด ๋๋ค๋ก ์ํด๋ ๋๋ ค๋..? ๊ฑ Moving๋ง ํด๋ ๋ ์ง๋.. C#์๋ชป์ด๋ผ ๋ชจ๋ฆ - dc App
์ ๋ฐ.. ๋ค ์งค๋ ค๋ฒ๋ฆฌ๋ค List(Func(IEnumerator)์
() ๋ฅผ ๊บฝ์ ๊ดํธ๋ก
ใณใณ ํด๊ฒฐ๋จ
๋๊ฐ ํ๊ณ ์๋ ๊ฑด IEnumerator ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ ์๋๋ผ ๋ฐํํ์์ด IEnumerator์ธ ํจ์๋ฅผ ๋ถ๋ฌ์ ๋ฆฌ์คํธ์ ๋ฃ๊ณ ์์์
Moving์ ํจ์๊ณ Moving()์ ํจ์ ํธ์ถ์ด๋ผ ๊ทธ๊ฑฐ ์ธ ๋๋ง๋ค ํจ์ ์คํ๋ผ์ IEnumerator ๊ฒฐ๊ณผ๊ฐ๋ง ๋์ค๋๋ฐ ๊ทธ๊ฑธ ๋ฆฌ์คํธ์ ๋ฃ๊ณ ์์ผ๋ ์ ๋์ง
ใ ใ ๊ฒฐ๊ตญ ๋ธ๋ฆฌ๊ฒ์ดํธ ์ธ์ค ๋ชฐ๋ผ์ ๋ฉ์ฒญ์ด์ง ํ๊ณ ์๋๊ฑฐ.. ใ ใ
๊ฑ ๊ณต๊ฒฉํจํด์ ์๋ธํด๋์คํํด์ ๋ฆฌ์คํธ์ ๋ด์๋๊ณ ๊ณต๊ฒฉํจํด ๋ค์ด๊ฐ๋๋ง๋ค ๋๋ค์ผ๋ก ํ๋์ฉ ์ ํํด์ ์คํ์ํค๋๊ฒ ๋ ๊ตฌํ๋ ์ฝ๊ณ ๊ด๋ฆฌ๋ ์ฌ์ธ๋ฏ
์ง๊ธ ํจํด > ๋ณด์ค > ๊ณ ์ ๋ชฌ์คํฐ ์ ๋ณด ์ด๋ฐ์์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์ง๋จ๋๋ฐ, ๋๋ง๋๋ก๋ฉด ํจํด์ด๋ ๊ณ ์ ๋ชฌ์คํฐ์์๋ ๊ณต๊ฒฉํจํด ํจ์๋ค ํฉ์ณ์ ๊ด๋ฆฌํ๋ผ๋ ๋ง์ด์ง? ๋ด์ ์๊ฐํด๋ด์ผ๊ฒ ๋ค
{} {} {} {} {} {} {}