์ํํ๋ ์คํฌ๋ฆฝํธ์์ ์ํ ์ง์ ์ ์ ์ฅํ๊ณ
๊ฐ ์ํ ์ง์ ์์ ๊ทธ ๋ฆฌ์คํธ์ ๋ณธ์ธ์ด ์์ผ๋ฉด ์ด์ ์๊ฒ ๋ง๋ค๊ณ ์ถ์๋ฐ
๋จ์ ๊ฐ์ฒด์์ฑ ํ์ ๊ทธ ๋ฆฌ์คํธ์ ์ ๊ทผํ๋๊ฑธ๋ก ํด๊ฒฐ์ด ์๋๋ ๊ฒ ๊ฐ์์
์ด๊ฑธ ์ด๋ป๊ฒ ํ๋ฉด ์ข์๊น?
EX) ์ํ์ง์ 1, 2, 3์ด ์๋ค. '์ํ' ์ด๋ผ๋ ์คํฌ๋ฆฝํธ์์ ์ํ์ง์ 2์ ์ํ์ ํ๊ณ ๋ฆฌ์คํธ์ 2๋ฅผ ์ ์ฅ
์ด ์ ๋ณด๋ฅผ ๋ฐ์ ์ํ์ง์ 2์ย '์ด์ ์๊ธฐ' ์คํฌ๋ฆฝํธ์์ '์ํ'์คํฌ๋ฆฝํธ์ ๋ฆฌ์คํธ์ 2๊ฐ ์์ผ๋ฉด ์ด์ ๋ฐ์ฌ
์ํ ์คํฌ๋ฆฝํธ
public class Summon : MonoBehaviour
{
ย ย public Transform[] summonPoints;
ย ย public GameObject[] diceObjects;
ย ย const int HOWMANYDICES = 5;
ย ย const int HOWMANYPOINTS = 3;
ย ย private int cnt;
ย ย public List<int> summonList = new List<int>();
ย ย private int ChoosePoint()
ย ย {
ย ย ย ย int resultPoint = Random.Range(1, HOWMANYPOINTS + 1);
ย ย ย ย if (cnt > HOWMANYPOINTS)
ย ย ย ย {
ย ย ย ย ย ย return 0;
ย ย ย ย }
ย ย ย ย else if (summonList.Exists(element => element == resultPoint))
ย ย ย ย {
ย ย ย ย ย ย return -1;
ย ย ย ย }
ย ย ย ย else
ย ย ย ย {
ย ย ย ย ย ย return resultPoint;
ย ย ย ย }
ย ย }
์ด์๋ฐ์ฌ
ย ย void Update()
ย ย {
ย ย ย ย curSpawnDelay += Time.deltaTime;
ย ย ย ย if (curSpawnDelay > maxSpawnDelay)
ย ย ย ย {
ย ย ย ย ย ย Debug.Log(summon.summonList.Count);
ย ย ย ย ย ย if (summon.summonList.Contains(shotPointChk))
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย spawnBullet();
ย ย ย ย ย ย ย ย maxSpawnDelay = 1f;
ย ย ย ย ย ย ย ย curSpawnDelay = 0;
ย ย ย ย ย ย }
ย ย ย ย ย ย ย
ย ย ย ย }
ย ย ย ย ย
ย ย }
๊ฐ ์ํ ์ง์ ์ ๋ณธ์ธ์ shotPointChk ๊ฐ์ ์ ๋ ฅํด ๋์์
SummonPoint๋ผ๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ List๋ก ํด๋น ์ง์ ์ ์ํ๋ ๊ฐ์ฒด๋ค ๋ด์ ๋๋๊ฒ ์ข์๋ณด์ด๋๋ฐ.
๊ฐ์ฒด๋ฅผ ๋ด์ผ๋ผ๊ณ ?? ๊ทธ๋ฅ ์ค๋ณต์ฅ์์ ์ํ ์๋๊ฒ ํ๊ณ ์ถ์๋ฐ ๊ฐ์ฒด๋ฅผ ๋ด์ผ๋ฉด ๊ฐ๋ฅํด?
์ค๋ณต์ํ ์๋๊ฒ ํ๊ณ ์ถ์ผ๋ฉด List๋ง๊ณ GameObject๋ฅผ ํ๋ ๋ด๊ณ ์๋ค๊ฐ null์ด๋ฉด ์ํํ๊ณ not null์ด๋ฉด ์ํํ๊ฒ ํ๋ฉด๋์์
์ํฉ์ํ๊ฒ
์ํ๋๋ ๊ฐ์ฒด๋ ์ค๋ณต๋๋ ์๊ด ์๋๋ฐ ๋๊ฐ์ ์ฅ์์ ๊ฒน์ณ์ ์ํ๋ง ์๋๋ฉด ์ข๊ฒ ๊ณ ์ํ๋ ๊ฐ์ฒด๊ฐ ํ๋ฉด์์ ์ ๋ณด์ด๋๋ฐ ํด๊ฒฐ์ ์ด๋ป๊ฒ ํด์ผํ ๊น ใ
์ ์ํ ์ฅ์๋ฅผ ๊ฒ์์ค๋ธ์ ํธ์ ๋ด์ผ๋ผ๋๊ฑฐ์ผ?
์ํ์ฅ์๋ฅผ ๋๊ฐ public Transform[] summonPoints; ๋ก ๊ฐ์ง๊ณ ์์์ public SummonPoint[] summonPoints; ์ด๋ฐ์์ผ๋ก ๋ฐ๊พธ๊ณ SummonPoint์๋ ๋ญ๊ฐ ์ํ๋์ด ์๋์ง ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉด ๋์ง
์ค ๊ณ ๋ง์ ํ๋ฒ ํด๋ณผ๊ฒ ๋กํ
๊ทผ๋ฐ Public SummonPoint[] summonPoints; ๋ก ํ๋๊น ์ค๋ฅ๋จ๊ณ ๊ทธ๋ ๊ฒ ํ๋ฉด ์ํ ์ฅ์๋ฅผ ์ด๋ป๊ฒ ์ง์ ํด์ค?Public void SummonDice() { int randomDice = Random.Range(0, HOWMANYDICES + 1); int randomPoint = ChoosePoint(); if (randomPoint == 0) { } else if (randomPoint == -1) { SummonDice(); } else { Instantiate(diceObjects[randomDi
public void SummonDice() { int randomDice = Random.Range(0, HOWMANYDICES + 1); int randomPoint = ChoosePoint(); if (randomPoint == 0) { } else if (randomPoint == -1) { SummonDice(); }
else { Instantiate(diceObjects[randomDice], summonPoints[randomPoint - 1].position, summonPoints[randomPoint - 1].rotation); summonList.Add(randomPoint); cnt++; } }
๋ฆฌ์คํธ ๋์ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ฐ๋ผ๋ ๋ง์ธ๊ฐ?
SummonPoint๋ ๋๊ฐ ์คํฌ๋ฆฝํธ ๋ง๋ค์ด์ ๊ฒ์์ค๋ธ์ ํธ์ ์ง์ด๋ฃ๊ณ , summonPoints[i] ์ฝ๋๋ฅผ ์ ๋ถ summonPoints[i].transform์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด๋จ
์ง์ง ๋ฏธ์ํ๋ฐ ์คํฌ๋ฆฝํธ์์ ์ํ๋ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ์ด๋ค ํ์์ผ๋ก ๋ด์์ผ ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ด ใ ใ
๊ทธ๋๊น SummonPoint๋ผ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด์ ์ํ์ฅ์์๋ค๊ฐ ๋ฃ์ผ๋ผ๋๊ฑฐ์ผ?
ใ ใ ๋ฃ๊ณ ํ๋ฆฌํน์ผ๋ก ๋ง๋ค์ด
SummonPoint ์คํฌ๋ฆฝํธ ์์๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ด๋ ๋ด์ฉ์ด๋ฉด ๋๋๊ฑฐ๊ณ ?
ใ ใ
๊ทธ๋ผ public SummonPoint[] summonPoints; ์ด๊ฑด ๋ฌด์จ ๋ป์ด์ผ? ์ด๊ฑธ ์ํํ๋ ์คํฌ๋ฆฝํธ์ ๋ฃ๋๊ฑฐ์ผ ์๋ SummonPoint ์คํฌ๋ฆฝํธ์ ๋ฃ๋๊ฑฐ์ผ?
๊ทธ๋ฆฌ๊ณ ์ํ๋ ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ์ฒดํฌํด์ ๋ฃ์ด??
summonpoints๋ ์๋ํ๋์์ผ๋ก ๋๋๊ทธ๋๋ํด์ ๋์ผ๋ฉด๋๊ณ ์์ ์ํ๋ ๊ฐ์ฒด๋ ์ํํ ๋ ๋ฃ์ผ๋ฉด๋จ summonpoints[i].list.Add(Instantiate(...))์ด๋ฐ์์ผ๋ก
์ ๊ทธ๋ ๊ฒ ํ๋ฉด ๊ฐ์ฒด ์์ฒด๊ฐ ๋ค์ด๊ฐ๋๊ฑฐ์ผ? ๊ทผ๋ฐ ์ํ ์ฅ์๊ฐ ์ธ๊ฐ์ค์ ๋๋ค์ผ๋ก ๋๋๊ฑด๋ฐ ๊ทธ๊ฑด if๋ฌธ์ด๋ switch๋ฌธ์ผ๋ก ๋๋ ค์ผํ๋
์์GameObject๋ก ๋ฃ์ผ๋ฉด ๋ถ๋ชจ์ค๋ธ์ ํธ์์ transform.Getchild(index) ํจ์๋ก ์์์ค๋ธ์ ํธ์ค์ ๋ช๋ฒ์งธ ์ค๋ธ์ ํธ๊ฐ์ ธ์ฌ์์์
์ํํ๋ ํจ์๊ฐ UI ๋ฒํผ์ ์๋๋ฐ ๊ทธ๋ผ SummonPoint๋ ์ํ์ฅ์ ์์๊ฐ์ฒด์ ๋๊ณ ํ์๊ฐ์ฒด์์ ์ ๋ณด๊ฐ ๋ฐ์์์ ๋ฐํํด์ฃผ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ํํ๋ ํจ์์์ ๊ฐ์ ธ์์ ํ์ธํ๋ฉด ๋๋๊ฑด๊ฐ?
์ด์๋ SummonPoint ์คํฌ๋ฆฝํธ์์ ์๊ณ
ui์ ์์ผ๋ฉด ์์์ผ๋ก ๋์ผ๋ฉด ์๋๊ณ ๋น ๊ฒ์์ค๋ธ์ ํธ์ ๋ฃ๊ณ ๊ทธ ์ค๋ธ์ ํธ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉด๋์ง. public Summonpoint[] summonPoints;์ฌ๊ธฐ์ ์ค๋ธ์ ํธ ์ ๋ณด์์ผ๋ ๊ตณ์ด ์์์ผ๋ก ๋ฃ์ง ์์๋ ๋จ. ๊ธฐ๋ณธ์ ์ธ ๊ฒ์์ค๋ธ์ ํธ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๋๊ฑฐ ๊ฐ์ผ๋ ์ ํ๋ธ์์ Unity Defense Game ์ณ์ ๊ฐ์ ํ๋ฒ๋ฐ๋ผ๋ง๋ค์ด๋ด. ํผ์ ๋จธ๋ฆฌ์ธ๋งค๋ฉด์ ํ๋๊ฒ๋ณด๋ค ๋ช๊ฐ ๋ฐ๋ผํ๋ฉด์ ๋ง๋ค์ด๋ณด๋ฉด ์๊ฐ์ ํ๋ฆ์ด ๋ฐ๋
์ฐพ์๋ดค๋๋ฐ ๋ณผํธ ์จ์ ํ๊ณ ๋ง ๋ณต์กํ๋๋ผ๊ณ ์ค๋๊น์ง ๋ด์ผํ๋ ๊ณผ์ ๋ผ ๊ธํ๊ฒ ๋ง๋ค๋ค ๋ณด๋ ํ๋ํ๋ ๋ฐ๋ผํ ์๊ฐ์ด ์๋ค ใ
์คํฌ๋ฆฝํธ์ public ๋๋๊ทธ์ค๋๋์ผ๋ก ๋ด๊ธด ๊ฒ์์ค๋ธ์ ํธ์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ ธ์ฌ ๋ฐฉ๋ฒ์ ์๊ฒ ์ง? ์์์ด ์๋์ง ํ์ธํ ๊ฑธ ์ํํ๋ ํจ์์์ ๋ถ๋ฌ์ค๋ ค ํ๋๋ฐ ์ํ์ฅ์ ๊ฐ๊ฐ์์ ์์์ ํ์ธํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค
GameObject์ ์คํฌ๋ฆฝํธ๋ GetComponent() ํจ์๋ก ๊ฐ์ ธ์ฌ์์์ public Summonpoints[] summonPoints;๋ก ๊ฐ์ง๊ณ ์์ผ๋๊น for ๋ฌธ ๋๋ฆฌ๋ฉด ๋๋๊ฑฐ๊ณ ๋๊ฐ ๋๋๊ทธ์ค ๋๋ํด์ ๋ฃ์ด์คฌ์ผ๋๊น Summonpoints์คํฌ๋ฆฝํธ์ ์๋ public ํจ์๋ ๋งด๋ฒ๋ณ์ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํจ
์ค ใณใณ ๊น์ฝ ์ฃผ๊ณ ์ถ์๋ฐ ์ต์ฑํ๋ ์ด์ด์ฃผ๋ผ
ใดใด
ใ ใ ใ ใ ใณใณ summonPoints[i].GetComponent() ์ด๋ฐ์์ผ๋ก ์ฐ๋๊ฑด๊ฐ??
์ ๋๋ ๋ฒํผ์ ๋ค์ด๊ฐ ์๋ ์ํํ๋ ์คํฌ๋ฆฝํธ์์ ๊ฐ์ ธ์ค๊ณ ์ถ์๊ฑด๋ฐ ์ผ๋จ ์ ํ๋ธ ๋ด๋ณผ๊ฒ
์ผ๊ฐํ ๊ดํธ์๋ค๊ฐ ์คํฌ๋ฆฝํธ ์ด๋ฆ ๋ฃ์ด์ค์ผํด ์ฌ๊ธฐ์ ์์จ์ง๋๊น unity GetComponent๊ตฌ๊ธ ๊ฒ์ํด
ใ ใ ๊ณ ๋ง์ ์ ๊ทธ๋๋ ๊ตฌ๊ธ๋ก๋ ์ดํด๊ฐ ์๊ฐ์ ์ ํ๋ธ ์ณ์ ๋ณด๋ ค๊ณ ํ๋์ค์ด์์ด
๊ทผ๋ฐ ๋๊ฐ์ ์คํฌ๋ฆฝํธ ์ด๋ฆ์ด ์ธ๊ฐ์ธ๋ฐ ๊ทธ ์ค์ ์ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ผ์ฐพ์?
์ํ์ง์ ์ ๊ฐ๊ฐ ์ง์ด๋ฃ์์ผ๋๊น getComponentํ๋ฉด ํด๋น์ค๋ธ์ ํธ์ ์คํฌ๋ฆฝํธ ๋ถ๋ฌ์์ง
๋๋ฌด ๋ค ๋ฌผ์ด๋ณด๋ ๊ฒ ๊ฐ์์ ๋ฏธ์ํ๋ค
for (int i = 1; i < HOWMANYPOINTS + 1; i++) { summonPoints[i] = GetComponent(); } ์ด๊ฑฐ ํด ์ฃผ๊ณ summonPoints[resultPoint - 1].isNull() == 0 ์ด๋ ๊ฒ ์ฐ๋๊ฒ ์๋๊ฐ?
๋์ ํ ๋ด ๋๊ฐ๋ฆฌ๋ก๋ ์ ๋๊ฒ ๋ค. ๊ทธ๋ฅ ๋ฆฌ์คํธ ๋ง๋ค์ด์ ๋ฝํ๋ฉด ์ง์์ผ๊ฒ ๋ค
private void Awake() { Debug.Log(1); for (int i = 0; i < HOWMANYPOINTS ; i++) { list[i] = i; Debug.Log(list.Count); } }์ด๋ ๊ฒ ํ๋๋ฐ 1๋ง ๋จ๊ณ ์ฝ์์ฐฝ์ ๋ค๋ฅธ๊ฑด ์๋ฌด๊ฒ๋ ์ ๋ธ๋ญ๊ฐ ๋ฌธ์ ์ผ๊น ใ ใ
์ ใ ใ list๋ฅผ ์ฒดํฌํด์ผํ๋๋ฐ summonPoint ์์๊ฐ์ฒด ์ฒดํฌํด์ ์ ๋๋ ๊ฑฐ์๋ค ใ ใ ใ ใ
https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=70720&page=1