스태틱 메시 컴포넌트(StaticMeshComponent)

스태틱(Static) → 고정된 오브젝트

메시(Mesh) → 3D 모델의 형태

컴포넌트(Componenet) → 해당 오브젝트에 부여할 특성


 

 

컴포넌트에 스태틱 메시 컴포넌트를 추가하고,

아래 이미지와 같이 우측 디테일 화면창에서 스태틱 메시를 찾아 원하는 이미지를 선택한다.

 

그럼 아래 이미지처럼 뷰포트 화면에 원하는 이미지가 추가되어 있는다.


[무브먼트 컴포넌트에 보간]을 클릭하면

다음과 같은 인터피 무브먼트(InterPToMovement)가 추가된다.

 

 

인터피 무브먼트는 쉽게 말해서 선형 보간 방식으로 포인트 간 이동하는 컴포넌트이다.

예시를 들면 마리오 게임에서 나오는 몬스터같이 일정한 속도로, 일정한 규칙으로 움직이는 친구들이 있다.

 

그 외에 생각나는 예시들 : 

  • 이동 발판
  • 화살 함정과 같은 특정 함정
  • CCTV 회전 등등

플로팅 폰 이동(FloatingPawnMovement)

 

 

[플로팅 폰 이동] 혹은 [플로팅 폰 무브먼트]라고 부른다.

플로팅 폰 무브먼트는 [폰 액터]를 움직여주는 컴포넌트이다.

 

단, [폰]은 외부에서 입력을 받아야만 움직일 수 있기에, 아무런 입력을 하지 않은 현재 상태에서는 움직이지 않는다.

움직이기 위해서는 이벤트 그래프에서 입력을 주어야만 한다.

 

 

[이벤트 그래프]를 클릭하면 다음과 같으 화면이 나온다.

 

위 이미지는 이벤트 그래프 초기 화면이다. 각 노드를 설명하자면

 

Event BeginPlay는 "게임이 시작될 때 딱 한번만 실행되는 노드"

Event ActorBeginOverlap는 "해당 오브젝트의 콜리전이 타 콜리전과 충돌할 때 실행되는 노드"

Event Tick는 "매 프레임마다 실행되는 노드"

이다.

 

일단 이동은 매 프레임마다 움직여야 부드럽게 이동하는 것처럼 보이기에 

Event Tick 노드를 사용한다.

Event Tick에서 선을 생성해 Add Movement Input을 생성하여 연결한다.

 

Add Movement Input은 "이동 입력을 주는 노드"이다.

또 위의 이미지를 자세히 보면 폰 > 입력 > Add Movement Input으로 되어 있다.

이는 폰 액터 전용 함수임을 알 수 있다.

 

 

위 이미지에서 나오는 핀들을 각각 설명하겠다.

일단 좌측부터 설명하자면

 

Delta Seconds는 쉽게 말해 "1프레임이 지나는 속도"를 말한다.

(왜 있는지는 아직 모르겠다. 거기까지는 아직 안 찾아봤다.)

>>> 영상에서 설명했었네.

컴퓨터는 사양마다 프레임의 시간이 각자 다르기 때문에 프레임이 다르다면 그 결과값도 다르기 마련이다.

이와 같은 문제를 해결하기 위해 프레임을 통일 시키는 것이다.

 

Target은 위 노드가 움직일 폰을 설정하는 부분이다.

초기에는 self로 나온다. 다른 폰을 움직이고 싶다면 self를 지우고 해당 폰의 명칭을 적으면 될 것 같다.

World Direction 은 어느 방향으로 움직일지 입력하는 부분이다.

Scale Value 는 "이동하는 힘의 크기",

Force 는 잘 안쓴다기는 하는데 "물리적인 힘으로 강제로 밀어버린다"라고 한다.

 

...배그에서 플레이어 캐릭터를 차량으로 칠 때, 차량의 힘은 전혀 안 줄어들던데. 이게 그걸 사용한 건가?

 

....

 

 방금 튜터님께 질문하고 왔다.

(친절하게 답변해주시고 같이 고민해주셔서 감사합니다.)

 

내가 이해한게 맞는지는 모르겠지만 혹시 모르니 여기다가 글로 적어본다.

 

내가 이해한 것은 Force 는 사용자가 폰에게 입력한 값이 중간에 끊긴다고 해도,

사용자 대신 계속해서 입력값을 대신 전해주는 AI같은 개념이라고 이해했다.


 

★이 아래는 당분간은 폐기

 

위에는 한 방향으로만 움직이는 이벤트였다.

이제는 특정 거리를 이동하면 다시 다른 방향으로 이동하는 이벤트를 만들 것이다.

 

먼저 변수를 3개 만든다.

각각의 변수를 설명하자면

 

StartLocation 는 "시작 위치",

Velocity 는 "속도",

MoveDistance 는 "이동한 거리"이다.

 

필요한 변수의 생성을 마쳤으니 이제 이벤트 그래프를 이용하자.

 

먼저 Event BegingPlay 를 선택하여 다음 노드를 잇는다.

 

이거는 뭐 특정 기능이 있는건 아니지만 SET 의 기능은 설명할 필요가 있다.

 

SET(Start Location) 은 화면 우측에 있는 변수 Start Location 을 Alt키를 누른 상태로 드래그하면 생긴다.

기능으로는 해당 변수(Start Location)에 특정 특정 노드의 벡터 값을 저장하는 기능을 한다.

 

즉, 

이와 같이 연결되어 있으면  Velocity의 값인 (1, 0, 0)을 Start Location 에 저장한다는 의미이다.

 

위는 예시이고, 아무튼 현재 폰의 위치 값을 찾아야하므로, 다음과 같은 노드를 사용해야 한다.

 

겟 액터 로케이션(Get Actor Location)

 

이 노드는 Target 의 위치 값을 찾아서 반환하는 노드이다. 따라서.

 

이렇게 연결하면 게임이 시작되면, 해당 폰의 위치 값을 찾아서 벡터 함수 Start Location 에 저장한다는 소리이다.

 

이제 이 부분은 더 이상 건들 필요가 없다.

여기서 더 연결해봤자 처음 시작할 때 한번 말고는 실행도 안할 텐데,

여기다가 노드를 계속 연결하게 되면, 결국에는 초반 한번만 이동하고 영원히 멈춰있을 폰이 완성될 것이다.

 

다시 Event Tick 으로 돌아오자.

이 친구는 이전에도 말했다시피 매 프레임 꾸준히 실행하도록 명령하는 노드이다.

그렇다면 여기서 다음 노드들을 이어주면 된다.

 

 

일단 매 프레임마다 타겟인 폰이 이동한다.

어느 방향으로? 바로 World Direction 이 나타내고 있는 x축으로 -1만큼만 매 프레임에 움직이도록 한다.

하지만 이렇게 끝나면 한 쪽 방향으로만 가고 무한히 가게 된다.

이 문제점을 해결하기 위해 나는 이제 이 알고리즘에 제한을 걸어둘 것이다.

 

먼저 나아갈 속도를 정해보자.

 

먼저 변수 Velocity 의 초기값을 0으로 설정한다.

 

이제 우리는 키보드 M키를 누를 때마다 속도가 빨라지고 N키를 누를 때마다 속도가 줄어들도록 만들어 볼 예정이다.

 

다음과 같이 치면 키보드 이벤트 키를 사용할 수 있다.

 

이 노드는 M키를 누를 때마다 특정 노드를 실행하게 만드는 노드이다.

 

 N키도 똑같이 만들어 준다.

 

이제 우리는 M키를 누를 때는 Velocity의 값이 증가하고, N키를 누를 때는 Velocity 의 값이 감소하게 만들 계획이다.

 

알고리즘은 간단하다.

키를 누를 때마다 Velocity 의 값을 더하거나 빼기만 하면 된다.

 

위와 같이 검색하면 나온다.

이번에는 속도 값을 Scale Value 값에 넣어야 하기 때문에 플로트로 설정했다.

 

 

더하기에 앞서 최고 속도 제한과 속도가 음수로 떨어지지 않도록 제한을 걸어둘 계획이다.

Branch 는 if문과 의미가 동일하다.

 

 

조건 1) Velocity 의 값이 10보다 클 수는 없다.

조건 2) Velocity 의 값이 0보다 작을 수는 없다.

 

 

이제 그 각각의 조건이 참일 때, 값을 더하거나 뺄 것이고, 그렇지 않는다면 아무런 일도 일어나지 않을 것이다.

조건을 걸어놨으니 이제는 다음 단계로 넘어가면 된다.

 

 

Multyply 연산자를 통해 Delta Seconds 와 더하거나 뺀 Velocity 의 값을 Scale Value 에 할당하면 된다.

 


 

 

'[Unreal엔진] BP > 미정' 카테고리의 다른 글

25.12.04_공부  (0) 2025.12.04
25.12.02_공부  (0) 2025.12.02
서버 구조와 에디터 기능 정리 노트  (0) 2025.11.13