본문 바로가기
개발자가 되어보자..공부공부/개발 일지

C# 유니티 공부 24 - 미니퍼즐게임 예제 최종(오브젝트 풀링, Playerprefs, 속성지시자 등)

by 묭묭이와소담이 2022. 12. 26.
반응형

* Dongle과 GameManager 2개의 스크립트 사용.

- 변수 설정.

- [Header]는 유니티 인스펙터상에서 더욱 구분지어 확인할 수 있게 해줌.

- [Range()]는 public 변수값을 범위내에서 스크롤로 결정할 수 있게 해줌.

 

 

 

* 마우스 포인터 따라 이동.

- 클릭 하는 동안 드래그, 이후 드래그 bool값 변수를 두어 이동이 되지 않게 함.

- rigid.simulated는 물리효과 활동에 관여하는 기능을 하며, false로 해주면 드래그 중 오브젝트가 떨리지 않음.

- Lerp(출발위치, 목적위치, 이동속도 혹은 시간), 부드럽고 천천히 이동하게 해주는 함수.

 

 

* 프리펩, 오브젝트 풀링을 이용한 오브젝트 생성. (이펙트 오브젝트도 풀링 진행.)

- 오브젝트에 랜덤한 범위의 level 변수를 설정, 애니메이션 파라미터를 int변수로 설정한 뒤에 애니메이션으로 오브젝트 종류 구현. 

- 동글은 프리펩으로 저장하고 오브젝트 풀링으로 정리 및 구현.

 

1) 오브젝트 풀링으로 프리펩 생성 함수 구현.

- List<>, Instantiate를 사용하여 생성 후 저장.

Awake 단계에서 실행하여 오브젝트 비활성화로 보관. (동글은 프리펩 자체로 비활성화로 저장.)

- WaitNext 함수는 다음 동글이가 생성되기까지 시간차이를 주는 역할.

(코루틴에 while문이 들어가면 update의 역할을 해줄 수 있음.)

2) 풀링으로 생성된 오브젝트 정보를 가져오고, 다음으로 활성화 될 오브젝트를 정함.

- 게임 시작 버튼, onClick으로 실행되는 GameStart 함수 내에 Invoke 함수를 통하여 시간차로 생성시킴.

 

* 동글이 합쳐졌을 때, 레벨업 및 동글이 사라지게 하는 함수 구현.

- 합쳐지는 것은, 조건을 달아줌. 

레벨이 같을 때, 이미 떨어진 other와 지금 떨어지는 중인 me와 비교하여 x축, y축 위치에 대한 조건을 달아줌.

- 합쳐지게 되면 other는 Hide 되어야 함.

- Levelup, Hide에 대한 함수를 생성해 놓고 OnCollisionStay2D에서 사용.

- 시간 차이를 줘야 하는 곳에서는 코루틴 함수를 이용.

 

* 이펙트 함수 구현.

- 파티클을 이용하여 이펙트 생성.

- 동글이 합쳐질 때, 활성화 시킴.

- 오브젝트 풀링으로 미리 생성시켜 놓고, 동글이와 1개의 Set가 되어 작동하도록 구현. (오브젝트 풀링 사진 참고)

 

* 게임 오버 구현.

- 경계선에 닿으면 붉은색으로 변했다가, 더 시간이 경과하면 게임 오버 되는 것으로 구현.

(게임 오버되기 전에 경계선에서 떨어지게 되면, 다시 원래 상태로 되돌아오도록 함.)

- 게임 오버 되면, 장면 안에 활성화 되어 있는 동글이들의 대한 오브젝트를 모두 가져온 후에 물리효과를 비활성화 시킴.

그리고 화면에서 보이지 않는 위치로 이동 시킨 후에, 오브젝트 사라지는 함수에 연결 시킴.(이펙트 구현)

 

 

 

* Best Score, 최고 점수 구현

- 게임 오버 되면 나오는 화면에서, 최고 점수를 갱신하면 Best 표시와 함께 점수 갱신.

- Playerprefs 함수 사용.

(게임 오버에서 점수 저장, Awake 단계에서 저장된 점수를 다시 가져옴.

조건문을 이용하여 이미 저장되어 있는 HasKey가 없다면 최고 점수를 0으로 저장.)

 

 

* 사운드

- Audio Source가 여러 개이면 사운드가 여러개 동시에 재생 될 수 있음. (중복으로 사운드 효과 가능.)

- SfxCursor라는 변수를 사용하여 Audio Source가 반복적으로 사용되게 함. 

sfxcursor = {sufcursor+1) % sfxPlayers.Lenghth;

변수에 1을 더한 값에 배열의 길이를 나누어 나머지를 다시 변수에 저장하는 것으로.

배열 길이가 3이라면, 0~2까지의 값이 반복되게 됨.

(나머지를 사용하는 이 방법은 반복적으로 배열을 실행해야 할 때에 유용하게 사용할 수 있음.)

- Audio Clip, Auido Source 모두 배열로 생성하여 진행.

 

 

 


 

* Rigidbody의 InterPolate는 이전 프레임과 비교하여 움직임을 더욱 부드럽게 보정해줌.

* Rigidbody의 Sleeping Mode는 물리연산을 멈추고 쉬는 상태모드를 설정하는 것.

(멈추지 말고 작동해야 할 때에는 꺼주는 것이 좋다.)

* [Header], [Range()] 등 속성지시자라는 것이 있음.

 

 

 

* 경계선이 표시되지 않는 오류 발생.

-> Order in Layer를 높여주어 해결

* 게임 오버시, 동글이들이 사라지지 않음.

- 해결 필요.

 

반응형

댓글