void OnTriggerEnter(Collider other)
{
// Collider에 연결된 Rigidbody 가져옴
Rigidbody rb = other.attachedRigidbody;
// 물리적으로 움직이는 Rigidbod가 있으면 추가
if(rb != null && !rb.isKinematic)
{
if(!objectOnPad.Contains(rb.transform))
objectOnPad.Add(rb.transform);
}
// 플레이어가 올라오면 발판 이동 시작
if(other.CompareTag("Player"))
{
isMovingToEnd = true;
SetTarget();
}
}
// 이동 방향에 따라 목표 위치 갱신
void SetTarget()
{
target = isMovingToEnd ? endPoint.position : startPoint.position;
}
발판 위에 감지된 오브젝트를 List로 관리, 올라온 대상이 플레이어면 발판 이동
// 현재 위치를 목표 지점으로 일정한 속도로 이동
transform.position = Vector3.MoveTowards(transform.position, target, moveSpeed * Time.deltaTime);
MoveTowards를 이용해서 목표 지점까지 일정한 속도로 이동
// 현재 위치 변화량
Vector3 delta = transform.position - lastPosition;
// 발판 위에 있는 모든 오브젝트 같이 이동
foreach(Transform obj in objectOnPad)
{
if(obj != null)
obj.position += delta;
}
발판이 이동한 만큼 발판위에 있는 오브젝트들도 같이 이동
게임에서 보던 움직이는 발판 시스템을 Rigidbody, Trigger 같은 다양한 물리 개념을 조합해서 처리하는 것이 재미있었다. 특히, 발판 위에 여러 오브젝트가 있을 수 있다는 점을 고려해 리스트로 처리하고, 매 프레임 동기화하는 방식은 실제 게임 개발에서도 자주 활용될 수 있을 것 같다.