초보 코린이의 성장 일지

UE4 타겟 변경, 파쿠르 초기 세팅 본문

언리얼

UE4 타겟 변경, 파쿠르 초기 세팅

코오린이 2023. 2. 9. 14:53

타겟팅 변경을 할때 외적, 내적식을 대입해서 예외처리를 하는거부터 시작해 보겠다.

 

사용할 함수 추가 및 변수 추가

 

1. InRight를 입력값으로 받아서 체크가 되면 오른쪽이고, 체크가 안되면 왼쪽이라고 판단할 것이다.

2. 로컨변수 Map은 STL에 Map을 그대로 사용한 것으로 키, 값을 받아준다.

 

Change Focus 앞 부분
Change Focus 뒷 부분

1. Target가 없으면 움직일 필요가 없으니 확인해준다. 그리고 Target 구역을 다시한번 정해서 판단할 것이다.

2. Profile에 배열로 Target는 굳이 추적할 필요가 없으므로 체크해주기

3. Array Element로 Hit된 결과가 나올 것이므로 Break로 Character형인지 체크해주고, 그 Hit된 객체에 위치를 하나 얻어올 것이다.

4. 이제 방향을 만들어야하므로 Character에 Actor 위치와 빼준다. 그리고 정규화를 시켜준다. 그럼 방향이 만들어진다

5. Forward Vector도 결국 크기가 1이고, 방향도 1이므로, 거리가 아닌 방향으로만 쓰게 된다.

6. 외적을 해주면, Actor Up Vector에서 나올값이 0,0,1로 Z축만 쓰고, 외적한 결과를 내적해준다.

7. 내적한 결과가 저장이되고, 타겟이 왼쪽방향이면 - 값중에 가장 큰 것이고, 오른쪽이면 + 값중 가장 작은 값이 될 것이다.

8. Map으로 내적까지 한 값을 키로 쓰고 해당 Actor 값으로 사용할 것이다. 그러면 거리를 다 찾아주게 된다.

9. 정규화를 끝낸 상태라 -1, 0, 1 밖에 숫자가 나올수 없다.

 

위에서 For문을 다 돌고 결과가 나올 것이다. 여기서 이제 객체를 선택하게 만들어줘야 한다.

위에 외적, 내적을 통해 나온 객체 선택하는 지점

1. Map으로 뽑아낸 Keys들을 for문을 돌려서 변수 Key에 저장해준다. 이제 음값인지 양값인지 구별해 줄 것이다.

2. bool로 좌우 판단을 해줄 것이다. 조건은 0보다 큰거와 작은거만 찾아주면된다 같을 수는 없기 때문에

3. 절대값을 씌워서 최소값만 찾아내면된다. 최대값을 변수로 넣어서 비교해주면 된다.

4. 결국 최소값이 저장되면, Key에 해당하는 Character을 찾아주면 가장 가까운 캐릭터를 찾게된다.

5. for문이 다 돌고나서 나온 객체를 타겟으로 변경해면 된다. 만약 for문을 다 돌고 선택된게 없다면 Null이 될테니 타겟이 선택될리가 없다. 그 이유는 왼쪽이나, 오른쪽으로 가다가 더는 선택될 객체가 없어지는 시점이 생기기 때문

6. Moving Focus가 false라면 체크해주고, ture라면 이동 중 이므로 갈 필요가 없다.

1. 만들어 놓은 기능을 사용하기 위해 입력 함수 선언

2. 왼쪽은 bool 체크안하고, 오른쪽은 체크 

3. 이제 Q, E를 눌렀을때 타겟이 변경이 된다.

 

1. Change Focus에서 타겟 Moving Focus가 false기 때문에 Tick에 true라면 다시 풀어준다.

2. 이동 중에는 키가 안먹는다.

 

 

이제 타겟팅은 끝이나고, 파쿠르 기반을 다져 볼 것이다.

 

파쿠르 실험을 하기 위해 맵을 옆으로 넓혀서 하나의 구역을 만들었다.

 

블루프린트 생성을 통해 컴포넌트를 하나 생성해준다.

 

BP_Player 뷰포트

1. 사용해 필요한 컴포넌트를 추가해준다. 

2. Scene로 ArrowGroup를 만들어준다. 이름 그대로 담아서 사용하기 위한 용도

3. 나머지 밑에 컴포넌트는 Arrow를 찾아 추가해주면 된다.

4. ArrowGroup를 눌러서 설정란에 보면 Tags 기능이있다. 우선 하나를 추가해준다. Tags는 컴포넌트가 가진 태그 배열이고, 이 태그를 이용해 그룹과, 카테고리를 나눌 수 있다. 그리고 접근 및 사용 가능하다. 

5. 위에 그림처럼 판단해 줄 방향 표시들이 생겨난다 이걸 통해서 조건을 판단할 것이다.

 

다시 돌아와서 사용 할 함수 및 변수들을 추가해준다.

조건이 많아서 많이 사용이 된다.

ParkourComponent 이벤트그래프

1. Character로 맞는지 확인해준다.

2. Get Components by Tag를 선언하고 설정, Scene Component 안에 있는 Tag안에 Arrows를 찾겠다는 의미이다. 0번부터 확인 하도록 그룹에 연결

3. Arrow Group에 있는 자식 그룹들을 찾을 것이다. Include All Descendants는 체크하면 하위에 그 하위까지 전부 찾게된다. 바로 하위까지만 찾을것이고, 그정도까진 찾지 않을 것이라서 체크는 안해주고 진행해준다.

4. ArrowComponent로 형변환을 해보고 배열로 연결해준다. 그럼 배치한 순서대로 들어온다.

 

ParkourComponent 이벤트그래프

1. For Each를 통해 화살표마다 Hit된 결과들을 배열로 저장할 것이다.

2. 만든 Enum을 번호로 바꿔주면, 숫자 순서가 맞아 떨어진다 그래서 ADD로 공간만 만들어서 확보해준다. (나중에 사용)

3. Component를 가져와 세팅해준다.

4. 파쿠르도 State를 통해 공격 중에 하고 모든 동작에 하게끔 하는게 아니라 Idle 상태일때만 할 수 있도록 만들것이다.

5. 만들어 놓은 행 데이터를 받아서 For문을 돌려준다.

 

이제 Enum으로 값과 행동을 다루게 될 것이라 세팅이 조금 많아진다.

 

사용하기위해 구조체와 열거형을 만들어준다.

열거형 EParkourArrowType

BP_Player에서 추가해 줬던 컴포넌트들 

구조체 FParkourData

Section= 몽타주에 어느 섹션을 사용할것인데 자세한건 나중에 말해보겠다.

MinDistance = 너무 가까운 곳에서 장애물에 파쿠르를 하면 안되므로 범위 판단

MaxDistance = 너무 먼 곳에서 장애물에 파쿠르를 하면 안되므로 범위 판단

Extent = 두께나 높이를 판단할 것이다.

열거형 EParkourType

Climb = 등반하는 행동

Fall = 뛰어내렸을때 행동

Slide = 슬라이딩

Short = 짧은 장애물

Normal = 일반적인 길이의 대한 장애물

Wall = 벽

Max = Max상태면 파쿠르를 하지 않는 상태

FixedCamera = 특정 동작 회전을 막을때 사용

 

ParkourData 앞 부분
ParkourData 뒷 부분

내용을 다 작성하고 임포트 해준다.

 

 

화살표를 쏴서 그 방향에 맞는게 있는지 판단, 없다면 파쿠르를 안할것이고, 객체에 닿는다면 파쿠르하고 나머지도 판단해 줄 것이다.

 

Check Trace Center

1. 시퀀스로 매 시간마다 체크해서 값 세팅해준다.

Line Trace

1. 선을 추적하는 기능을 할 것이다.

2. 파라미터 입력값을 받아준다.

3. 작업은 나중에 할 것이다.

Get Arrow Component

1. 입력, 출력 파라미터를 추가해준다.

2. 저장한 화살표를 가져다가 Return 해주기 위한 용도

 

https://www.youtube.com/watch?v=R7wDSIajD80 

 

- 타겟팅은 끝

- 파쿠르는 아직도 세팅이 더 필요하다

Comments