뱁 새 |ૂ•ᴗ•⸝⸝)” [1127282] · MS 2022 · 쪽지

2023-12-21 10:02:33
조회수 2,900

Unity) Prefab에 관하여

게시글 주소: https://orbi.kr/00066034258

안녕하세요 뱁새입니다 (۶•<•)۶❗️


지난 게시글에 이어 오늘은 랜덤으로 생성되는 장애물 제작하는 과정 및 게임의 진행에 따라 시간이 + 되도록 하는 과정을 정리해볼 예정입니다


그럼 가봅쉬다❗️





첫번 째, 세 가지 object에 충돌을 구현하기.




우선 장애물이 중력을 받아 아래로 떨어짐과 동시에 balloon 그리고 shield와 충돌하도록 해주어야 합니다

그러기 위해선 장애물에 rigidbody 2D와 box collider 2D를 부여하고 balloon, shield에 cicle collider 2D를 부여하여야 하는데요


rigidbody와 collider을 모두 부여하면



이렇게 장애물이 아래로 떨어짐과 동시에 balloon에 충돌하게 됩니다


여기서 왜 balloon과 shield에는 collider만 부여하는 것일까요?


이는 rigidbody는 속성값으로 mass (질량), drag (공기저항 값), angular drag (회전 공기저항 값), use gravity (중력 사용 여부), is kinematic (물리엔진 사용 여부), interpolate (물리엔진 움직임 보정), collision detection (이동속도 조절), constraints (rigidbody 움직임 제한)을 사용하는데 우리는 장애물만 아래로 떨어지게 해주어야 하기에 장애물에만 rigidbody를 부여해준 것입니다


만약 장애물 외의 object에 rigidbody를 부여했다면 이 object들도 아래로 떨어졌겠죠?





두번 째, 장애물이 랜덤으로 생성되게 하기.


장애물에 충돌 효과까지 구현하였다면 다음으로는 장애물이 랜덤한 크기로 랜덤한 위치에서 생성되도록 해야 합니다



먼저 게임을 관장하는 gamemanager을 만들어줍니다




그리고 gamemanager.cs를 열어 "님 저 장애물 사용할 거임 ㅇㅇ" 이라고 알려준 후, 



instantiate(square);를 입력해줍니다


여기서 instantiate는 이미 만들어진 게임 오브젝트를 필요할 때마다 실시간으로 찍어낸다는 것을 의미합니다


설명은 일단 여기까지 하도록 하고 unity로 돌아와 square를 gamemanager에 적용해줍니다



이후 square.cs를 생성하고 start란에 "님 제가 설정한 범위 내에서 랜덤하게 나타나주셈" 이라고 명령 후 실행해주면



이렇게 랜덤한 위치에서 장애물이 생성됩니다


다음으로 다양한 크기의 장애물이 생성되도록 할텐데



다시 square.cs에서 "님 제가 설정한 범위 내에서 벌크업 하든가 말든가 알아서 하셈" 이라고 명령 후 

prefab을 만들어 실행해주면



이렇게 다양한 크기를 가진 장애물들이 랜덤한 위치에서 우수수 떨어집니다



하아.. 님아 그래서 prefab이 뭐임? 이라고 물으신다면

prefab은 미리 만들어 둔 게임 오브젝트를 원하는만큼 생성할 수 있도록 하는 것입니다

위에서 instantiate를 사용해 인스턴스화를 했었는데 이가 바로 prefab을 사용하였음을 나타내는 것이죠!



떡밥 회수 폼 미쳤다 ㄷㄷ




세번 째, 게임이 진행됨에 따라 시간이 흐르도록 하기.


위에서의 움짤들을 보면 이상한 점을 발견할 수 있습니다

그건 바로 시간이 가지 않고 있다는 것이죠


그렇다면 게임이 진행됨에 따라 시간이 흐르도록 해야겠죠?



ui에서 txt를 만들어주고 gamemager.cs에서 "님 저 ui 사용할 거임" 이라고 알려준 후 이 ui가 txt라는 것을 지정해줍니다



이후 이 게임은 오래 버텨야 하는 게임이므로 0초부터 시작을 한다는 것을 알려주어야 하는데


여기서 c#에서의 변수에 대해 간단하게 나열하자면

int 변수명 = 정수;

float 변수명 = 소수 포함 숫자f; 

string 변수명 = "문자"; 

bool 변수명 = 참 or 거짓; (논리) 가 존재합니다


이때 우리는 시간이 0.00의 형식을 가지도록 해주어야 하므로 float를 사용하여야 하죠



변수를 지정해주었다면 update란에 string을 사용해 N2 즉, 소숫점 둘째 자리까지 나타내도록 코드를 작성해주면



헉 님들 멈춰있던 시간이 흐르기 시작했어요..!





게시글 작성 후 엉망진창이 된 바탕화면.jpg


오늘은 이렇게 랜덤한 위치에서 랜덤한 크기를 지닌 장애물이 떨어지도록 하는 과정과 게임이 진행됨에 따라 시간이 흐르도록 하는 과정에 대해 정리해보았는데요


다음은 아마 게임을 끝내는 방법과 최고 기록을 나타내는 방법에 대해 정리할 듯 싶습니다



그럼 다음에 봐요 안녕❗️

rare-더 귀여운 비둘기

0 XDK (+5,000)

  1. 5,000