[TIL] 유니티(Unity) 움직이는 플랫폼

백성은·2025년 5월 21일

TIL

목록 보기
27/34

✅ 학습한 주요 내용

  • 트리거 감지와 Rigidbody 판별
  • Vector3.MoveTowards로 부드러운 위치 이동
  • 발판 위 오브젝트 이동 처리

✅ 움직이는 발판 시스템 구현

  • 플레이어가 발판 위로 올라오면, 발판이 일정 위치까지 이동하고, 내려가면 다시 원위치로 돌아가는 시스템

구조 설명

  • Update()에서 매 프레임 startPoint -> endPoint로 천천히 이동
  • Vector3.MoveTowards를 사용하여 부드러운 이동
  • 발판 위에 올라온 오브젝트를 List로 관리하여 함께 이동 처리

발판 위 오브젝트 감지

	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 같은 다양한 물리 개념을 조합해서 처리하는 것이 재미있었다. 특히, 발판 위에 여러 오브젝트가 있을 수 있다는 점을 고려해 리스트로 처리하고, 매 프레임 동기화하는 방식은 실제 게임 개발에서도 자주 활용될 수 있을 것 같다.

profile
게임 개발일지

0개의 댓글