ABOUT ME

천리 길도 한 걸음부터

Today
Yesterday
Total
  • 두뇌회전 & 순발력 게임
    연습 프로젝트/두뇌회전 & 순발력 게임

    안녕하세요.

     

    현재 Land Of Memories 프로젝트를 진행 중인데 요즘 이리저리 움직이게 되는 일이 많아서 작업을 많이 못했습니다.

     

    내일부터는 다시 비교적 여유가 있을 것 같은데

    요.

     

    시작 전!

     

    기분 전환 겸(?), 재미있을 것 같은 게임 아이디어가 떠올라서 즉시 프로젝트 작업을 해보기로 했습니다.

     

     

    작업시간은 약 5시간 정도 걸렸는데, 코드 구현 작업은 의외로? 비교적? 수월하게 진행됐는데

     

    부가적인.. 요소들이 시간을 많이 잡아먹었습니다.

     

     

    우선 이 이미지 뭐 같이 보이시나요..

     

    이번 프로젝트를 진행하면서 Image에 쓰일 Sprite를

     

    픽셀 아트로 작업을 한건데..

     

    여러분들이 생각하시는 그거 맞습니다

    "티모"

     

    살짝 실패했을 때 약 올리는? 것을 표현하려고 했습니다.

    전 사실 직접 손으로 그리는 걸 더 잘 그립니다.

     

    먼저 영상부터 보겠습니다.

     


     

    가장 먼저 OnEnable() 함수로 오브젝트가 활성화될 때 버튼 이벤트를 연결시켜주었습니다.

     

    설명 / 플레이 / 종료

     

    버튼에 맞게 오브젝트를 활성/비활성화해주어 해당 Panel로 넘어가는 모습을 구현해주었습니다.

     


     

    '플레이' 버튼이 눌린 뒤 PlayGame()이 호출되면 playObj가 활성화되면서 PlayController 스크립트가 실행됩니다.

     

    각 버튼 클릭 이벤트를 등록해주었고,

     

    점수를 초기화해주는 로직과 StartCorutine으로 코루틴을 실행시킵니다.

     


     

    실행되는 코루틴은 타이머를 구현하였습니다.

     

    타이머가 0이 되어서 제한시간이 초과되면

     

    StopCorutine으로 코루틴을 중지시키고

     

    다시 하기 / 종료 UI가 활성화됩니다.

     


     

    실질적인 로직은 OnEnable()에서 실행될 ChangeButtonColors() 함수입니다.

     

     

    먼저 반복문 For부터 보겠습니다.

     

    Random.Range로 colors 배열 값의 랜덤 값을 받아와 주었는데,

     

    이는 레드, 옐로, 블루

     

    세 가지 값 중 하나입니다.

     

    정해진 컬러의 값을 

    buttons [i]. color = randomColor로 랜덤 색상을 적용시켜주었습니다.

     

    이후 딕셔너리에 현재 넘버와 색상을 맵핑시켜 주어서 

     

    현재 플레이어가 각 차례대로 어떠한 색을 클릭해야 하는지 찾을 수 있게 저장을 해주었으며,

     

    텍스트 또한 표기를 해주었습니다.

     

     

    이어서 리스트(Text)를 섞는 함수 ShuffleList()입니다.

     

    간단히 for 반복문을 통해서 랜덤의 값을 받아와 준 뒤

     

    현재 해당 인덱스를 미리 temp에 저장하고

     

    해당 인덱스에 랜덤값 인덱스를 저장하하여 바꿔 주었습니다.

     

    각 0번 인덱스부터 list의 Count 전까지

     

    무작위로 섞이게 됩니다.

     


     

    딕셔너리에 키와 값으로 쌍으로 관리를 하니 이제 원하는 색을 찾는 건 쉬워졌습니다.

    (사실 따로따로 랜덤으로 섞은 뒤, 현재 해당 Text의 Parent의 색이 원하는 컬러면 List에 따로 저장하는 로직을 구현했던 건 비밀입니다..)

     

     

    currentClickIndex의 초기값은 1입니다.

     

    현재 진행 단계 1~9를 나타내기 위함입니다.

     

     

    현재 클릭한 버튼(clickedColor)이 클릭해야 하는 색상(correctColor)이라면

     

    for문을 통해 현재 텍스트와 일치하는 텍스트를 찾아와 주었고

     

    버튼의 컬러를 블랙으로 변경시켜주었습니다.

     

    1번이 완료되면 currentClickIndex++ 2~9번까지 반복이 됩니다.

     

     

    다음 else의 조건문은

     

    현재 클릭한 버튼(clickedColor)이 클릭해야 하는 색상(correctColor)이 아니라면

     

    의 로직으로 실패를 했을 때를 뜻합니다.

     


     

    StartCorutine()을 통해서 코루틴이 시작되며

     

    단순히 현재 버튼(레드, 옐로, 블루)의 컴포넌트 enabled = false로 기능을 없애주며

     

    for문을 통해 재미 구현을 해보았습니다.

     


     

     

    currentClickIndex가 9보다 크다면 완료가 된 것으로

     

    currentClickIndex를 초기화해주며

     

    현재, 최고 스코어를 업데이트해주었습니다.

     

    이후 ChangeButtonColors() 함수를 실행시켜 위와 같은 로직이 반복됩니다.

     


     

     

    다음은 Manager 스크립트로 게임의 흐름을 관리하였습니다.

     

    Ready, Start 두 가지밖에 없으며

     

    처음 로비 화면과, 제한시간이 초과 됐을 때는 Ready 상태로 아무런 로직이 실행되지 않고

     

    오직 게임 플레이 상태일 때만 Start가 되게 해 주었습니다.

     

    SoundManager 스크립트를 받아와 실행에 용이하게 해 주었으며

     

     

    사운드 스크립트는 sfx와 bgm 각 AudioSource를 2개로 사용하였습니다.

     

     

    또한 사운드 재생은 Manager에 접근하여 soundManager의 함수를 실행시키는 걸로 해주었습니다.

     


     

    마지막으로 설명 화면에 들어갔을 때 '다음' 버튼을 클릭하는 ExplanationController 스크립트입니다.

     

    이벤트 연결과 SetActive()로 활성화/비활성화를 해주었습니다.

     

     

    총 5개의 스크립트로, 원하던 게임 아이디어를 구현해 보았습니다!

     

     

    사실 초기에 잘못 생각했던 것이, 어느 정도 구현도나 흐름 등 운전하면서 생각해 왔기에

     

    집에 오자마자 잠도 안 오겠다 1~2시간 정도면 뚝딱 만들겠지! 했던 게 큰 오산이었습니다.

     

    알게 모르게 생각해야 할 것들도 많고, 코드적으로 가장 오래 걸렸던 부분이

     

    Text와 배경 Color를 랜덤으로 섞고 각 1번 Text부터 9번 Text까지 순서대로 색을 맞추게 하는 로직이었습니다.

     

    작업을 하면서 수정 및 테스트 등 시간이 많이 들었었는데, 다음부터는 좀 더 깊이 생각하고 흐름도를 그려내

     

    작업을 하는 방식의 습관을 길러야겠습니다.

     

     

    그래도 세상에 하나뿐인 제 게임이 만들어지니 좋습니다 ㅎㅎ

     

    (이 프로젝트는 아이디어가 떠올라서 구현한 게임이기에 더 이상 추가작업이나 추가 글은 올리지 않을 예정입니다!)


     

    감사합니다.


    멀리서 좀 작게 보면 좀 그럴싸한데요?

    댓글

김효겸 / Tel. 010-7735-0580 / E-mail. dollzzang2@hanmail.net