๋ชฉ๋ก์ ์ฒด ๊ธ (1096)
KoreanFoodie's Study
์ ๋ํฐ์์ ์ค๋์ค (์๋ฆฌ) ์ฌ์ํ๊ธฐ ์ ๋ํฐ์์ ํ๋ ์ด์ด๊ฐ ์๋ฆฌ๋ฅผ ๋ด๋๋ก ๋ง๋ค๊ณ ์ถ์ ๋๋, ์ค๋์ค ์์ค ์ปดํฌ๋ํธ๋ฅผ ๋ถ์ด๋ฉด ๋๋ค. ๊ทธ ํ, ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ 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 ๋ฐฐ์ด์ด ๋น์ด์์ง ์์์ง ์ฒดํฌํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋..
Udemy ๊ฐ์ข๋ฅผ ๋ค์ผ๋ฉฐ ๋ด์ฉ ๋ณต์ต์ ์ํด ๊ธฐ๋กํ๋ ๊ธ์ ๋๋ค ์ ๋ํฐ #1-4 : tag ์ฌ์ฉํ๊ธฐ ์ ๋ํฐ๋ tag ๋ฅผ ์ด์ฉํด ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ฝ๊ฒ ์๋ณํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํ๋ ์ด์ด๊ฐ ์ถฉ๋ํ๋ฉด ์ ์๋ฅผ ์ฌ๋ฆฌ๋ ์ฝ๋๋ฅผ ์ง ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. private void OnCollisionEnter(Collision other) { if (other.gameObject.tag == "Player") { GetComponent().material.color = Color.red; gameObject.tag = "Hit"; } } ์ ์ฝ๋๋ ํ๋ ์ด์ด์ ํด๋น ์ค๋ธ์ ํธ๊ฐ ์ถฉ๋์ ํ๋ฉด ์๊น์ ๋นจ๊ฐ์์ผ๋ก ๋ฐ๊พธ๊ณ , ํ ๊ฒ์ ์ค๋ธ์ ํธ์ ํ๊ทธ๋ฅผ Hit ์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ด๋, ์ถฉ๋ํ ์ค๋ธ์ ํธ๊ฐ ํ๋ ์ด์ด์ธ์ง ์๋์ง ํ๋จ์ ํ๊ธฐ ์ํด..
Udemy ๊ฐ์ข๋ฅผ ๋ค์ผ๋ฉฐ ๋ด์ฉ ๋ณต์ต์ ์ํด ๊ธฐ๋กํ๋ ๊ธ์ ๋๋ค ์ ๋ํฐ #1-3 : Time.time ์ฌ์ฉํ๊ธฐ Time.time ์ ์ฌ์ฉํ๋ฉด, ๊ฒ์์์ ์ผ๋ง๋งํผ์ ์๊ฐ์ด ํ๋ ๋์ง๋ฅผ ์ฒดํฌํ ์ ์๋ค. ๋ค์ ์ฝ๋๋ฅผ ๋ณด์. public class Dropper : MonoBehaviour { [SerializeField] float DropTime = 3.0f; MeshRenderer meshRenderer; Rigidbody DropperRigidBody; void Start() { DropperRigidBody = GetComponent(); DropperRigidBody.useGravity = false; meshRenderer = GetComponent(); meshRenderer.enabled = fal..
Udemy ๊ฐ์ข๋ฅผ ๋ค์ผ๋ฉฐ ๋ด์ฉ ๋ณต์ต์ ์ํด ๊ธฐ๋กํ๋ ๊ธ์ ๋๋ค ์ ๋ํฐ #1-2 : CineMachine ์ฌ์ฉํ๊ธฐ ์ผ๋ฐ์ ์ธ ๊ฒ์๋ค์ ํ๋ ์ด์ด์ ์์ง์์ ์นด๋ฉ๋ผ ์์ ์ด ์ฐ๋๋์ ๊ฐ์ด ์์ง์ธ๋ค. CineMachine ์ ์ฌ์ฉํ๋ฉด ํด๋น ๊ธฐ๋ฅ์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค. ๋จผ์ , Window -> Package Manager ๋ก ๋ค์ด๊ฐ์, Packages ์ค์ ์ Unity Registry ๋ก ๋ฐ๊พผ๋ค. ๊ทธ ํ, Cinemachine ์ ๊ฒ์ํด ์ค์นํ๋ค. Cinemachine ์์ Virtual Camera ๋ฅผ ์์ฑํ๊ณ , MainCamera ์ CinemachineBrain ์ด๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํ๋ค. ์ ์ฌ์ง์์๋ Live Camera ๋ก Virtual Follow Camera ๊ฐ ๋ค์ด๊ฐ ์๋๋ฐ, ์๊น ์ ์ ๋ง๋ Vi..
Udemy ๊ฐ์ข๋ฅผ ๋ค์ผ๋ฉฐ ๋ด์ฉ ๋ณต์ต์ ์ํด ๊ธฐ๋กํ๋ ๊ธ์ ๋๋ค ์ ๋ํฐ #1-1 : SerializeField ์ฌ์ฉํ๊ธฐ๊ธฐ ๋ณ์๋ฅผ ์ ์ธํ ๋, ๋ค์๊ณผ ๊ฐ์ด ์์ [SerializeField] ๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด, ์๋ํฐ ๋ด์์๋ ์ค์๊ฐ์ผ๋ก ํด๋น ๊ฐ์ ์กฐ์ ํ ์ ์๋ค. public class Mover : MonoBehaviour { [SerializeField] float moveSpeed = 10.0f; void Update() { MovePlayer(); } void MovePlayer() { float xValue = Input.GetAxis("Horizontal"); float zValue = Input.GetAxis("Vertical"); transform.Translate(xValue * moveSpeed..