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


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);
}
}
기믹의 다양성을 확보하기 위해 범용적인 이동 로직을 설계하였다.
[SerializeField]를 활용하여 인스펙터 창에서 이동 거리, 속도, 간격 등을 즉각적으로 수정할 수 있도록 하여 물체마다 다른 패턴을 부여하였다.Vector3 변수를 사용하여 _startPos(시작 위치)와 _arrivedPos(도착 위치)를 미리 계산해 저장하고, Vector3.MoveTowards 함수를 이용해 두 지점 사이를 부드럽게 오가도록 로직을 구성하여 해결하였다.현재 구현된 시스템에서 보다 높은 완성도를 위해 다음과 같은 보완이 필요함을 확인하였다.