2026.01.09

박민재 (Daype)·2026년 1월 9일
post-thumbnail

진행과제 : 회전발판과 움직이는 장애물

구현목표

  • 실생활에서 볼 수 있는 길거리 에셋 사용 ex) 버스정류장, 화단, 공원벤치
  • 해당 스테틱 메쉬들을 이용하여 플랫폼 게임 만들기

구현설계 의사코드 : 회전하거나, 왕복하거나, 여러가지 패턴이 있는 발판들로 구성된 간단한 플랫폼 게임 만들기 플랫폼이 해야할 동작 하나하나 별로 클래스를 만들게 될 경우 불필요하게 많아질 수 있고 똑같은 동작을 하는 플랫폼이지만 스태틱 매쉬만 다른경우도 존재 하기 때문에 이를 고려하여 설계

구현설계

1단계 : 플랫폼의 종류를 분류한 후 공통속성으로 만들 수 있는 부분 찾기

플랫폼의 케이스 종류

1. 위아래 왕복으로 움직이는 플랫폼
2. 좌우 왕복으로 움직이는 플랫폼
3. 크기가 커졋다 작아졋다 하는 플랫폼
4. 회전하는 플랫폼
5. 플레이어를 감지하면 작동하는 플랫폼

위 아래 왕복이나 좌 우 왕복의 로직을 생각해보면 if(이동한거리 > 100) 반대로 이동 정도로 구현 할 수 있기때문에 언리얼에서지원하는 리플렉션 매크로를 이용하여 인스턴스 화 된 객체에서 값을 수정할 수 있도록 코드를 구현해준다면 위 아래나 좌 우로 왕복하는 플랫폼은 하나의 엑터로 구현이 가능할거 같다고 생각.

2단계 : 클래스 생성 후 필요한 컴포넌트 부착하기 및 필요한 변수 생성

왕복플랫폼

  • SceneComponent 엑터의 위치값을 가지는 가장 부모위치의 컴포넌트 필수
  • StaticMeshComponent 플랫폼 엑터기 때문에 외형을 나타내는 메쉬컴포넌트 필수
  • 멤버변수 MoveDistance 이동한거리 선언 얼마만큼 이동후 반전할지 필요
  • 멤버변수 StartLocation 시작위치 선언 거리계산에 필요
  • 멤버변수 MoveSpeed 이동속도 선언

회전플랫폼

  • SceneComponent 엑터의 위치값을 가지는 가장 부모위치의 컴포넌트 필수
  • StaticMeshComponent 플랫폼 엑터기 때문에 외형을 나타내는 메쉬컴포넌트 필수
  • 멤버변수 RotationSpeed 회전속도 선언

3단계 : 로직에 맞는 리플렉션 시스템 매크로 인자값 전달

  • StaticMesh 컴포넌트의 경우 같은동작을 하는 엑터를 여러개 배치 할 경우의 수를 대비해 인스턴스상에서 수정이 가능하도록 매크로 선언
  • MoveDistance 멤버변수 플랫폼마다 이동하는 거리를 다르게 설정해 줄 수 있게 EditAnywhere 선언
  • MoveSpeed, RotationSpeed 멤버변수 플랫폼마다 이동하는 거리를 다르게 설정해 줄 수 있게 EditAnywhere 선언


같은 엑터지만 인스턴스상에서 스태틱매쉬 다르게 설정가능한것 확인

4단계 : cpp 파일 내부 구현

  • 생성자에서 앞서 선언한 두 컴포넌트를 초기화
  • BeginPlay 함수 내부에서 플랫폼이 얼마만큼이동했는지를 계산하기위해 시작위치를저장
  • Tick 함수 내부에서 본격적으로 이동을 구현하고 엑터가 실제로 이동한거리가 내가 지정한 거리랑 같거나 더 커질경우 -1로 반전값을 주어 반대로 이동하게끔 구현
    MovingFlatform

    RotatingFlatform

테스트 성공 | 에디터 창에서 값을 수정할경우 두 엑터가 각각 다른값으로 움직이고 각각 다른 메쉬로 적용되는것 확인

0개의 댓글