ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 일상] 티티 (T.T) 01
    일상/티티 (TouchTouch)

    안녕하세요. 다름이 아니라 오늘 이러한 카톡을 받았습니다.

    리듬게임이라.. 저도 많은 리듬게임을 해봤는데

     

    도통 어떻게 구성을 해야 할지 감이 안 왔습니다.

     

    간단히 "리듬 게임"만 검색을 해 보아도 참 다양한 리듬게임들이 존재하는데요..

     

    대단한 게임은 아니지만, 소소(소중하고 소중한)한 게임을 만들어 보려고 합니다.

     

    제목은 T.T Game입니다.

    (Touch Touch)에서 따온 T.T입니다 ㅎㅎ

    필요 에셋은 유니티 에셋스토어에서 무료로 다운로드하였습니다.

     

    T.T의 현재 씬 화면입니다.

     

    구현 목록 

    1. 다양한 젤리들이 씬 화면에 등장한다.

    (지정 시간이 초과가 되면 비활성화될 예정)

     

    2. 다양한 젤리들

    - 1~3번의 터치를 작용받은 후 사라짐

    - 움직이는 젤리 

    - 젤리를 터치/클릭해서 없애면 점수를 획득

     

    3. 타이머를 적용해 

    제한 시간 안에 젤리를 많이 터트리려 점수가 높은 사람이 승리.

     

    현재 구현할 목록은 이러합니다.

     

    제작하면서 추가되거나 수정 사항이 나오면 

    글을 수정하진 않고 추가하는 방향으로 가겠습니다.

     


    간단한 기본 Jelly의 스크립트부터 보시겠습니다.

    Jelly 스크립트의 전체 소스코드입니다.

     

    몇 없지만... 간단히 선언 변수들을 보자면

     

    pop : 젤리를 클릭/터치를 하면 생길 이펙트를 담당할 오브젝트 입니다.

     

    orizinPos : pop의 생성 위치를 저장할 초기 포지션 값입니다.

     

    score : 젤리를 클릭/터치 시 오를 점수 textMeshProUGUI입니다.

     

    (textMeshProUGUI를

     

    scoreInt : 텍스트에서 표시될 int값의 정수를 저장할 변수입니다.


    orizinPos = transform.position : 젤리의 초기 위치 값을 orizinPos에 저장하는 코드입니다.

     

    transform.localPosition = new Vector2(Random.Range(-850, 850), Random.Range(-450, 450))

    으로 랜덤 값을 받아 생성되게 구현을 하였습니다.

     

    각 값은 씬 뷰에서 위치를 보고 적은 수치입니다.

     

    transform (젤리)는 위치가 랜덤 값으로 바뀌었지만

     

    클릭 / 터치 시 생기는 이펙트는 

    pop.transform.position = orizinPos : 랜덤 값을 부여 전 위치에 생성됩니다.

     

    간단히 이 함수가 불려지면

    score.text = $"Score : {scoreInt += 1:00}"로 1씩 더해주는 코드입니다.

    :00을 사용해 2자리 수를 저장하였습니다.

     

    if (pop.gameObject.activeSelf)로 활성화 중 라면? 의 조건문을 걸어

    우선 pop은 비활성화해주고

    재 키도록 하였습니다.

     

    반대로 else문에서는 비활성화 중이라면? 의 조건이 성립해

    pop을 SetActive를 활용해 true로 변경해 주었습니다.

     

    이 함수의 실행은 Event Trigger에서 실행됩니다.

     

    Pointer Down으로 젤리를 터치 / 클릭 시 동작이 되도록 사용했습니다.

     

    Timer 스크립트입니다.

     

    time의 값에 180의 값을 활성화 시 실행되는 OnEnable 함수에서 부여를 해주고

     

    StartCorutine으로 코 루틴 함수 Timer를 실행합니다.

     

    저는 제한시간을 60초로 잡을 것이기 때문에

     

    time에 -= 연산자로 Time.deltaTime을 빼 주고

     

    초 와 밀리초를 구현하는 코드입니다.


    자체적으로 지정된 시간에 의해 비활성화가 되게 하는 코드입니다.

     

    public으로 인스펙터 창에서 설정이 가능한 float값 time을 선언해 주었고

     

    활성화 시 실행되는 OnEnable 함수에서

     

    우선 실행되는 인보크 함수가 있으면 CancleInvoke()를 이용해 캔슬을 해주었습니다.

     

    이후 Invoke함수로 SetActive = false를 이용해 비활성화시키는 Disable 함수와, 지정된 초 (time) 이후 실행되게 합니다.

     

     

    현재 이 스크립트는, 젤리를 터치 / 클릭 시 발생되는 이펙트를 비활성화시켜주는 목적으로 사용했습니다.

     

    1초 뒤 사라지는 오브젝트

    아직은 해야 할 것들이 많은데, 요즘 정신이 없어서 집중을 못하고 있습니다.

     

    빠른 시일 내에 좋은 결과물을 보여 드리겠습니다.

     

    현재 생각나는 동작 구현은 젤리가 x축이 0 이상일 시는 왼쪽을 보고, x축이 0 이하 일시는 오른쪽을 보게 하는 것입니다.

     

    이런 식으로 작성을 해 봤었는데, 180도 회전을 시키면 event trigger가 먹지 않더라고요?

     

    왜 안되는지 몰라 한참 헤매었습니다...

     

    그래서 검색을 찾던 도중 x값을 -값으로 바꿔서 회전을 시킬 수 있다는 말을 보고 바로 실행을 했는데,

     

    이번엔 젤리에 붙여 두었던 애니메이션이 일정 수치가 정해져 있기에 도중 수정이 불가능하더라고요..

     

     

    현재 젤리는 ui항목인 이미지를 생성해서 받은 건데

     

    Sprite Renderrer의 Flip을 이용하는 방법밖에 없나 찾아보고 있는 중입니다.

     

     

    또한 생성 시 빠르게 이동하여 터치 / 클릭 이 보다 더 어렵게 구현을 할 예정이고

     

    터치 / 클릭을 2번 이상을 해야지 이동되는 것도 생각 중입니다.

     

     

    아직 결과물이라고 하긴 어렵지만.. 현재 진행된 연습 프로젝트를 영상으로 한번 보시겠습니다.

     

    00 : 33초

    하다 보니 어느새 30초가 훌쩍 흘렀더군요.. 뭔가 짧게 집중해서 몰입감을 줄 수 있는 점은 고려를 하며 제작한 건 아니지만 흠.. 훌륭합니다 ㅎㅎ

     

    처음부터 디자인을 제대로 설계를 해서 작업을 하는 것이 훨씬 좋은 방법인 것 같습니다.

     

    작업 진행을 하면서 중간중간 추가 사항이나 변경 사항 같은 게 생기면

     

    짰던 스크립트나, 달아 놨던 컴포넌트 들도 변동하게 되는 경우가 많기에..

     

    1번 작업하면 끝낼 것을 2~3번씩 작업을 하게 되는 것 같습니다.

     


    빠르진 않더라도 천천히 그리고 탄탄히 나아가겠습니다.

    댓글

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