오늘의 키워드..
- 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강 숙제 보다 이게 더 간단했던 듯?
그래도 나름 .. 조금이지만 늘어는 가고 익숙해지긴 하는게 느껴져서 좋다.
다른 분들 하는거 보면서 남들에 비해 뒤쳐지는 것 같아 주눅이 들곤 하지만...
처음에 매니저님께서 남들과 비교해서 슬퍼하지 마라고 하셨으니 좀만 슬퍼하고 열심히 해야겠다.
다른 멋쟁이 개발자들 따라 잡으려면 넘 멀었지만 !@!! 화이팅.
'제출용 > TIL' 카테고리의 다른 글
내일배움캠프 6일차 TIL + 5 주변기능학습 (0) | 2024.04.22 |
---|---|
내일배움캠프 5일차 TIL + 4 르탄이 카드 뒤집기 (1) | 2024.04.19 |
내일배움캠프 4일차 TIL + 3 고양이 밥주기 게임 (2) | 2024.04.18 |
내일배움캠프 2일차 TIL + 1강 빗물받는 르탄이 (0) | 2024.04.16 |
내일배움캠프 1일차 TIL + 왕초보 유니티 입문기 (0) | 2024.04.15 |