본문 바로가기

Programming/유니티

유니티(Unity) 프로젝트 점프게임 만들기 : [6] 플랫폼속성추가

목표

움직이는 플랫폼과 사라지는 플랫폼을 만들어 재미요소를 추가하자

플랫폼 스크립트 추가

먼저, GameDefine.cs 파일의 PLATFORM_TYPE에 'MOVE', 'HIDE' 를 추가해준다.

public enum PLATFORM_TYPE
{
    NORMAL,

    //--추가
    MOVE,
    HIDE,
}

----

----

그리고 Platform.cs에 PLATFORM_TYPE 변수를 추가해준다.

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

public class Platform : MonoBehaviour
{
    //--추가
    protected PLATFORM_TYPE platformType = PLATFORM_TYPE.NORMAL;
    public PLATFORM_TYPE GetPlatformType { get { return platformType; } }

    int platformIndex = 0;

    public void SetPlatformIndex (int _index)
    {
        platformIndex = _index;
    }
    public int GetPlatformIndex { get { return platformIndex; } }
}

platformType 변수는 Platform을 상속받는 클래스에서 재설정해줍니다.

이동하는 플렛폼을 만들기위해 'Platform_Move.cs'와 'Platform_Hide.cs'를 새로 생성하여 추가해줍니다.

Platform_Move.cs

두 점 사이를 끊임없이 좌우로 움직인다. 좌우로 이동하게될 위치는 발판의 처음위치에서 좌로 -1, 우로 +1 만큼 움직이게 됩니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Platform_Move : Platform
{
    //--
    Vector2[] points;
    int pointIndex = 0;
    float moveSpeed = 1f;

    //--
    void Start()
    {
        platformType = PLATFORM_TYPE.MOVE;
        points = new Vector2[2] { new Vector2(-1, transform.localPosition.y), new Vector2(1, transform.localPosition.y) };
    }

    //--
    void Update()
    {
        if (Vector2.Distance(transform.position, points[pointIndex]) < 0.02f)
        {
            pointIndex++;
            if (pointIndex == points.Length)
            {
                pointIndex = 0;
            }
        }

        transform.localPosition = Vector2.MoveTowards(transform.localPosition, points[pointIndex], moveSpeed * Time.deltaTime);
    }
}

 

Platform_Hide.cs

캐릭터가 플렛폼을 밟으면 2초 후 사라지고 1초 후 다시 보여지게 됩니다. 사라지게 된 플렛폼은 위에 올라설 수 없습니다. 사라지거나 보여지는 연출은 이미지의 alpha 값을 이용하여 투명하게 합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Platform_Hide : Platform
{
    //올라간 후 일정 시간이 지나면 발판이 사라졌다가 다시 나온다.
    float hideTime = 0;
    //다시 보여지는 시간
    float showTime = 0;

    //캐릭터가 올라서면 숨기기 시작
    bool isHideStart = false;

    //발판 이미지 색변경을 위한 변수
    SpriteRenderer platformImage;
    //Collider를 켜고 끄기 위한 변수
    BoxCollider2D collider2d;

    //
    private void Start()
    {
        platformType = PLATFORM_TYPE.HIDE;
        platformImage = GetComponent<SpriteRenderer>();
        collider2d = GetComponent<BoxCollider2D>();
    }

    private void Update()
    {
        float _alpha = 1;

        if (isHideStart)
        {
            hideTime += Time.deltaTime;
            if (hideTime >= 2f)
            {
                isHideStart = false;

                collider2d.enabled = false;
                showTime = 0;
            }

            _alpha = 1 - (hideTime / 2);

        } else
        {
            showTime += Time.deltaTime;
            if (showTime >= 1f)
            {
                showTime = 1;
                
                collider2d.enabled = true;
                hideTime = 0;
            }

            _alpha = showTime / 1;
        }
        //플렛폼의 색을 투명하게 만드는 로직
        platformImage.color = new Color(1, 1, 1, _alpha);
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        isHideStart = true;
    }
}

이미 만들어진 'PlatformNormal' 프리팹을 복제하여 'PlatformMove', 'PlatformHide'로 만들고 해당하는 스크립트를 붙여줍니다. 참고로 새로만들어진 Move와 Hide 의 프리팹에 붙어있던 Platform 스크립트는 제거해 줘야한다.

이제 'PlatformManager'에서 어느 플렛폼을 생성할지 프리팹을 결정하여 만들어주기만 하면 된다.

프리펩을 만드는 방법을 모르신다면 아래의 글을 확인해주세요

 

유니티 (Unity Basic) 프리팹 만들기 (Create Prefab)

프리팹 프리팹은 오브젝트를 생성하여 하나의 목적으로만 사용하는 것이 아닌 여러가지 목적을 가지고 사용하기 위해 '템플릿' 처럼 만들놓은 오브젝트라고 보시면됩니다. ---- ---- 생성방법 'Hie

moblieandlife.tistory.com

다음 시간에는 'PlatformManager'에서 플렛폼을 생성하는 로직을 만들어 보겠습니다.

 

유니티(Unity) 프로젝트 점프게임 만들기 : [7] 플렛폼 생성

목표 랜덤으로 일반, 이동, 사라지는 플렛폼을 배치하여 재미요소를 추가하겠습니다. PlatformSpot 'PlatformManager'에서 플렛폼을 생성하는 부분을 수정합니다. 우선 수정할 내용에 들어갈 스크립트를

moblieandlife.tistory.com