๋ชฉ๋ก2022/07 (14)
KoreanFoodie's Study

Udemy ๊ด๋ จ ๊ฐ๋ ์ ๋ฆฌ ๋ฐ Dev Log ๋ฅผ ๊ธฐ๋กํ๊ณ ์์ต๋๋ค! Monobehaviour ์ ๋ํฐ์๋ Monobehaviour ๋ผ๋ ํด๋์ค๊ฐ ์๋ค. ์ฌ์์ GameObject ๋ก ์ฌ์ฉํ๋ ํด๋์ค๋ Monobehaviour ๋ฅผ ์์ํ๊ฒ ๋๋๋ฐ, Monobehaviour ์๋ ๋ค์ํ ๋ด์ฅ ๋ฉ์๋๋ค์ด ์๋ค. Awake, Start ์ฒ๋ผ ์ด๊ธฐํ์ ์ฐ์ด๋ ๋ ์๋ ์๊ณ , OnEnable ์ด๋ OnDisable ์ฒ๋ผ ํด๋น ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๊ป๋ค ํฌ๋ ( SetActive( ) ํจ์ ํธ์ถ ํน์ .enabled ๊ฐ ๋ณ๊ฒฝ ) ํธ์ถ๋๋ ํจ์๋ค๋ ์๋ค. ์ค์ํ ๊ฒ์, ์ด๋ค ํจ์๊ฐ ์ด๋ค ์์๋ก ํธ์ถ๋๋์ง๋ฅผ ์์์ผ ํ๋ค๋ ๊ฒ์ด๋ค! ์ด ๋งํฌ์ ์ ๋ฆฌ๋ ์ฌ์ง์ ๊ฐ์ ธ์จ ๊ฒ์ด๋ค. ํนํ ์ฃผ์ํด์ผ ํ ์ฌํญ์ผ๋ก๋, Spawner ํด๋์ค์์ ์..

Unreal unresolved external symbol ์๋ฌ ์ค๋๋ง์ ์ธ๋ฆฌ์ผ์ ์ผฐ๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก, ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋๋๋ฐ.... 1. ํจ์๋ฅผ ์ ์ธ๋ง ํ๊ณ ๊ตฌํ์ ์ํจ ๋ง์ปค์์ ์๋ฌ๊ฐ ๋ฌ๋ค๋ ๊ฑด, ๋งํน ๊ณผ์ ์์ ์ ์ ํ ํจ์๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ ์๋ฏธ์ด๊ธฐ๋ ํ๋ค. ๋ฐ๋ผ์ ์ ์ธ๋ง ํด๋๊ณ ์ค์ ๋ก ๊ตฌํ์ ํ์ง ์์ ๋ฉ์๋๊ฐ ์๋์ง ์ฒดํฌํด๋ณด๋๋ก ํ์! ๊ทผ๋ฐ ์ด ๊ฒฝ์ฐ๋ ๊ตฌํ์ด ์๋ ํจ์๊ฐ ์๋ค๊ณ ์๋ ค์ค์ ์ฌ์ด๋ฐ... 2. ์ ์ ํ ๋ชจ๋์ ์ถ๊ฐํ์ง ์์ ์ฌ์ค ์ด ๊ฒฝ์ฐ๊ฐ ๋งค์ฐ๋งค์ฐ ๋นก์น๋ค. ์๋ํ๋ฉด ๋ช ์์ ์ผ๋ก ์์ธ์ด ๋๋ฌ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์๋ฌ๋ก๊ทธ๋ฅผ ์ ๋ณด๋ฉด ํํธ๋ฅผ ์ฐพ์ ์ ์๋๋ฐ... ์ค์ ์์๋ฅผ ๋ณด์. ์ ๊ฒฝ์ฐ์์๋, ์ ๋ณด๋ฉด LNK2019 ์๋ฌ์์ BehaviorTree ๊ด๋ จ์..

ํ๋ ์ด์ด ์บ๋ฆญํฐ ์ ๋๋ฉ์ด์ ์ค์ ํ๊ธฐ ํน์ ๋์์ ํ ๋ ํน์ ์ ๋๋ฉ์ด์ ์ด ์ฌ์๋๋๋ก ํ๋ ๊ธฐ๋ฅ์ ์ ๋๋ฉ์ดํฐ ์ปจํธ๋กค๋ฌ์ ์ ๋๋ฉ์ดํฐ๋ฅผ ํตํด ๊ฐ๋ฅํ๋ค. ๋จผ์ ์ ๋๋ฉ์ดํฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ์. Project ์ฐฝ์์ ์์ฑ ๊ฐ๋ฅํ๋ค. ์ ๋๋ฉ์ดํฐ ์ฐฝ์ผ๋ก ์ด๋ํด ๋ณด์. ์ด์ ์ ๋ง๋ ์ ๋๋ฉ์ด์ ํด๋ฆฝ๋ค์ด ๋จ๊ฒ ๋๋ค. ํน์ ๋์์ ๊ธฐ๋ณธ ์ํ๋ก ์ ์ํ๊ณ ์ถ์ ๋๋ Set as Layer Default State ๋ก ์ค์ ํ๋ฉด ๋๋ค. ์ฐํด๋ฆญ ํ Make Transition ์ ํตํด ์ํ๋ฅผ ์ ์ด์ํฌ ์ ์๋ค. Any State ์ํ์์ ์ ํ์ ํ ๊ฒฝ์ฐ, ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ๋ฌด์กฐ๊ฑด ํน์ ์ํ๋ก ์ ์ด๊ฐ ๋๋ค. Exit ์ ๊ฒฝ์ฐ ์ํ ๋จธ์ ์ ๋์์ด ์ข ๋ฃ๋๋ ์ถ๊ตฌ๋ฅผ ์๋ฏธํ๋ค. ์ ์ด๊ฐ ์ธ์ ๋ฐ๋๋ ์ง์ ์กฐ๊ฑด์ ์ ๋๋ฉ์ดํฐ ์ปจํธ๋กค๋ฌ์ ํ๋ผ๋ฏธํฐ๋ฅผ..

์บ๋ฆญํฐ ์ ๋๋ฉ์ด์ ํด๋ฆฝ ๋ง๋ค๊ธฐ ๋จผ์ , ์ ๋๋ฉ์ด์ ์ฐฝ์ ์ฐ๋ค. Player ์ค๋ธ์ ํธ๋ฅผ ํด๋ฆญ ํ, Create ๋ฅผ ๋๋ฅธ๋ค. ๊ทธ ํ, ์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ค๋ ์ ๋๋ฉ์ด์ ์ ํ์ํ ์คํ๋ผ์ดํธ๋ค์ Animation ์ฐฝ์ผ๋ก ๋๋๊ทธ&๋๋ํ๋ค. ๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ํด๋นํ๋ ํคํ๋ ์ ์์ ์คํ๋ผ์ดํธ๋ค์ด ์ฌ๋ผ๊ฐ๋๋ฐ, Samples ๊ฐ์ ์กฐ์ ํด ์๋๋ฅผ ์กฐ์ ํ ์ ์๋ค. Samples ์ ๊ฐ์ 1์ด๋น ์คํ๋ผ์ดํธ๊ฐ ์ผ๋ง๋ ์์ฃผ ๊ต์ฒด๋๋์ง๋ฅผ ์๋ฏธํ๋ค. ์ด์ Die ์ ๋๋ฉ์ด์ ํด๋ฆฝ์ ๋ง๋ค์ด ๋ณด์. Run ์์ Create New Clip... ์ ๋๋ฅด๊ณ , Die.anim ์ผ๋ก ์ ์ฅํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก Samples ๊ฐ์ ์ค์ ํ๋ค. Die ์ ๊ฒฝ์ฐ ๋ฑ ํ ๋ฒ๋ง ์ฌ์๋ ๊ฒ์ด๋ฏ๋ก ๋ฃจํ๋ฅผ ํด์ ํ๋ค. ์ด์ ๋ค์์ผ๋ก๋ FSM (์ ํ ์ํ ๋จธ์ ) ์ ์ด์ฉํด..

์ ๋ํฐ์์ ์ค๋์ค (์๋ฆฌ) ์ฌ์ํ๊ธฐ ์ ๋ํฐ์์ ํ๋ ์ด์ด๊ฐ ์๋ฆฌ๋ฅผ ๋ด๋๋ก ๋ง๋ค๊ณ ์ถ์ ๋๋, ์ค๋์ค ์์ค ์ปดํฌ๋ํธ๋ฅผ ๋ถ์ด๋ฉด ๋๋ค. ๊ทธ ํ, ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ AudioClip ๊ณผ AudioSource ๋ณ์๋ฅผ ์ ์ํ๊ณ , ํ๋ ์ด์ด ์คํฌ๋ฆฝํธ์ AudioClip ๋ณ์์ ์ ์ ํ ์ค๋์ค ์์ค ํ์ผ์ ๋๋๊ทธ&๋๋ํด์ ๋ฃ์ด์ค ๋ค์, ์ค์ ํ์ด๋ฐ์ ๋ง๊ฒ Play ๋ PlayOneShot ๋ฑ์ ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ๋๋ค! ํน์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํด๋ ๋๋ค : // ์ค๋์ค ์์ค ์ปดํฌ๋ํธ์ ๋ด์ฅ๋ ํด๋ฆฝ์ ๋ณ๊ฒฝ playerAudioPlayer.clip = deathClip; playerAudioPlayer.Play(); ์ค๋์ค ์์ค ์ปดํฌ๋ํธ๊ฐ ์ฌ์ํ๋ ์๋ฆฌ๋ ์ค๋์ค ๋ฆฌ์ค๋ ์ปดํฌ๋ํธ๊ฐ ๋ฃ๋๋ค. MainCamera ์ ๊ฒฝ์ฐ, Audio..

์คํ๋ผ์ดํธ ์๋ฅด๊ธฐ ํฝ์ ์ํธ ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํด์, ๊ฐ๋จํ ์คํ๋ผ์ดํธ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค์ด ๋ณด์. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ์บ๋ฆญํฐ๊ฐ ์ฃฝ๋ ์คํ๋ผ์ดํธ๊ฐ ํ๊บผ๋ฒ์ ํ ํ์ผ๋ก ๋ค์ด์๋ค๊ณ ํด ๋ณด์. Inspector ์ฐฝ์์ Sprite Mode ๋ฅผ Multiple ๋ก ๋ฐ๊พผ ๋ค์,Sprite Editor ๋ฅผ ์ด์. ์คํ๋ผ์ดํธ ์๋ํฐ ์ผ์กฑ ์๋จ์ Slice ์์ Grid By Cell Size ๋ฅผ ํด๋ฆญํ๋ค. ๊ทธ ํ ์ ์ ํ ์ฌ์ด์ฆ๋ก ์คํ๋ผ์ดํธ๋ฅผ ์๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์คํ๋ผ์ดํธ๊ฐ ์๋ฆฐ ๊ฒ์ ํ์ธํ ์ ์๋ค! ์ค๋ฅธ์ชฝ ์๋จ์ Apply ๋ฅผ ๋๋ฅธ ํ ์ข ๋ฃํ์.

์ง์ญ ๊ณต๊ฐ๊ณผ ์ ์ญ ๊ณต๊ฐ ์์ ํ๋ธ๋ y ์ถ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ ๊ฐํด์ก๋ค. ํ์ฌ ํธ๋์คํผ์ ์ขํ๊ณ๋ ์ง์ญ๊ณต๊ฐ์ผ๋ก ๋์ ์๋๋ฐ, ์ด๋ฅผ ์ ์ญ ๊ณต๊ฐ (๊ฒ์ ์๋๋ฅผ ๊ธฐ์ค) ์ผ๋ก ๋ฐ๊ฟ์ ์ฎ๊ฒจ๋ณผ ์๋ ์๋ค. ์ง์ญ ๊ณต๊ฐ์ ๋ถ๋ชจ ์ค๋ธ์ ํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ฉฐ, ์ค๋ธ์ ํธ ๊ณต๊ฐ์ ์๊ธฐ ์์ ์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ์ง์ญ ๊ณต๊ฐ์ด ๋ถ๋ชจ ์ค๋ธ์ ํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๊ธฐ ๋๋ฌธ์, ํ๋ธ A ์ ์์ ํ๋ธ B ๋ฅผ ์ค์ ํ ํ ํ๋ธ A ๋ฅผ ํ์ ํ๋ฉด, ํ๋ธ B ์ ๊ณต๊ฐ๋ ํ์ ๋ ์ํ๋ก ํธ๋์คํผ์ด ์ด๋๊ณผ ํ์ ์ด ์ด๋ฃจ์ด์ง ๊ฒ์ด๋ค. ์ธ์คํํฐ ์ฐฝ์ ํ์๋๋ ์์น, ํ์ , ์ค์ผ์ผ์ ์ง์ญ ๊ณต๊ฐ ๊ธฐ์ค์ผ๋ก ์ธก์ ๋ ๊ฐ์ด๋ค. ํํ์ด๋๊ณผ ํ์ ์์ // ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ญ ๊ณต๊ฐ์ ๊ธฐ์ค์ผ๋ก ํํ์ด๋ transform.Translate(new Vector3(0, 1, 0) * Time...

Udemy ๊ด๋ จ ๊ฐ๋ ์ ๋ฆฌ ๋ฐ Dev Log ๋ฅผ ๊ธฐ๋กํ๊ณ ์์ต๋๋ค! ์ ๋ํฐ Awake ์ Start ์ฐจ์ด ์ ๋ํฐ์์ Awake ์ Start ๋ ๋ ๋ค ์ด๊ธฐํ๋ฅผ ๋ด๋นํ๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ค ์ฐจ์ด๊ฐ ์๋ ๊ฑธ๊น? Awake() : ๋ชจ๋ ๋ณ์์ ๊ฒ์์ ์ํ๋ฅผ ์ด๊ธฐํํ๊ธฐ Awake ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฒ์์ด ์์๋๊ธฐ ์ ์ ํธ์ถ (start ๋ณด๋ค ๋จผ์ ํธ์ถ) ๋๋ฉฐ, ๋ชจ๋ ์ค๋ธ์ ํธ๊ฐ ์ด๊ธฐํ๋๊ณ ํธ์ถ๋๋ค. ๋ฐ๋ผ์ GameObject.FindWithTag ๋ฅผ ์ด์ฉํด ํด๋น ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์์ฒํ๊ฑฐ๋ ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ์์ ํ๊ฒ ์ํธ์์ฉ๊ธฐ ๊ฐ๋ฅํ๋ค. [์ฃผ์] : ๊ฐ ๊ฒ์ ์ค๋ธ์ ํธ์ Awake() ๋ ๋๋ค ์์๋ก ์คํ๋๋ฏ๋ก, ์คํฌ๋ฆฝํธ๊ฐ์ ์ฐธ์กฐ(reference) ๋ฅผ ์ค์ ํ๊ธฐ ์ํด Awake ๋ฅผ ์ฌ์ฉํ๊ณ , ์ ๋ณด๋ฅผ ๋ณด๋ด๊ณ ๋ฐ๋ ๊ฒฝ์ฐ์๋ St..

Udemy ๊ด๋ จ ๊ฐ๋ ์ ๋ฆฌ ๋ฐ Dev Log ๋ฅผ ๊ธฐ๋กํ๊ณ ์์ต๋๋ค! ์ ๋ํฐ์์ ์ผ์์ ์งํ๊ธฐ ์ ๋ํฐ์์๋ ์ผ์ ์ ์ง ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๊ตฌํํ๋ฉด ๋ ๊น? ๋จผ์ ๊ฒฐ๋ก ๋ง ๋งํ์๋ฉด, Time.timeScale ๊ฐ์ ์กฐ์ ํ์ฌ Time.deltaTime ์ 0 ์ผ๋ก ๋ง๋๋ ๋ฐฉ์์ ์ด์ฉํ๋ฉด ๋๋ค. void PauseGame () { Time.timeScale = 0; } void ResumeGame () { Time.timeScale = 1; } ์ด๋ฐ ๋ฐฉ์์ ์ด์ฉํ๋ฉด, ๊ฐ ๊ฒ์ ์ค๋ธ์ ํธ๋ค์ Update ๋ด ํจ์์์ Time.deltaTime ์ ์์กดํ๋ ๋ชจ๋ ๋์์ด ๋ฉ์ถ๊ฒ ๋๋ค. ์ด ๋ง์์ฆ์จ, Time.deltaTime ์ ์์กดํ์ง ์๋ ๋ ์๋ค์ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ์ผ์์ ์ง๋ผ๋ ๋ณธ์ฐ์ ๋ชฉ์ ๊ณผ ๋ค๋ฅธ ๋์์ ํ ์ ์์์ ์๋ฏธํ๋ค..

์ ๋ํฐ ๊ณต๋ถ ๋ ธํธ Touch Input ์ด์ฉ์ ์๋ฌ? ๋ถ๋ช ํ ์๋ํฐ์์๋ ๋ง์ฐ์ค ํด๋ฆญ ์ ๋ ฅ์ผ๋ก ์ ๋์ํ๋๋ฐ, ๋ชจ๋ฐ์ผ๋ก ๋น๋ํ๋ ์ ๋๋ก ์๋์ ํ์ง ์์ ์์ธ์ ํ์ ํ๋ ์ค, Input ๊ด๋ จ์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๊ธฐ์กด์๋ ํฐ์น ์ ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ์๋๋ฐ... (ํ๋ต) if (Input.GetTouch(0).phase == TouchPhase.Began) { JumpButtonPressed(); } ๊ทผ๋ฐ ์ด ๊ฒฝ์ฐ, argumentexception: index out of bounds ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค. ์ด๋ ํฐ์น ์์ฒด๊ฐ ์๋๋ฐ, Input ์์ Touch ์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ธ์ค๋ ค ํด์ ์๊ธด ๋ฌธ์ ์๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ, Touch ๋ฐฐ์ด์ด ๋น์ด์์ง ์์์ง ์ฒดํฌํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋..