목표
움직이는 플랫폼과 사라지는 플랫폼을 만들어 재미요소를 추가하자
플랫폼 스크립트 추가
먼저, 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'에서 어느 플렛폼을 생성할지 프리팹을 결정하여 만들어주기만 하면 된다.
프리펩을 만드는 방법을 모르신다면 아래의 글을 확인해주세요
다음 시간에는 'PlatformManager'에서 플렛폼을 생성하는 로직을 만들어 보겠습니다.
'Programming > 유니티' 카테고리의 다른 글
유니티 (Unity Basic) 프리팹 만들기 (Create Prefab) (0) | 2024.02.16 |
---|---|
유니티 (Unity Basic) 오브젝트 만들기 (Create Object) (0) | 2024.02.16 |
유니티(Unity) 프로젝트 점프게임 만들기 : [5] 배경만들기 (0) | 2024.02.15 |
유니티 (Unity) 이미지 Pivot 변경 (0) | 2024.02.12 |
유니티 무한의 발판 만들기 (Unity - Infinity Vertical Jump Platform) (0) | 2024.02.12 |