과제

쿠키런 따라 만들어보기

nonstory 2020. 11. 26. 17:38

먼저 쿠키의 행동을 크게 4개로 나누어 보았다.

 

1. 뛰기

 

2. 점프

 

3. 슬라이드

 

4. 죽음

 

기본적인 애니메이션은 준비가 끝났다.

각각의 애니메이션들은 버튼클릭과 콜라이더의 충돌로 금방 처리할 수 있다.


 

문제가 되는건 가장 중요한 맵인데

쿠키런의 경우 맵은 유니런처럼 맵이 랜덤으로 생성되는 것이 아닌

정해진 맵 루트를 따라야한다

 

여기서 이제 고민해야 할 점은 맵을 어떻게 로드할 것인가?이다

1. 처음부터 맵을 전부 로드한다.

맵이 처음부터 정해져있으므로 가능한 방법이지만 많은 양의 메모리와 긴 로드시간이 필요하게된다.

하지만 쿠키런의 경우 다시 돌아가는 경우의 수는 없으므로 상당히 낭비하는 방법이된다.

 

 

2. 맵의 구성들을 불러와서 재사용한다.

넘어간 맵의 구성들을 사용자가 안보이는 다른곳에 숨겨둔 후 필요할때마다 갖고와쓴다.

여분의 맵구성들을 갖고있어야하며 (맵에 나타날 수 있는 최대 갯수만큼)

계속 돌려쓰는 형태로 활용한다.

 

내가 당장 생각할 수 있는 방법은 이 2가지인데 후자가 코드로 조금 처리를 해야하지만 가장 합리적인 방법이므로

후자를 택하는 방향으로 잡는다.

 


 

기본적인 큰 그림은 그렸고

좀 더 세분화해보자

 

Todo 1 : 스크롤링 구현

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BackGroundScoller : MonoBehaviour
{

    /*게임오브젝트를 생성후 이미지를 */

    public BoxCollider2D backgroundFront;
    BoxCollider2D backgroundEnd;
    float xlen;
    float ylen;

    float centerX;
    float centerY;

    public float speed;

    private void Awake()
    {
        backgroundFront.GetComponent<BoxCollider2D>();
        xlen = backgroundFront.bounds.size.x;
        ylen = backgroundFront.bounds.size.y;

        centerX = backgroundFront.transform.position.x;
        centerY = backgroundFront.transform.position.y;

        backgroundEnd = Instantiate(backgroundFront);
        backgroundEnd.transform.SetParent(this.transform);
        backgroundEnd.transform.position = new Vector2(centerX + xlen, centerY);
        //Debug.LogError($"size x : {xlen} size y : {ylen} center x : {centerX} center y : {centerY} start x : {startX} start y : {startY}");
    }

    private void Update()
    {
        //완전히 지난경우
        if (backgroundFront.transform.position.x < centerX - xlen)
        {
            //Debug.LogError("pass");
            backgroundFront.transform.position = (Vector2)backgroundEnd.transform.position + new Vector2(xlen,0);
        }
        else if(backgroundEnd.transform.position.x < centerX - xlen)
        {
            backgroundEnd.transform.position = (Vector2)backgroundFront.transform.position + new Vector2(xlen, 0);
        }

        backgroundFront.transform.Translate(Vector2.left * speed * Time.deltaTime);
        backgroundEnd.transform.Translate(Vector2.left * speed * Time.deltaTime);
    }

}

 

 

 

 

 

이미지를 특정 포인트를 미리 계산해서 보내게되면 화면이 끊긴것과 같은 효과를 받게되는데

 

이동하였을때 항상 정확한 시점에 이동을 하는것이 아니기때문에 오차가 생긴다

 

따라서 포인트를 업데이트에서 항상 새로 계산하여 합치도록 하면 스크롤링에서 끊김효과를 방지할 수 있다.

 

 


 

 


Todo 2 : 맵 데이터 작성

맵의 스크립트에 따라서 오브젝트들이 미리 전 화면에서 구성을 완료하고

이동시키는 방식 구현

사용이 끝난 오브젝트들은 잠시 사이드에 빼놓은 후 대기시킨다.

 

Todo3 : 4가지 애니메이션 할당하기

버튼 클릭과 콜라이더로 캐릭터의 행동 구현하기

 

Todo Special : 맵 에디터 만들어보기

정말 시간이 남는다면 해보기

한번 해보면 나중에 다른 프로젝트할때 많은 도움이 될 것 같다.

 

목표 : 27일 18시까지

'과제' 카테고리의 다른 글

c# 셰이더 컬러 조절  (0) 2020.12.15