본문 바로가기
제출용/TIL

내일배움캠프 3일차 TIL + 2 풍선을 지켜라

by 유린테 2024. 4. 17.

오늘의 키워드.. 

  • Rigidbody2D
  • Collider
  • Destroy

오늘은! 2강 풍선을 지켜라 정리.

이제 중력을 줘야한다 > Rigidbody // 충돌을 줘야한다 > Collider // 없애야 한다 > Destroy 

정도의 생각은 할 수 있는 사람이 되었으므로, 중요하게 생각하는 코드나 헷갈리는 점 위주로 정리하려 한다.

 

 


 

 

Rigidbody2D : 2D 오브젝트에 중력을 줄 때 사용

>> Add 할 때 2D가 잘 붙어있는지 이름을 확인해야 한다.

>> 이거 그냥 Rigidbody로 잘못달았다가 한참 오류났다..

 

Rigidbody를 이용해 중력을 주면 이제 하늘에서 떨어져 내려오는 것을 만들 수 있다!

 


 

 

box Collider 2D : 네모 모양의 콜라이더 만들기

circle Collider 2D : 동그라미 모양의 콜라이더 만들기

>> 이것도 2D, 3D, 모양 확인을 잘 해주어야 한다.

 

그리고 이번 게임은 하늘에서 떨어지는 물체를 쉴드로 막아서 피해주는 게임이기 때문에

떨어지는 것 뿐 아니라 '충돌' 하는 효과 또한 필요하다!

 

box collider 와 circle collider 를 이용하여 네모는 box, 풍선은 circle을 넣어준다.

 

대신 콜라이더는 충돌 하는 효과이므로, 충돌을 하는 친구와 받는 친구 둘 다 콜라이더를 씌워줘야한다.

ex) 쉴드로 네모를 막는 것이므로 쉴드와 네모 모두에 콜라이더 적용해야함.

그리고 콜라이더를 씌워줬을 때 파란색 네모로 범위가 지정되는데, 필요에 따라 조정해주는 작업이 필요하다.

 

OnCollisionEnter2D : 충돌하게 하는 코드

 


 

localScale : 게임 내 오브젝트의 크기를 지정해줄 때는 그냥 Scale이 아닌 localScale로 해줘야한다.

이전에 프로세싱이라는 코드로 그림그리는 툴을 사용할 때는 그냥 Scale로 했어서 습관적으로 그냥 Scale로 쓴다. 주의

 

Prefab : 게임 내에서 반복되게 할 때 프리펩으로 만들어줘야한다. 

              ex) 계속해서 떨어지는 빗방울, 계속해서 떨어지는 네모 등

프리펩 하는 법 : Prefabs 라는 폴더를 만들어 오브젝트를 드래그&드롭 해주면 아이콘 색이 바뀌며 프리펩이 생성.

프리펩 한 후에는 하이어라키 창에서 지워주는 것이 좋다. 

 

InvokeRepeating : 반복해서 작동하게 하는 코드!

InvokeRepeating("MakeSqure", 0f, 1f);    ==   반복생성, (무엇을,언제부터,얼마나자주)

이 코드를 통해 "MakeSqure"를 0f 부터, 1f 마다 생성 같은 반복작동을 할 수 있다.

이번 강의에서는 매 게임마다 나오는 코드인 것 같다. 중요!

 

시간에 관한 코드

 

time += Time.deltaTime;   ==  시간을 계속 더해주는 코드

Time.timeScale = 0.0f;      ==  시간을 멈춰주는 코드 (시간을 0f 으로 만든다)

Time.timeScale = 1.0f;      ==  시간이 흐르게 하는 코드 (시간을 1f 으로 만든다)

 

>> 주로 게임 오버 시 시간 멈추기 / Retry 버튼을 누르면 다시 시간이 흐르게 할 때 사용한다.

 

 게임 시간을 표현할 때 > 

string 으로 바꾸기 > .ToString ("N2");  -  string으로 바꾸고 소수점 2자리까지 표시

숫자를 글자로 표현해야 하므로 .ToString을 통해 자료형을 맞춰준다.

 

Instance=this;

싱글톤으로 만들어주기

너는 딱 하나야! 라고 할 수 있게 세팅해두는 것.

>> 사실 이 싱글톤 부분을 잘 모르겠다. 연구가 필요함

 

private void Awake () : Start 보다 먼저 호출되는 코드

 


 

 

Retry 버튼

 

Retry버튼의 스크립트에서는 Start나 Update를 사용하지 않기 때문에 기본적으로 써져있는 코드를 지워주면 된다.

Retry 버튼을 사용하기 위해서는 UI로 버튼을 생성해주고 - On Click에 버튼을 이어준 후 Retry함수를 넣어줘야 한다.

Retry 실행 시  timeSclae 1.0f 로 설정해준다는 코드를 넣어야 버튼 눌렀을 때 멈춰있지 않고 게임이 다시 돌아간다.

 

>> Retry버튼 정상작동 하게 하는게 지금까지 중엔 가장 오래 걸리고 헷갈렸다.

코드작성 외에도 유니티에서 파일을 이어준다던지, 함수를 설정해준다던지 해야하는게 많아서 세세한걸 잊고는 한다.

누르고 왜.. 안돼지..? 하며 이것저것 뒤져보기를 며칠 반복 한 것 같다.

>> 대신 그 덕분에 어느 부분에 문제가 생겼는지를 찾고 - 그 관련 기능 위주로 살펴보는 것이 좀 더 빨라졌다. 

나쁘기만 한 헤맴은 없는 건가봐.. 

 

최고점수 나타내기

 

유니티에서 데이터를 저장하는 방법

 

데이터 저장

PlayerPrefs.SetFloat(" ",숫자값);

PlayerPrefs.SetString(" ",문자열);

 

데이터 불러오기

PlayerPrefs.GetFloat(" ");

PlayerPrefs.GetString(" ");

 

데이터 저장했는지 확인 

PlayerPrefs.HasKey(" ")

 

데이터 모두 지우기

PlayerPrefs.DeleteAll();

 

>> 이녀석들 비슷한 듯 다 달라서 상당히 헷갈린다.

>> 일단 외우는 것 부터 시작해야 할듯

 

따로 변수 지정을 해주지 않고 BestScore 로 사용해도 정상작동은 하지만

키값이 " " 안에 모두 들어있어 오타 등으로 인한 오류가능성이 높다!

string key = "BestScore"; 해주면 key 로 간편하게 쓸 수 있어 오류가능성도 적음.

 

풍선 죽게 만들기

 

애니메이션 하나 새로 만들어서 터지는 것 처럼 만들고 애니메이터 켜서 트랜지션으로 이어주기

>> 이런거 다 코딩으로 구현하는 줄 알았는데 생각보다 애니메이션을 사용하는 부분이 많다.

>> 오히려 편해. 하지만 코드로 구현하는 방법도 언젠간 사용해볼 것.

 

Invoke : 딜레이 시킬 때 사용

Invoke 이녀석 뭔가 여기저기 쓰이는데 상당히 헷갈린다!!!!!

아직은 코드 구별하는 것만 해도 머리가 팽팽

 


 

 

숙제는 네모가 화면 밖으로 갔을 때 사라지게 만드는 것이었다.

Destroy 를 사용하는 것은 이제 꽤 익숙해졌기 때문에, 처음으로 힌트 없이 푼 숙제다!

Update 에서 y값이 화면 최하단 값보다 작을 때 Destroy 해주는 것으로 하면 되는 간단한 숙제였다.

오히려 1강 숙제 보다 이게 더 간단했던 듯? 

그래도 나름 .. 조금이지만 늘어는 가고 익숙해지긴 하는게 느껴져서 좋다.

다른 분들 하는거 보면서 남들에 비해 뒤쳐지는 것 같아 주눅이 들곤 하지만...

처음에 매니저님께서 남들과 비교해서 슬퍼하지 마라고 하셨으니 좀만 슬퍼하고 열심히 해야겠다.

다른 멋쟁이 개발자들 따라 잡으려면 넘 멀었지만 !@!! 화이팅.