Unreal Engine 4 /4.26버전으로 수업을 진행합니다. 해당 내용은 수업에 대한 내용과 함께
개인적인 생각 및 정보를 토대로 글을 씀을 알립니다.
본 내용에 대하여 상업적으로 이용 및 배포를 금합니다.
이전내용) https://ppatabox.tistory.com/69
각주 키워드 참고
각주클릭) : 현재 이 Actor의 위치를 리턴해준다. 1
만들어둔 변수를 끌어다가 Set
Position에다 셋팅을 해준다.
지난시간 말했는데 실행은 오른쪽으로 흘러간다고 했다.
Play에서 Set으로 가서 셋팅을 할려고 하다보니까.
GetActorLocation으로 부터 자기 위치를 받아서 셋팅을 한 것이다.
변수 추가 ; Move -> 컴파일 -> 기본값 x, y = 100 으로
Move를 Get Move해주고
2개를 더할 것이다.
Vector + Vector
다시 실행핀 끌어서 SetActorLocation
자기 위치를 가져다가 Move값을 +해서
SetActorLocation해서 위치를 옮겨 준 것이다.
컴파일 해주고 메인창으로 가자
BP_Position을 불러와주고
위치 초기화 후에 높이는 50
하고 플레이를 눌러보면
자기 원래 위치에서 x : 100 y : 100 이였으니까.
그만큼 이동한 것을 볼 수 있다.
키보드 F8키를 누르면 빙의가 풀리는데
BP_Position을 누르고 확인해보면 100 , 100만큼 위치한 것을 볼 수 있다.
위에서 말했듯이
위치 + 위치 = 이동한 위치 이란 것을 알 수 있다.
지금 이것은 100에 100만큼 이동한 위치 이지만.
100에 100을 향하는 방향이기도 하다.
위치 + (방향 * 거리)
방향 벡터는 Nomalized된 크기가 1인 벡터를 사용 한다고 했다.
이런식으로도 생각할 수 있다.
메인창에서
콘텐츠 브라우저 -> Level이름을 Level_Position으로 바꿔주자
이걸 Vector에다 이동해주자
그러고나서 Ctrl + W 해서
새로운 진행을 위해서
Level_MovetoDirection
Level_MovetoDirection눌러서 열어주자
그러면 새로운 창이 뜨면서 만들어 졌다.
이런 얘기를 했었는데
오브젝트를 회전을 시켜놓고
로컬로 변경하면 자신의 전방으로 이동할 수 있다고 했다.
우리가 2가지를 생각해 볼 수 있다.
1) 월드공간에서의 이동 무조건 전방 축에서의 전방
(지구본일 경우 무조건 절대공간안에 각 축의 이동)
위치에 방향 * 거리 라고 했다.
뷰포트에서 BP_Position은 삭제해주고
콘텐츠브라우저에서 BP_Position 복사해서
BP_MovetoDirection생성
그래서 추가적으로 이게 가능해지는 것이다
위에 노트 설명과 같이 보면
해당 콘텐츠 브라우저 안에 있는 것은 클래스 에서 공통된 값을 가지고
뷰포트로 올려 놓았을때
각각 값을 정의 할 수 가 있다.
즉 뷰포트에 올려둔 BP_MovetoDirection은 각각 다른 위치값을 갖고 있다.
만들어준 BP_MovetoDirection으로 들어가보자
들어가서 이벤트 그래프에 있는거 전부 삭제해주고
이벤트BeginPlay 생성
변수 생성 Value
유형 인티저
컴파일
기본값 100
Get Value
integer >= integer선택
안에 값 100
begin -> If(Branch)
Branch -> PrintString
우클릭 -> Get Display Name
우클릭 -> self (셀프 레퍼런스 가져오기)
Get Display Name -> Append
그다음 빈 곳에 우클릭 -> Make String
치면 Make Literal String 이 나오는 데
Literal은 상수를 의미 한다.
Make Literal String 안에 값을 : spacebar += 100 spacebar 앞뒤를 띄어쓰기 해주자
else만들어 줄 것이다.
이렇게 드래그 해주고
선택 해주자 그리고 복사 Ctrl + C
Make Literal String 왼쪽 값
+ 100
해주고 False연결
선이 좀 보기 싫으니까 정리해주자
해당 선에서 원하는 위치에 마우스를 두고 더블클릭하면
제어점이 생기는데
그걸 옮겨 주면 된다.
여기서 이부분이 클래스 공통 값이라고 했었다.
나는 이 객체 마다 이 변수도 value값을 바꾸고 싶다고 생각한다.
그럼 이곳 안에 Value옆에 눈 모양이 있는데 그걸 클릭해주자
그럼 눈을 뜨고 있는 모양이 되는데
컴파일 하고 메인으로 나가보자
BP_MovetoDirection을 올려보면
우측에 Default로 Value변수가 나오는 것을 볼 수 있다.
오브젝트 선택후에 Alt키 누르고 오브젝트 이동으로 누르고 이동해주면 한개더 복사 된다.
그러면 하나 빼준 것을 기본값을 120으로 두면
기본값이 바뀌는 걸 볼 수 있다.
처음에 만든것은 그대로 100
하나더 만들어서 해보자 90
1 = 100
2 = 120
3 = 90
하고 플레이 해보면
이렇게 결과가 나오는 것이 보인다. 우측에서는 객체 이름 하고 보인다.
지금까지 변수 따로 쓰는 것을 보았다.
저거 띄워지는거 계속 뜨는데 이게 라이팅 정보가 없어서 그런데 그냥
안뜨게 해주자
빌드 -> 라이팅만 빌드 눌러서 없애주자
그러면 스팅서버에 올려줘서 빌드를 한다. (옵션이용해서 끌 수 있지만 )
스팅서버(언리얼)에 정보를 보내서 완료되면 사라짐
올라가 있는 BP_MovetoDirection을 모두 제거 해주고
다시 BP_MovetoDirection으로 들어가주자
우리가 이제 BeginPlay에서 무언가 또 할 건데. 뒤에 너무나도 많은 것들이
연결되어 있다.
이걸 지워주기 보다
BeginPlay 실행핀에 대고 오른쪽 마우스 클릭-> 다음링크끊기
하면 링크가 끊긴다.
또다른 방법으로는 Alt를 누른상태에서 실행핀에 대고 좌클릭 해주면 자동으로 끊긴다.
뒤로 빼주자
실행핀에서 새로 설정할 노드에서 시퀀스라고 (영어나 한글로 쳐도됨)
시퀀스를 추가해주자
브런치랑 연결해주자
이걸 하다보면 블루프린트는 솔직히 개취이긴 한데.
실험용으로 많이 쓰이기도 하고 기획자들이 기획하기전에
만들기용으로도 쓰기도 한다고 한다.
그래서 최대한 보기가 좋아야 구성 짜기가 좋다.
줄 정리 할때는
이렇게 3개를 드래그 해주고
Q를 눌러주면
이렇게 자동으로 줄 정렬이 되는 것을 볼 수 있다.
여기서 시퀀스는 0번에서 실행한 다음에 1번으로 넘어가서 실행된다.
이번에는 변수를 하나 추가해보자
변수 추가 LocalSpace
변수 유형 Boolean
1번에서 우클릭 추가 -> if(Branch) 링크 설정
Get LocalSpace 변수 Branch연결
우리 위치는 똑같으니까
GetActorLocation을 생성해주고
False일때
SetActorLocation생성
GetActorLocation일때
더하기 vector + vector
하나는 (0, 1, 0) * 100을 줬었다.
Make Vector 추가
전방 방향 X를 1로 만들 것이다.
이번엔 거리니까 vector * float이다 .
* 에서 추가해주자
200 만큼 값을 넣어주고
이렇게 연결해주면
make Vector에서 곱한 값이 GetActorLocation에 더해지게 된다.
이렇게 해서 이동 하나
이제는 True라면
역시 GetActorLocation으로 부터
Vector + Vector
GetActorLocation값 그대로 가져와서
이번에는
Get Actor Forward Vector [전방방향] = 크기 1인 벡터
* 추가
vector * float 그대로
더하기 연결
역시또 SetActorLocation 아래꺼 그대로 복사해서
똑같이 연결
Make Vector에서 전방이 200만큼 갈 것이고
Get Actor Forward Vector(크기가 1인 벡터) 에서 전방으로 200만큼 갈 것이다.
Tip.
Tip : 카톡공유나 어디 공유해야 할때 전체 노드 드래그 한다음 복사해서
텍스트 파일로 나오는데 그대로 복사해서 붙여넣기 하면 똑같이
노드 설정이랑 전부 옮겨 줄 수 있다.
컴파일 저장 해주자
메인창으로 가서
BP_MovetoDirection을 뷰포트 창에 올려주자
1)
위치 y = -200 높이 50
회전 z = 40
2)
위치 y = 200 높이 50
회전 z = 40
플레이 해보면
2개가 기존 위치에서 다르게 값을 갖는것을 볼 수 있다.
이 전방 위치 였는데 둘다 다른 방향으로 이동 한 것을 볼 수 있다.
이런 식으로 기본적으로 많이 쓰인다 .(벡터를 이용한 좌표입력 및 이동)
모두저장
메인창으로 가서
Level_MovetoLocation복사
Level_MovetoEnemy 이름변경저장 해주고 더블클릭
안에서 뷰포트 큐브들 삭제
02_Vector / BP_MovetoDirection복사
BP_Move_Enemy
이걸 따라가게 할 것이다
더블클릭해서 블루프린트 에 이벤트 그래프 전부 삭제해주자
뷰포트로 가서 머티리얼 컬러 전 수업에서 만든거 M_Color_Red 설정
이것을 메인 화면으로 가서 아무대나 배치
이렇게 하고
BP_Move_Enemy 복사해서
BP_Move_Follower로 바꿔주자
들어가서
이거는 M_Color_Green으로 바꿔주자
이벤트 그래프로 가서
Tick은 매프레임 마다 호출해 주는 것이라고 했다.
일단 저 따라갈 것의 위치를 알아야 쫒아 갈테니까
BP_Move_Follower에 있는 변수는 지워주고 하나 추가해주자
변수추가 Enemy
변수 유형에서 오브젝트 타입 -> BP Move Enenmy 오브젝트 레퍼런스
컴파일 해주고 눈을 켜주자
이것의 위치를 얻어 올 것이다.
이것도 Actor니까
GetActorLocation을 쓸 것이기에
아까 말했듯이 뒤가 앞을 바라본다고 했다.
그러면 GetActorLocation
이곳 Self는 자기 자신을 의미 한다.
this[자기자신]
그러면 vector - vector하면
그러면 현재 위치가 저 위치를 바라보는 방향을 말하는데
그런데 길이가 얼마인지 모른다. (거리가 얼마인지 모른다)
물론 이것의 크기를 보면 2개의 거리가 나온다.
우리는
2D : 평면상 X, Y만 사용할때 쓰인다. 높이 필요없이 할때
우리는 그냥 Normalize 해주면 된다.
Tolerance : 크기가 0 일때 얼마만큼 고정 시켜 줄 것인가 (지금은 신경 쓸 필요없음)
그럼 이렇게 Normalize 해주면 방향값이 나왔다. 이곳에 속도를 * 곱해주면 된다.
vector * float
우리가 이동값은 델타 세컨드를 곱해서 고정해준다고 DX 설명에 있다. (알아두면 됨)
float * float
값은 30정도 곱해주자(속도)
그러면 곱해주고
자기 씬에서 위치에서 더해서 SetActorLocation을 호출해 주어야 한다.
위 Normalize를 움직일 속도가 된다.
그렇게 나온 결과값이 이동할 위치이다.
GetActorLocation
현재 위치에서 얼마만큼 갈 것인가?
Vector + Vector
해주고 연결
(그러면 유도처럼 쫒아갈 수 있을 것이다. )
SetActorLocation
TIck 실행핀 연결해서 값을 넣어주자
컴파일 _저장
메인창으로 가서
MovetoFollower 뷰포트로 배치
아무대나 배치해두자
이제 enemy 셋팅해줘야 하는데
옆에 스포이드 이미지를 클릭해서
빨간색 올려둔 Enemy에 끌어서 선택해주자
(리스트에서 선택해줘도 됨 )
그럼 이렇게 선택이 된다.
그러고 나서 플레이 해보면
쫒아 가는 걸 볼 수 있고
좌 우측으로 움직여도 빨간색 박스에 있는 곳으로만 쫒아 가는 걸 볼 수 있다.
그런 경우도 있을 것이다.
따라오다가 더이상 수행을 안하고 싶은경우
거리르 판단하는 것
(위치를 같다 라고 판단하면 안된다 왜냐하면 인트형에서는 같다라는 것이 있기는 한데 잘 안쓴다.
특히 게임프로그래밍에서는 같다라는 표현을 잘 안쓴다.)
Is Near이라고 표시하는데 (근처에)
예를들어 자동차 게임을 만든다고 생각해보자
그러면 속도를 줘야하는데
속도를 Int형을 주면 어떻게 될까?
뚝뚝 끊기는 모션이 생길 것이다.
int형은 값이 끊어지는 값이라서
0, 1, 2, 3 이런식으로
그래서 연속적인 값을 쓸려고 Float형을 쓴다.
그러면 만약에 속도가 100km였다
내가 감소를 시작한다.
그러면 빼지는 않고 곱하기를 할 것이다.
곱하기 즉 비율로 10% 만큼 줄여라 20%만큼 줄여라
그러면 계속 곱하기로 그 값은 줄어들 것이다.
그러면 - 가 될때 0을 지날까?
절대 안떨어진다. (가끔 낮은 확률로 떨어질 수도 있긴함)
그래서 점점 줄다가 0의 근처에 들어왔으면
멈춰라 0이라고 하는 것
float은 애초에 소수점 8자리 까지인데
그게 거의 같을 이유는 없다.
위에서 Tolerance 도 해당 값안에 들어왔으면 크기가 1로 간주하라는 말이다.
그래서 프로그래밍에서는 용어가 여러가지의 단어로 쓰이고 있는데.
앱실론?쓰는 사람도 있고
그래서 이게 얼마만큼 왔을때 더이상 쫒아 가지 않겠다. 하는거면
2개의 거리를 판단해서
Neary를 쓴다.
Nearly 0 = 0 근처
Nearly equal이면 그 값과 비교하는 것
BP_Move_Follower 로 가서
Tick에서 우리가 이미 연결된 링크안에 무언가 추가를 하고 싶을때
실행핀을 그대로 끌어서 추가해주면 자동으로 연결해준다.
시퀀스에 1번에다
if(branch)
Distance (vector) : 두 점 사이의 거리 8
생성
위에서 가져다가
복사해서 붙여넣기
2개 사이의 거리
Nearly 사용법
Distance에서 Nearly Equal
B에서 들어온 거리 100 정도
Error Tolerance ; 오차 범위 즉 지금은 100.000000001 의 근처가 되야 true이다 .
만약 1주면 99나 101이나 근처 값이니까 그곳에서멈추게 된다.
Error - Tolerance를 20 정도로 맞추자
100 에서 +-
지금은 100에서 +- 20
100안에 들어왔으~면 (Branch)
True라면 print String = Alive
속도가 좀 느리니까 아까 30 맞춰준 속도를
100으로 맞춰주자
BreakPoint 사용법) https://ppatabox.tistory.com/70
Float <= Float사용하기
Nearly부분을 제거 하고
float <= float으로 설정
값은 100 그대로 연결
그대로 연결하고 메인창으로 와서 실행해보면
100 근처에 왔을때 True -> Alive가 쫘라락 뜨는 것을 볼 수 있다.
빙의 풀고 해도
똑같이 다른데서 와도 똑같이 실행 되는 것을 볼 수 있다.
지금은 프레임 마다. Alive를 출력해주고 있다.
실제 게임 모드에서는 60프레임 맞추면 60프레임 맞춰져 있는데.
Tick은 그렇지 않다.
한번 보자
메인창에 와서 뷰포트 좌상단에
화살표를 클릭해보면 FPS 표시가 있다.
프레임은 컴퓨터 사양에 따라 다른데
현재 본사용자는 컴퓨터 사양이 좀 높아서 높게 잡힌다.
60프레임 맞춰져 있다면 맞춰져 있고
밑에 ms가 이전시간하고 현재시간의 시차
언리얼 엔진 시스템 셋팅 (사양변경) ) https://ppatabox.tistory.com/71
다음 시간 )
각주)
- [/footnote]
이동 위치를 판단하기 위해서 기준을 세워주자
메인창 뷰포트에서
판을 지워주고
액터 배치에서 평면을 끌어다가 위치초기화
스케일을 x, y 30씩 늘려주자
원기둥으로 기준을 하나 세우자
역시 위치는 초기화 시켜주고
스케일 0.1 ,0.1 , 두께 2.0
높이는 지면으로 올려야 하니까 곱하기 2 해서 100
머터리얼에 저기 머터리얼 창에서 선택도 가능하고 콘텐츠 브라우저에서 끌어다가
사용할 수도 있다.
그러고 나서 게임패드 모양을 선택해보자
살짝 뒤로빼주자
빨간색 축이다.
플레이를 누르면 시작할 지점이 되는 것이다.
플레이를 눌러보면 자기가 위치 했던 위치에서 플레이가 시작된다.
BP_Position에서
이벤트그래프로 들어가주자
싹 지워주고 다시 생성하겠음
변수를 생성해 줄 것이다.
(지난시간 다 알려준 내용이라 부가 설명 안하겠음)
변수유형 : Vectro(여기서 vector는 3차원 벡터이다)
다시 블루프린트 창에서 오른쪽 버튼 눌러서
GetActorLocation[footnote]GetActorLocation : 현재 이 Actor의 위치를 리턴해준다. [본문으로]
- integer : 부등식 [본문으로]
- Branch : 조건문(if문) [본문으로]
- Append: 문자를 연결해주는 역할 [본문으로]
- Make Literal String : 상수 [본문으로]
- 시퀀스 : 순서대로 실행하게 해준다 [본문으로]
- Tick : 매 프레임 마다 호출 해주는 것 [본문으로]
- Distance(Vector): 두 점 사이의 거리 [본문으로]
'🅿🆁🅾🅶🆁🅰🅼🅼🅸🅽🅶 > Uɴʀᴇᴀʟ [BP]' 카테고리의 다른 글
[Unreal Engine] 블루 프린트_Player 카메라| BluePrint_ Player (0) | 2021.12.14 |
---|---|
[Unreal Engine] 시스템 성능 setting 하기 | System Quality (0) | 2021.12.12 |
[Unreal Engine] 블루 프린트 BreakPoint 브레이크 포인트 사용 방법 (0) | 2021.12.12 |