๋ชฉ๋ก์ ์ฒด ๊ธ (1104)
KoreanFoodie's Study

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..

Widget ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ์ ํด๋์ค ๋ฉค๋ฒ ๋ณ์ ์ฐ๋ (bind) ํ๊ธฐ ๊ฒ์์ ํ๋ ์ดํ๋ค ๋ณด๋ฉด ์์ดํ ๋ง๋ค ๋ค๋ฅธ ์ค๋ช ์ฐฝ์ด ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ, ์ฌ์ค ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ ฏ(์ฐฝ)์ ๋๊ฐ์ด ์๊ฒผ์ง๋ง, ๋ด์ฉ๋ฌผ์ ๋ค๋ฅธ ๊ฒ์ ์ ์ ์๋๋ฐ... ์์ ฏ์ ๋ค์ด๊ฐ๋ ๋ด์ฉ๊ณผ ํด๋์ค์ ์ ๋ณด๋ฅผ ์ฐ๋ํ๋ฉด ์์ ฏ์ ๋ด์ฉ์ ์์ดํ ์ ๋ง๊ฒ ๋์ ์ค ์ ์๋ค. ์์๋๋ก ์ด๋ฅผ ๋ง๋ค์ด ๋ณด์. 1. ๋จผ์ Widget Blueprint ๋ฅผ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด์ฉ๋ฌผ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ์ฑ์๋ฃ๋๋ค. 2. ํด๋น ์์ ฏ์ ๋์ธ ํด๋์ค์์ ์์ ฏ ์ปดํฌ๋ํธ๋ฅผ ์ ์ธํ๊ณ , ์ด๋ฅผ ๋ฃ์ด ์ค๋ค. item.h /* Popup widget for when the players look at the item */ UPROPERTY(EditAnywhere..

int8 ์ด ์ธ์๋? ๋ฌผ๋ก Visual Studio ์์๋ int8 ์ ์๋ง ์ธ ์ ์๋ค. ํ์ง๋ง ๋ง์ฝ int8 ๋ณ์๋ฅผ ์ธ๋ฆฌ์ผ์์๋ ์ฐ๋ ค๊ณ ํ๋ค๋ฉด... /* Item count (ammo, etc) */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Item Properties", meta = (AllowPrivateAccess = "true")) int8 ItemCount; ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ฐพ์๋ณด๋ ๋ฒ๊ทธ ํฝ์ค๋ฅผ ์์ฒญํ๋๋ฐ... ๋จ์ํ ์ธ๋ฆฌ์ผ์์๋ int8 ์ ์ง์ํ์ง ์์์ ๊ทธ๋ฐ๊ฒ ์๋๊น? ๋ญ, uint8 ์ ์ง์ํ๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ ์ํ ๊ฒ์ด ๋ชฉ์ ์ด๋ผ๋ฉด uint8 ์ ์ฐ๋ฉด ๋๊ฒ ๋ค. int8 ์ ์จ์ ์๋ฌ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ, ์ด๋์ ์๋ฌ๊ฐ ์๊ฒผ๋์ง ์ง์ด์ฃผ..

ํค๋์ท ๊ตฌํํ๊ธฐ (๋ถ์๋ณ ํผ๊ฒฉ ๋ฐ๋ฏธ์ง ์ค์ ) FPS ๊ฒ์์ ํ๋ค๋ณด๋ฉด ํค๋์ท์ ์ถ๊ฐ ๋ฐ๋ฏธ์ง (ํน์ ์ฆ์ฌ) ๋ฅผ ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ด๋ ์ด๋ป๊ฒ ๊ตฌํํ๋ฉด ๋ ๊น? ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก๋, ์ผ๋จ ์ด์์ ๋ง์ Enemy ํด๋์ค ๋ด Skeletal Mesh ์ Bone Name ์ ์ฐธ๊ณ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ค์ผ๋ ํค ํธ๋ฆฌ๋ฅผ ๋ณด๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด head ๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด์ ๋ฐ๋ฏธ์ง๋ฅผ ๋ฐ๋ ํจ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ฉด ๋๋ค. AEnemy* HitEnemy = Cast(BeamHitResult.Actor.Get()); if (HitEnemy) { if (BeamHitResult.BoneName.ToString() == HitEnemy->GetHeadBone()) { // Head shot } else {..