๋ชฉ๋ก์ ์ฒด ๊ธ (1110)
KoreanFoodie's Study
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 {..
Does Implement Interface ๊ธฐ๋ฅ์ผ๋ก ๋ฐ๋ฏธ์ง, ์ธํฐ๋์ ๊ตฌํํ๊ธฐ ์ด์ ์์์๋, ๋ง์ ๋์์ด Enemy ์ด๋ฉด ๋ฐ๋ฏธ์ง๋ฅผ ์ ๋ฌํ๊ณ ์ถ๊ฑฐ๋, ๋ง์ฝ ์ํธ์์ฉ ๊ฐ๋ฅํ ์ค๋ธ์ ํธ์ธ ๊ฒฝ์ฐ ์ํธ์์ฉ์ ํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํ์. ํด๋น ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๊ตฌํํ๋ฉด ์ข์๊น? ๋ฌผ์ฒด์ ๊ฒฝ์ฐ, ๊ฐ ๋ฌผ์ฒด์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ๋ ๊ฒฝ์ฐ๋ ์๊ฐํด ๋ณผ ์ ์๊ฒ ์ง๋ง, ๋ฐฐ์น๋๋ ๋ชจ๋ ์ค๋ธ์ ํธ๋ง๋ค ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ๋ก ์ค์ ํด์ผ ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ฌด ๋์ฐํ ๊ฒ์ด๋ค. ๋ฐ๋ฏธ์ง์ ๊ฒฝ์ฐ, ์ด์ ๋ง์ ์กํฐ๊ฐ ๋ฐ๋ฏธ์ง๋ฅผ ๋ฐ์ ์ ์๋์ง ์๋์ง๋ฅผ ์ด๋ป๊ฒ ํ๋ณํ๋ฉด ์ข์๊น? ์ฌ์ค Enemy ๋ง๊ณ ๋ ๋ถ์ ์ ์๋ ์ค๋ธ์ ํธ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋ฏธ์ง๋ฅผ ๋ฐ์์ผ ํ ํ ๋ฐ, ๊ฐ ํด๋์ค๋ง๋ค ๋ฐ๋ฏธ์ง๋ฅผ ๋ฐ๋์ง ์ ๋ฐ๋์ง๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋งค์ฐ ๊ท์ฐฎ์ ์ผ์ด๋ค. ์ธ๋ฆฌ์ผ์์๋ Does Implemen..
1์ธ์นญ ์์ ๊ตฌํํ๊ธฐ ์ผ๋ฐ์ ์ผ๋ก ์ธ๋ฆฌ์ผ์ ์ฒ์ ๋ฐฐ์ธ๋๋ ๋ค๋ค 3์ธ์นญ์ผ๋ก ์์ํ๋๋ฐ, 3์ธ์นญ์ FPS ์ ๊ฒฝ์ฐ ์์ ๊ณผ ๋์์ด ํจ๊ป ์์ง์ด์ง ์๋ ํน์ง์ด ์๋ค. ๋ฐ๋ผ์, ์์ ์ ๋ฐ๋ฅ์ ๋ฐ๋ผ๋ณด๋๋ฐ ํ์ ์ด์ ๋ ์ํ๋ก ์์ ํฅํ๊ณ ์๋ ๋ถ์์ฐ์ค๋ฌ์ด ์ํฉ์ด ์ฐ์ถ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ฐ, ๋ฐ๋ก FirstPersonBP (์์์ฉ ์ปจํ ์ธ ) ์ฒ๋ผ, ๊ธฐ๋ณธ์ผ๋ก ์ฃผ์ด์ง๋ Skeletal Mesh ๋ฅผ Clear ํ๊ณ , ์นด๋ฉ๋ผ์ ์์(Children)์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ Skeletal Mesh ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค. ์๋ง์ Skeletal Mesh ๋ฅผ ์ฐ๊ฒฐํ ๋ค์, ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ Animation Blueprint ๋ฅผ ์ ํ๋ง ํด์ฃผ๋ฉด, ์ ๋๋ฉ์ด์ ๋ ์ ์ฌ์๋ ๊ฒ์ด๋ค.
UFUNCTION ๊ณผ FORCEINLINE ์ผ๋ฐ์ ์ผ๋ก, UFUNCTION ๊ณผ FORCEINLINE ์ ํธํ๋์ง ์๋๋ค. ์ฐ๋ฆฌ๊ฐ UFUNCTION ์ ๋ถ์ด๋ ์ด์ ๋ ๋๊ฐ ๋ธ๋ฃจํ๋ฆฐํธ์์ ํด๋น ํจ์๋ฅผ ํธ์ถํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ, C++ ์์ ์์ฑ๋ ์ฝ๋๋ฅผ BP ์์ ์ฝ์ด์ค๋ ค๋ฉด, FORCEINLINE ์ ๋ถ์ด์ง ์์์ผ ํ๋ค(Function call ์ ํํ์ด์ด์ผ ํจ). ๋ฐ๋ผ์ ์๋์ ๊ฐ์ ํจ์๋ ๋ธ๋ฃจํ๋ฆฐํธ์์ ์ธ์๋์ง ์๋๋ค. UFUNCTION(BlueprintCallable) FORCEINLINE void Foo() {}