코딩의 신 42

김동관·2025년 12월 1일

오늘 한 일

먼저 저의 역할 입니다.

맵, 드롭 아이템, 사운드, 통합/버그 담당 & 개발팀장

다른 개발자들의 작업을 통합하고 빠르게 버그를 해결하는 역할 및 컨텐츠 담당

전체적으로 유지 및 보수, 통합 버그 관련일을 맡았습니다.
다른 추가적인 기능은 이렇게 있습니다.

  • 맵 1종 제작
  • 경험치, 음식 아이템
  • 카메라 세팅
  • 사운드 삽입
  • 애니메이션 적용(가능한 범위) 후 순위
  • 코드 병합
  • 프리팹 정리
  • 빌드 테스트
  • 긴급 버그 핫픽스
  • 파티클 간단한 연출 추가

전체적인 세부사항 입니다.
이번 개발은 기간이 짧기 때문에 거진 4일차로 개발 일정을 짜야 했습니다.
저의 오늘 역할을 알려드리겠습니다.

  • 임시 맵(3200x1800) 생성
  • 기본 타일팔레트 생성
  • 장애물 10~15개 자동 배치
  • 경험치 오브젝트(충돌 시 사라짐)
  • 사운드 리소스 정리

Day 1 목표:

“맵이 있고 슬라임이 돌아다니는 환경 구성”

  1. 임시 맵 생성

게임의 구조는 기본적으로 탑다운형식의 게임이기 때문에
Tilemap으로 맵을 만들어 주었습니다.
Asset들은 무료 라이센스 CC0를 사용하였으며, TilePallet를 사용해 직접 만들어서 퀄리티가 떨어진다는 점 양해해 주시기 바랍니다.

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

Grid오브젝트를 만들어 전체적인 맵을 구성해줬으며, 그 안에서 Floor로 바닥 타일을 전부 깔아주었고,
BackDesign으로 그림자를 형성, ForeDesign은 높이가 있는 벽들, 마지막으로 Collision은 충돌을 만들어주어서 맵의 가장자리에 다 채워주며 벽면인 ForeDesign과 상호작용하게 해주었습니다.

  1. 경험치 오브젝트

경험치 기능을 추가하기 위해 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 오브젝트를 형성해 주시고 각각에 맞는 스크립트를 추가해 주시면 작동이 잘 되는걸 확인할 수 있습니다.

profile
아이디어 뱅크

0개의 댓글