๋ํ ๊ณผ์ ๋ก ์ฒด์ค๊ฒ์์ ๋ง๋ค๊ณ ๊ทธ์๋ง๋ AI๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค.
๊ฐ๋ฐ ์์์
๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค.
๋ณด๋๋ฅผ ๋ํ๋ด๋ ๋ฐฐ์ด๋ก๋
ย ย public GameObject[,] positions = new GameObject[8, 8];
ย ย public GameObject[] playerBlack = new GameObject[16];
ย ย public GameObject[] playerWhite = new GameObject[16];
๊ฐ ์์ต๋๋ค.
ํ์ฌ ํ๋ ์ด์ด์ธก์ด ๋ง์ ์์ง์ด๋ฉด
์ปดํจํฐ๊ฐ ์์ ์ด ์ฒดํฌ์ํ์ธ์ง ํ์ธ -> ์์ ์ด ๊ฐ๋ฅํ ์์ง์ ์๋ฌผ๋ ์ด์ -> ์ฒดํฌ์ ๋ํ ๋ฐฉ์ด์์ง์
์ด๋ฐ์์ผ๋ก ํ๋ํ๊ฒ ํ๋ ค๊ณ ํฉ๋๋ค.
์ปดํจํฐ ์์ ์ ์ฒดํฌํ๋จ์ ์์ฑ๋์๊ณ ์์ง์ ์๋ฌผ๋ ์ด์ ์ ํ๊ธฐ ์ํด ๊ฐ์๋ณด๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ๋ก ๋ง๋ค์๋๋ฐ์
๊ฐ์ ๋ณด๋ ์คํฌ๋ฆฝํธ์์
Game sc = GameObject.FindGameObjectWithTag("GameController").GetComponent<Game>();
ย ย ย ย positions = (GameObject[,])sc.positions.Clone();
ย ย ย ย ย matpositions = (GameObject[,])sc.matpositions.Clone();
ย ย ย ย ย playerBlack = (GameObject[])sc.playerBlack.Clone();
ย ย ย ย ย playerWhite = (GameObject[])sc.playerWhite.Clone();
๋ก ํ์ฌ ๊ฒ์๋ณด๋์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์๋ฌผ๋ ์ด์ ํ๊ณ ๋ง์ ์์ง์ด๋๋ฐ
์ด ์๋ฌผ๋ ์ด์ ํ ๊ฐ๋ค์ด ๊ทธ๋๋ก ํ ๊ฒ์๋ณด๋์ ์ ์ฉ์ด๋ฉ๋๋ค.
์ ๋๋ค๊ฐ AI๊ฐ ์ฒดํฌ๋ฅผ ํ๋จํ์๊ฐ ๊ฑฐ์ ๋ชจ๋ ๋ณด๋์ AI๋ง๋ค์ด ์์ง์ ๋๋ค.
๊ฐ์๋ณด๋ ์คํฌ๋ฆฝํธ์์ ํ ๊ฒ์๋ณด๋์ ๊ด์ฌํ ๋งํ ์ฝ๋๊ฐ ํ๊ฒ์๋ณด๋์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๋๋ฐ์ ์๋๋ฐ..
Clone์ผ๋ก ๋ณต์ฌํด๋ ํ๊ฒ์๋ณด๋๋ฅผ ์ฐธ์กฐํด์ ์ผ์ด๋๋ ์ผ์ธ๊ฑฐ ๊ฐ์ต๋๋ค.
๋ณดํต GameObject๋ฅผ ํต์งธ๋ก ๋ณต์ฌํ ๋ ์ด๋ป๊ฒ ๋ณต์ฌํด์ผ ํ๋์?
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
Cloneํจ์๊ฐ Depp copyํ๋ ํจ์ ์๋๊ฐ์?
์ ์ด๊ฑฐ ์ ๋ ๊ถ๊ธํ๋๋ฐ...
๋ด๊ฐ ์์ ์ ์คํ ์ค๋ฒํ๋ก์ฐ์์ ๋ดค์๋๋ฐ ์ ๋ํฐ Instantiate ๊ฐ deep copy๋ผ๊ณ ํ๋๊ฑฐ ๊ฐ์๋๋ฐ ๊ทผ๋ฐ Instantiate ๋ก ์์ฑ ํ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ณต์ฌ๋ฅผ ํ๋ฉด ๊ทธ๊ฒ๋ ์์๋ณต์ฌ ์๋๊ฐ... ๋๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค
๊ทธ๋ฆฌ๊ณ ์ ๋ํฐ ์์ฒด๊ฐ deep copy๋ฅผ ๋ชปํ๋๊ฒ .net ์ชฝ ๊ฐ์ฒด์ ์์ ์ด๋ฃจ๋ ์์ง ์ชฝ ๊ด๋ฆฌ๋์ง ์๋ ๊ฐ์ฒด๊ฐ ์๊ธฐ์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค
๊ทธ๋ฅ ๊ฐ์ฒด ํ๋ ๋ฝ์์ ๋ฐ์ดํฐ๋ง ์ฎ๊ฒจ ๋ด์ผ์ญ์ผ