ย ์ฝ๋ฃจํด์์์ instantiate๋ฅผ ์ฐ๊ณ ์๋๋ฐ ๊ฒ์ ์์ ํ์ ๋ถํน์ ํ ์๊ฐ ๋์ ์ ์ ์๋ ํ๋ค๊ฐ ์ด๋ค ์ด์ ์ธ์ง ๊ฐ์๊ธฐ
์ฝ๋ฃจํด ๊ธฐ๋ฐ์ผ๋ก ์์ง์ด๋ ๋ชจ๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ค์ด ๋ค ๋ฉ์ถฅ๋๋ค.(์ฝ๋ฃจํด๋ง ๋ฉ์ถ๊ณ update๋ ์คํ๋๋ ๋ฏ ๋ณด์ ๋๋ค.)
์๋๋ ์ฝ๋ฃจํด ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๊ฒ์ ์ค๋ธ์ ํธ์ ์คํฌ๋ฆฝํธ ์ค ํ ๋ถ๋ถ์ ๋๋ค.
void Start()
ย ย {
ย ย ย ย targetPlayer = GameObject.Find("PlayerKing");
ย ย ย ย StartCoroutine(rookThink());ย ย ย ย ย
ย ย }
ย ย private IEnumerator rookThink()
ย ย {
ย ย ย ย if(hasTarget)
ย ย ย ย {
ย ย ย ย ย ย hammer.GetComponent<Animator>().SetBool("bMake", false);
ย ย ย ย ย ย yield return new WaitForSeconds(3.5f);
ย ย ย ย ย ย StartCoroutine(rookMake());
ย ย ย ย }
ย ย }
ย ย private IEnumerator rookMake()
ย ย {
ย ย ย ย hammer.GetComponent<Animator>().SetBool("bMake", true);
ย ย ย ย ย
ย ย ย ย rookAudioSource.PlayOneShot(rookMakingClip); //๊นก๊นก ์๋ฆฌ
ย ย ย ย //ํฐ ์์ฑ ์์
ย ย ย ย GameObject capsulePawn = Instantiate(pawnCapsulePrefab, pawnSpawnPos.position, Quaternion.identity);ย
ย ย ย ย yield return new WaitForSeconds(2.5f); //2.5์ด ๋๊ธฐ
ย ย ย ย Destroy(capsulePawn); //๋ง๋ ๊ฒ ์์ ๊ธฐ
ย ย ย ย rookAudioSource.PlayOneShot(rookMakingClip); //๊นก๊นก ์๋ฆฌ
ย ย ย ย //๋ฐ์ฏค ๋ง๋ค์ด์ง ํฐ ์์ฑ
ย ย ย ย GameObject halfPawn = Instantiate(pawnMakingPrefab, pawnSpawnPos.position, Quaternion.identity);ย
ย ย ย ย yield return new WaitForSeconds(2.5f); //2.5์ด ๋๊ธฐ
ย ย ย ย Destroy(halfPawn); //๋ง๋ ๊ฒ ์์ ๊ธฐ
ย ย ย ย rookAudioSource.PlayOneShot(rookMakingClip); //๊นก๊นก ์๋ฆฌ
ย ย ย ย //์์ฑ๋ ํฐ ์์ฑ
ย ย ย ย Instantiate(pawnDonePrefab, pawnSpawnPos.position, Quaternion.identity);
ย ย ย ย yield return new WaitForSeconds(2.5f); //2.5์ด ๋๊ธฐ
ย ย ย ย StartCoroutine(rookThink()); //๋ค์ ์ฝ๋ฃจํด ์์
ย ย }
์ฒ์์๋ ์๋์ ์ค๋ฅ๊ฐ ๋ ์ย ๊ฒ์ํด์ ์ฐพ์๋ณด๋ ์ค์ย https://wergia.tistory.com/167 ์ด ์ฌ์ดํธ์ ๋ง๋๋ก start์์ ์ฝ๋ฃจํด์ ์์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋๋ฐ
ย
๊ทธ ์ดํ์๋ ์ฝ์์ฐฝ์ ์ค๋ฅ๊ฐ ๋จ์ง ์๋๋ฐ ๊ทธ๋ฅ ๊ฒ์ ์ค๋ธ์ ํธ๋ค์ด ๋ค ๋ฉ์ถฐ๋ฒ๋ฆฌ๋ค์. ๊ทผ๋ฐ ๋ ํ๋ ์ด์ด๊ฐ ์กฐ์ข ํ๋ ๊ธฐ๋ฌผ์ ์ ์์ง์ด๊ณ ์๋ํฉ๋๋ค.
์ฝ๋ฃจํด ์ด์ธ์ Update์์ ํ๋ ์ด์ดย ์บ๋ฆญํฐ๋ฅผ ์ณ๋ค๋ณด๋ ๊ธฐ๋ฅ์ ๋ ์คํ๋๊ณ ์๊ณ ์.
์์ ์ฌ์ดํธ ๋ง๋๋ก ๋ญ๊ฐ ์ฝ๋ฃจํด์์์ instantiate๋ฅผ ํ๋ฉด์ ์๊ธฐ๋ ์ค๋ฅ๊ฐ ๋จ์ง์๋ ๋ฌธ์ ๊ฐ์๋ฐ..
์ผ๋จ yield return null์ ๋ชจ๋ ์ฝ๋์์ ์์ด๋๋ฐ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์๋ค์..
์ค๋ฅ ์๋ ์ค๋ฅ๋ ์ฒ์์ด๋ผ ๋นํฉ์ค๋ฝ๋ค์..
๋์์ฃผ์ธ์ใ
hasTarget์ด false์ธ ์ํ์์ rookThink()๊ฐ ๋๋ฉด ์ฝ๋ฃจํด ์ํ์ด ๋๊ธฐ๋๋ฐ ์ด๊ฒ ์ด์ ๋ ์๋๊ฑฐ์ง? ๋ก์ง์ ์ผ๋ก ์๋ชป๋๊ฒ ์๋๋ผ๋ฉด ์ฒ์ ๋ณด๋ ์ค๋ฅ๋ผ์ ์ ๋ชจ๋ฅด๊ฒ ๋ค
๋น hasTarget์ ํ๋ ์ด์ด๊ฐ ์ด์์๋์ง ํ์ธํ๋ ํ๋กํผํฐ์ธ๋ฐ ์์ง ํ๋ ์ด์ด๊ฐ ์ฃฝ๋๊ฑธ ๊ตฌํํ์ง ์์์ ๊ณ์ ์ด์์๊ฑฐ๋ ์
๋ช์ด๋ค์ ๋ฉ์ถ๊ฑฐ๋ ๊ทธ๋ฐ๊ฑฐ์์ด ๋ถํน์ ์๊ฐ์ด ์ง๋๊ณ ๋ชจ๋ ์ค๋ธ์ ํธ๊ฐ ๋์์ ๋ฉ์ถค??
ํ๋จ์ ์๋์ ์ค๋ฅ๋ Coroutine couldn't be started because the the game object "GameObject" is inactive! ์์ต๋๋ค.
๋น ์ ์์๋ ๋๋ค๊ฐ ๊ฐ์๊ธฐ ๋ญ๊ฐ ํน์ ์กฐ๊ฑด์ด ๋ง์ถฐ์ง๋ฉด(?) ์ฝ๋ฃจํด์ผ๋ก ์์ง์ด๋ ์ ๋ค์ด ๋ค ๋ฉ์ถฅ๋๋ค.
์ฐพ์๋ณด๋๊น ์ ๋ถ ๋นํ์ฑํ๋ ๊ฐ์ฒด์ ์ ๊ทผํ๊ฑฐ๋, ์ฌ์ด ๋ฐ๋๊ณ ์ ๊ทผํ๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ค๋๋ฐ ์ ๊ทผ ๋ชปํ๋๋ฐ ์ ๊ทผํ๋ ค๊ณ ํด์ ๋ฉ์ถ๋๊ฒ๊ฐ์๋ฐ... ์ ์ฝ๋๋ง ๋ณด๊ณ ๋ ๋ชจ๋ฅด๊ฒ ์... ์ ์ฝ๋์์ hasTarget์ด ๋ณํ์์ผ๋ฉด ๋ฌธ์ ์์ด๋ณด์ด๋๋ฐ
์๋๋ฉด ์ ๊ธฐ์ hammer๊ฐ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ ๊ทธ๊ฒ ๋นํ์ฑํ๋๋ฉด์ ์๋ฌ๋๋๊ฑฐ ์๋? ์ฝ๋ฃจํด์ฐ๋๊ฒ ๋์์ ๋ฉ์ถ๋์ผ๋๊น ๋์์ ์ ๊ทผํ๋ hammer๊ฐ ์์ด์ง๋ฉด์ ์๋ฌ๋ ์ง๋??
๋นํ์ฑํ๋ ๊ฐ์ฒด์ ์ ๊ทผํด์ ๊ทธ๋ฐ๊ฒ ๋ญ๊ฐ ์ ์ผ ๋ง๋ ๋ง ๊ฐ๋ค์. ์ง๊ธ ์ฌ์ ์ ๊ฑฐ ํ๋ ๋ฟ์ด๊ฑฐ๋ ์. hammer๋ ๋นํ์ฑํ๋๋ ์ฝ๋๋ ์์ต๋๋ค
setactive = false์ฒ๋ฆฌ๋ฅผ ํด์ ๊ทธ๋ฐ ๊ฑฐ ๊ฐ์์ setactive๋ฅผ destroy๋ก ๋ฐ๊ฟจ๋๋ฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์๋ค์..
์ ๊ฒฝํ์ ์ฝ๋ฃจํด์์ ๋ฌธ์ ๊ฐ ํฐ์ก์ ๋ ๊ทธ๋ฅ ์ฝ๋ฃจํด ๋์๋ง์ ๋ฉ์ถฐ๋ฒ๋ฆฌ๋ ํ์์ ๋ณดํต ์ฃผ๊ธฐ๊ฐ ์ ํด์ ธ ์์ง ์์ ๋ฉ์ถ๋๋ผ๊ตฌ์. ์๋ฅผ๋ค๋ฉด while๋ฌธ์์ ์ฃผ๊ธฐ๋ฅผ ๊น๋นกํ๊ณ ์์ผ์ ๋ ๊ทธ๋ฅ ์ค๋ฅ ์์ด ๋ฉ์ถฅ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํฌ๋ฆฝํธ OnEnable๊ณผ OnDisable ํธ์ถ ๋ ๋ ์ฝ๋ฃจํด ์ข ๋ฃ ๋ฐ ์ฌ์์์ด ์ ๋๋์ง ์ฒดํฌํ๋ฉด ๋ณดํต ๋ฌธ๋ฒ ์ค๋ฅ ์๋์ด์ ๋ค ํด๊ฒฐ์ด ๋ฌ์ด์.
์ ๋ ์ฝ๋ฃจํด ๋ด์์ Instantiate๋ฅผ ํด๋ ๋ฌธ์ ์์ด ์ ๋์๊ฐ์ต๋๋ค.