본문 바로가기
제출용/TIL

내일배움캠프 2일차 TIL + 1강 빗물받는 르탄이

by 유린테 2024. 4. 16.

오늘은 1강 빗물받는 르탄이 강의내용 정리하기

 

오늘의 키워드는

  • 어렵다
  • 아직은 강의 따라하기에 급급한 사람

 

유니티에서 C#코드 작성하기

스크립트 창 - create - 폴더  해서 Scripts라는 폴더를 만들어준다! 

그리고 Scripts 폴더를 우클릭 해서 C#Script를 만들고 만들어진 스크립트와 해당 게임오브젝트를 연결해준다.

>> 그래도 이제 여기는 설명 없이도 슥슥 할 수 있게 되었다! 히히

 

그리고 이제 게임 구현을 위해 필요한 조건!!

 

(1) 벽에 부딪히면 뒤돌아서 다시 오게 하기

(2) 보는 방향따라 르탄이 방향 바꿔주기

(3) 르탄이 속도 조정하기  

 

우선, 컴포넌트를 가져오려면 같은 인스펙터 선상에 있어야 한다!

Rtan이를 움직이려면 - Rtan이가 있는 Script와 같이 있어야 한다. (같은위치!)

르탄이를 열심히 뒤집는 중

(1) 벽에 부딪히면 다시 돌아오게 하기

(2) 보는 방향따라 르탄이 방향 바꿔주기

를 구현하기 위하여 먼저 르탄이를 벽에 닿으면 뒤집어 주어야 한다.

벽을 만들어줄 최소와 최대 X값을 알아본다.

그 후 if문을 이용해서 X > 최대 일 때 / X < 최소 일 때 flip을 이용해서 르탄이를 뒤집어준다! 

 

flip 이용하기

르탄이는 왼쪽 오른쪽만 바꿔주면 되기 때문에 flipX 를 사용한다.

그리고 마우스 클릭 시 르탄이도 뒤집어 주어야 하기 때문에 MouseButtonDown도 이용해줘야한다.

 

! 의 사용

renderer.flipX = !renderer.flipX;

이런식으로 !를 사용해줄 때가 있는데, 여기서 !는 반대로 한다는 것을 의미한다!

 

(3) 르탄이 속도 조정하기

속도 조정은 비교적 간단하다!

르탄이의 속도를 나타내는 코드에 0.5f 정도를 곱해주면 된다!'

>> 처음엔 연산자도 헷갈렸지만 이제 속도 조정 정도는 헤매지 않고 할 수 있..을듯

 

빗방울 구현하기

 

일단 빗방울부터 만들어 준다.

하이어라키 창 - 우클릭 - 2D오브젝트 - 서클 을 통해 동그라미를 만들어 준다.

 

빗방울 떨어지게 만들기

빗방울 오브젝트를 선택하면 인스펙터 창 마지막에 Add 하는 곳이 있다.

+ 버튼을 눌러준 후 

Rigidbody2D : 물리에 필요한 힘을 적용시킬 수 있음 (무게,중력,마찰력 등) 

를 넣어주고 중력값을 넣어주면 빗방울이 아래쪽으로 떨어지는 것을 확인할 수 있다.

>> Rigidbody는 앞으로도 계속 쓰일 것만 같다...

 

바닥에 닿으면 충돌하게 만들기

CircleCollieder2D : 충돌하게 만들어 준다!

를 아까 Rigidbody와 똑같이 인스펙터 창에서 넣어준다.

 

단, 충돌은 두개 이상의 물건이 부딪히며 일어나는 것이기 때문에 충돌 대상자인 오브젝트 모두에 콜라이더를 적용해주어야 한다!

충돌 대상의 형태에 따라 circle콜라이더 혹은 box콜라이더를 선택해서 적용해준다.

>> 바꿔서 적용하면 충돌 형태가 달라지는 걸까? 궁금하니 다음에 해보자

 

빗방울 파괴하기

충돌 코드 - Oncollision2D 하면 기다란 코드가 나온다!

충돌이 시작되는 그 순간 - enter

충돌이라는 변수는 collision  안에 들어가있음

파. 괘. 해. 라

 

근데 이렇게 "Ground" 로 코드를 작성하면 ground의 이름이 바뀌는 경우 오류가 날 것이다!

그렇기 때문에 유니티에서 태그를 달아서 작성해준다.

 

CompareTag  : 태그를 구분하는 함수

if (collision.gameObject.CompareTag ("ground")) - 태그 이름이 "ground"면 작동되게끔 !!

>> 이름이 아닌 태그로 작동함

 

빗방울 랜덤위치, 종류로 생성하기

 

float x = Random.Range(-2.4f, 2.4f);   x값 랜덤
float y = Random.Range(3.0f, 5.0f);  y값 랜덤


transform.position=new Vector3(x,y,0);   - 위치

 

빗방울 타입을 3개로 나눠서 if . if else 를 사용해줘야 한다!

 

그리고 빗방울이 계속 반복되는 것이기 때문에 - 프리펩화 라는걸 시켜주어야 한다.

 

프리펩화 하기

폴더 - 폴더명 "Prefabs" 만들기 - 하이어라키 창 Rain 드래그&드롭

해주면 Rain의 아이콘이 다른색깔 네모로 바뀐다.

프리펩화를 시켜주고 나서는 하이어라키 창에 있는 Rain은 지워주어야 한다.

>> 안지워주면 처음 시작할 때 두개가 생성되더라!! 

>> 아마 하이어라키에 있는 Rain과 프리펩으로 돌아가는 Rain이 처음에 둘 다 동시에 나와버려서 그렇게 되는 것 아닐까? 

 

public GameObject Rain; 을 해서 Rain을 게임 오브젝트로 선언해준다.

그럼 게임매니저에 Rain 이라는게 생김 - 거기에 프리펩된 Rain을 드래그&드롭

 

* 함수를 실행시키기 위해서는 함수 이름과 소괄호를 스타트에 적어준다! 

  스타트에 적으면 시작할 때 한 번 호출 / 업데이트에 적으면 반복적으로 호출

 

점수 올라가게 하기

 

폰트적용

폰트 파일을 에셋에 드래그&드롭 / Fonts 폴더 만들어서 넣어주기

 

UI 생성하기

하이어라키 창 우클릭 - ui - text - legacy

>> 점수는 그냥 텍스트가 아니라 계속 변해줘야하고 기능도 들어가서 UI로 하는듯?

ui 는 카메라 영역이 아니라 바로 생기는 영역이라 메인 카메라로 보이지 않음

 

public : 같은 인스펙터 영역이 아니더라도 쓸 수 있게 해주는 코드

 

르탄이와 충돌하려면 르탄이도 콜라이더 해줘야됨

 

Debug 하면 나오는 점수를 Score 텍스트에 집어넣기

 

using UnityEngine.UI;  : Ui를 가져오기 위한 것

 

Retry 판넬을 만들어서 Button 화 시켜주기

판넬 이미지를 만들고 - 인스펙터 창에서 Button으로 만들어준다.

버튼이 된 EndPanel의 인스펙터 창에 On Click 이 비어있는 걸로 뜨는데, 

+ 를 눌러준 후 EndPanel과 이어주고 - public을 통해 만들어준 Retry 함수와 연결해주면 버튼 실행이 된다.

 

SceneManager.LoadScene("MainScene");

를 통해 버튼을 누르면 메인씬으로 돌아가게 만들어준다.

 

 

totalTime -= Time.deltaTime; : 시간을 멈춰주는 코드

를 이용해서 Retry 버튼을 눌렀을 땐 시간이 멈추고/ 다시 처음부터 시간이 흐르게 만들어준다.

 

죽으면 판넬 나오고 / Retry 하면 다시 메인으로 돌아가는 것을 구현하는데만 한참 걸렸던 것 같다.

 

 

사실 이 후반부분이 너무 어려워서 따라하는데도 정말 한참 헤매고 만들었다.

EndPanel 부분과 Retry 부분은 다시 만들어 보며 차근차근 재도전 해보아야 할 것 같다.

 


 

 

첫 강의라 그런지 확실히 오래걸렸다. 후반 가서는 이해하기도 힘들고 따라하기 급급했음..

총 강의시간이 2시간 30분 정도라면 나는 6시간이 넘게 걸려버렸다

처음 해보는 분야란 이렇게 힘들구나를 느꼈지만

확실히 강의도 재밌고 직접 게임을 만들고 해보며 만들 수 있다 보니 재미있어서 시간가는 줄 몰랐다.

9To9 을 처음 시작할 때 헥 12시간 너무 길지 않아..? 라는 생각을 조금 했었는데,

막상 본캠프를 진행해보니 12시간 진짜 금방간다.

시간 많으니까~ 하고 타이트하게 잡아놨던 계획서도 반도 못 할 정도로!!

아마 아직은 내가 숙련도가 부족하기 때문에 똑같이 따라하기만 하는 것도 오래 걸리는 것 같다.

그래도 하면 할 수록 따라하는 시간이 줄어들고, 설명을 들었을 때 이런 코드를 쓰면 되려나? 하고 떠오르는 것들이 생기기 시작했다. 이렇게 조금씩 늘려가면 되겠지 *^^* 화이팅