오늘 한 일
먼저 저의 역할 입니다.
다른 개발자들의 작업을 통합하고 빠르게 버그를 해결하는 역할 및 컨텐츠 담당
전체적으로 유지 및 보수, 통합 버그 관련일을 맡았습니다.
다른 추가적인 기능은 이렇게 있습니다.
전체적인 세부사항 입니다.
이번 개발은 기간이 짧기 때문에 거진 4일차로 개발 일정을 짜야 했습니다.
저의 오늘 역할을 알려드리겠습니다.
Day 1 목표:
→ “맵이 있고 슬라임이 돌아다니는 환경 구성”
- 임시 맵 생성
게임의 구조는 기본적으로 탑다운형식의 게임이기 때문에
Tilemap으로 맵을 만들어 주었습니다.
Asset들은 무료 라이센스 CC0를 사용하였으며, TilePallet를 사용해 직접 만들어서 퀄리티가 떨어진다는 점 양해해 주시기 바랍니다.

이런 식의 숲컨셉 맵 입니다.
다음은 맵 (Grid)의 오브젝트 구조입니다.

Grid오브젝트를 만들어 전체적인 맵을 구성해줬으며, 그 안에서 Floor로 바닥 타일을 전부 깔아주었고,
BackDesign으로 그림자를 형성, ForeDesign은 높이가 있는 벽들, 마지막으로 Collision은 충돌을 만들어주어서 맵의 가장자리에 다 채워주며 벽면인 ForeDesign과 상호작용하게 해주었습니다.
- 경험치 오브젝트
경험치 기능을 추가하기 위해 ExpOrb.cs로 직접적인 경험치를 관리하는 클래스를 만들어주고,
PlayerExp.cs를 만들어 경험치를 받게 해주었습니다.
마지막으로 IExpReceiver라는 Interface를 만들어주어서
나중에 유지보수가 쉽게하기 위해 해주었습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExpOrb : MonoBehaviour
{
public int amount = 10; //경험치량
public float moveSpeed = 5f; //경험치가 딸려오는 속도
public float detectRange = 3f; //경험치가 빨려오기 시작하는 거리
private Transform player;
private SpriteRenderer sr;
private float pulseSpeed = 3f; // 반짝임 속도
private float pulseAmount = 0.2f; // 반짝임 크기
private Vector3 originalScale;
//플레이어 태그를 찾기
private void Start()
{
player = GameObject.FindWithTag("Player").transform;
sr = GetComponent<SpriteRenderer>();
originalScale = transform.localScale;
}
private void Update()
{
if (player == null) return;
{
float distance = Vector2.Distance(transform.position, player.position);
//플레이어가 detectRange 안에 들어와야 이동 시작
if (distance <= detectRange)
{
Vector2 dir = (player.position - transform.position).normalized;
transform.position += (Vector3)(dir * moveSpeed * Time.deltaTime);
}
// 경험치 흡수 거리
if (distance < 0.5f)
{
var receiver = player.GetComponent<IExpReceiver>();
if (receiver != null)
{
receiver.OnExpPickup(amount);
}
Destroy(gameObject); // 경험치 오브젝트 제거
}
// 반짝임(Pulse) ---
float scale = 1 + Mathf.Sin(Time.time * pulseSpeed) * pulseAmount;
transform.localScale = originalScale * scale;
// 알파로 반짝임 추가
Color c = sr.color;
c.a = 0.5f + Mathf.Sin(Time.time * pulseSpeed) * 0.5f; // 0~1 범위로 투명도 변화
sr.color = c;
}
}
}
//ExpOrb의 구조입니다. 이런식으로 경험치량, 달려오는 속도 및 거리를 만들어 주었고 반짝임 속도, 크기도 설정해주었습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerExp : MonoBehaviour, IExpReceiver
{
public int currentExp = 0;
public void OnExpPickup(int amount)
{
currentExp += amount;
Debug.Log("경험치 획득: " + amount + " 현재 경험치: " + currentExp);
}
}
// 이건 PlayerExp.cs입니다. 경험치량을 계산해주었습니다.
다음은 ExpOrb 오브젝트 형성, Player 오브젝트를 형성해 주시고 각각에 맞는 스크립트를 추가해 주시면 작동이 잘 되는걸 확인할 수 있습니다.