26일차) [Unity] 맵 기믹 구현 및 상호작용 오브젝트 제작 기록

엄기태·2026년 2월 11일

Unity

목록 보기
2/13

🎯 1. 구현 목표

어제 제작한 기초 맵을 바탕으로 플레이어와 상호작용하거나 일정 패턴으로 움직이는 다양한 기믹 요소를 추가하는 것을 목표로 하였다.

  • 상하 이동 문: 일정 주기로 위아래로 개폐 동작을 반복하는 문 제작
  • 무게가 다른 밀기 블록: 리지드바디(Rigidbody)를 활용하여 무게 차이가 있는 물리 블록 구현
  • 좌우 이동 다리: 특정 구간을 지속적으로 왕복하며 발판 역할을 하는 블록 추가
  • 자체 기획: 위 요소들을 조합하여 맵의 퍼즐 요소 및 난이도 구성

🖼️ 2. 구현 결과

  • 결과물 이미지:

📄 주요 소스코드 (YMoving.cs)

using UnityEngine;

public class YMoving : MonoBehaviour
{
	private Vector3 _arrivedPos;	// 도착 위치
	private Vector3 _startPos;		// 시작 위치
	private Vector3 _targetPos;		// 현재 이동해야 할 목표 위치

	private bool _maxPos = true;
	private float _moveTick = 0f;

	[SerializeField] private float _moveInterval = 3.0f; // 이동 간격 (초 단위)
	[SerializeField] private float _speed = 2.0f;		// 이동 속도
	[SerializeField] private float _moveMax = 4.0f;		// 최대 이동 거리
	void Start()
    {
		_arrivedPos = transform.position;
		_startPos = _arrivedPos + Vector3.up * _moveMax;
		_targetPos = _arrivedPos;
	}

    void Update()
    {
		_moveTick += Time.deltaTime;
		if (_moveTick >= _moveInterval)
		{
			_maxPos = !_maxPos;
			_targetPos = _maxPos ? _startPos : _arrivedPos;
			_moveTick = 0f;
		}
		transform.position = Vector3.MoveTowards(transform.position, _targetPos, _speed * Time.deltaTime);
	}
}

🛠️ 3. 구현 과정

기믹의 다양성을 확보하기 위해 범용적인 이동 로직을 설계하였다.

  • 왕복 운동 시스템: X, Y, Z 각 축 방향으로 왕복 운동을 수행하는 개별 스크립트를 작성하였다.
  • 유연한 수치 조정: [SerializeField]를 활용하여 인스펙터 창에서 이동 거리, 속도, 간격 등을 즉각적으로 수정할 수 있도록 하여 물체마다 다른 패턴을 부여하였다.

💡 4. 문제 해결 방법

이동 거리 및 위치 제어

  • 문제: 물체가 정해진 범위 내에서만 정확하게 왕복하도록 설정하는 방식에 대해 고민하였다.
  • 해결: Vector3 변수를 사용하여 _startPos(시작 위치)와 _arrivedPos(도착 위치)를 미리 계산해 저장하고, Vector3.MoveTowards 함수를 이용해 두 지점 사이를 부드럽게 오가도록 로직을 구성하여 해결하였다.

🚀 5. 개선 계획

현재 구현된 시스템에서 보다 높은 완성도를 위해 다음과 같은 보완이 필요함을 확인하였다.

  • 카메라 시스템 개선: 마우스 이동에 따라 시점이 자유롭게 변화하는 기능 추가 필요 🖱️
  • 물리 판정 보완: 이동하는 물체에 밀릴 경우 맵 밖으로 튕겨 나가는 현상 수정 필요 ⚠️
  • 플랫폼 이동 동기화: 이동하는 발판(물체) 위에 플레이어가 올라갔을 때, 플레이어도 발판의 움직임에 맞춰 함께 이동하는 로직 구현 예정 🏃‍♂️

profile
코딩 학습 공간

0개의 댓글