오늘은 저번에 만든 캐릭터 이동과 회전 등을 이용한 플랫포머 게임을 간단하게 만들어볼 생각이다.
그러기 위해 플랫포머의 기본인 발판의 이동을 만들어보겠다.
1. 액터 이동(좌우반복)
액터를 좌 우로 반복시켜주기 위한 사고
필요 변수들 : 시작위치(백터), 이동방향 및 속도(백터 - 초당 이동하는 거리와 방향을 정하기 위해 백터값으로 했다. 플로트로 축에 연결하는것보다 백터값으로 하는게 훨씬 유연성이 좋다.), 이동거리(플로트 - 이동거리는 백터로 해도 되는데 백터로 하면 이동 축을 바꿔줄 때 마다 거리 변수의 축도 변경을 해줘야하기 때문에 플로트로 했다. 한 방향으로만 이동하는게 아니라면 백터로 해도 된다)
1. 시작위치를 저장해준다.(이 스크립트를 단 하나의 엑터에만 사용할 게 아니기 때문에 이 과정을 처음에 꼭 넣어준다)
2. 원하는 속도와 방향만큼 이동시켜준다.
3. 원하는 거리만큼 이동했는지 체크한다.
4. 원하는 거리에 도달하면 방향을 반대로 바꿔준다.
1. 현재위치를 저장해준다.
게임 시작 시 엑터의 현재 위치값(Get Actor Location)을 시작위치(Start Location) 이라는 변수값에 넣어준다.
2. 원하는 속도만큼 프레임 이동시켜준다.
매 프레임마다 방향 및 속도변수(Platform Velocity) + 현재 위치인 값으로 이동시킨다.
3. 원하는 거리만큼 이동했는지 체크한다.
현재위치와 시작위치의 거리(Distance)를 계산해서 >=(크거나 같음)비교연산자를 사용해서이동 거리변수(Move Distance)이상 이동했는지 확인한다.
4. 원하는 거리에 도달하면 방향을 반대로 바꿔준다.
원하는 거리만큼 이동했다면 Negate Vector이라는 백터 반전노드를 사용해서 값을 Platform 변수를 반대로 바꿔주도록 하자.
이러면 완성! 인게임에서 아주 잘 이동한다.
2.트램펄린 만들기
플랫포머 게임에 트램펄린같은 발판을 넣고싶어서 시작했다.
1. 발판에 닿으면 점프를 높게 시키기
사고제작(실패했음)
1.임의의 박스를 만든다.
2.내 캐릭터를 변수로 지정한다.
3. Overlap을 이용하여 내 캐릭터가 박스에 닿으면 이벤트 발생하게 한다.
4. 이벤트 발생 시 내 캐릭터의 점프력을 높인다.
5. 내 캐릭터가 점프 행동을 한다.
6. 내 캐릭터가 구역을 벗어나면 점프력을 다시 원래대로 되돌린다.
1. 임의의 박스를 만든다.
컴포넌트에서 Box Collision을 만들어준다.
2. 내 캐릭터를 변수로 지정한다.
Overlap을 그냥 이용하면 다른 액터가 box에 닿아도 이벤트가 발생하기 때문에 내 플레이어 캐릭터가 맞는지 확인하기 위해 Cast to 노드를 사용하여 내 BP_NBC라는 캐릭터를 변수로 바꿔주도록 하자.
3. Overlap을 이용하여 내 캐릭터가 박스에 닿으면 이벤트 발생하게 한다.
box에 닿은 캐릭터가 내 캐릭터와 일치하는지 확인한다
4. 이벤트 발생 시 내 캐릭터의 점프력을 높인다.
내 캐릭터가 맞으면 Get Character Movement 노드를 사용해 BP_NBC의 캐릭터 상태의 점프 Z 속도를 3700으로 올린다.
5. 내 캐릭터가 점프 행동을 한다.
Jump 노드를 사용해줬다.
6. 내 캐릭터가 구역을 벗어나면 점프력을 다시 원래대로 되돌린다.
이번엔 End Overlap을 사용해서 벗어나면 점프Z속도를 다시 원래 점프력으로 변경시켰다.
그리고 실행하면....! 안된다....
테스트를 해보니 점프 속도 변경을 잘 되는데 점프가 안된다. 타겟도 정상인데.... 열심히 검색해봤지만 점프라는 유저 행동을 실행시키는 방법은 못찾았다 ㅠㅠ(혹시 아시는분 계시면 댓글좀 남겨주세요)
그 다음 단순하게 떠오른 방법은 스페이스바(점프 키) 입력을 시켜버리는 방법을 떠올렸다. 하지만 이 방법도 안나온다....
2. 팅겨나가는걸로 구현해보기
내가 배운 내용중 물체에 맞으면 팅겨 나가는걸 이용해서 한번 만들어보려고한다.
사고제작(이것도 반 실패함ㅋㅋ....)
1. 부딪힌게 내 캐릭터가 맞는지 확인
2. 부딪힐 때의 백터값에 음수를 곱해준다.(그래야 반대방향으로 팅겨나감)
3. 캐릭터에 그 운동값을 넣어준다.
1. 부딪힌게 내 캐릭터가 맞는지 확인
아까 위에랑 같으니 설명은 스킵
2. 부딪힐 때의 백터값에 음수를 곱해준다.
Hit Normal(부딪힌 운동값) 이라는 핀과 -1500이라는 숫자를 곱해준다.
3. 캐릭터에 그 운동값을 넣어준다.
곱해준 값을 Launch Character 노드에 넣고 타겟에 내 캐릭터로 설정해주면 끝!
작동은 잘 되는데 도저히 제어가 안되고 내가 원하는 정밀한 조작을 위한 트램펄린과는 거리가 멀었다...
그렇게 삽질을 하고 어떤 방법을 시도해야되나 고민하던 차에
https://www.youtube.com/watch?v=F6eqE2RM1xQ 이 영상을 만나게 됐다.
간단하게 스크립트를 보면
이렇게 나와있는데. 순서별로 설명을 하자면
1. Overlap 된게 내 캐릭터가 맞는지 확인한다.
2. 맞다면 내 캐릭터의 Impulse(추진력? 같은거로 이해하면된다) Z축을 높여준다.
그러면 이 간단한걸로 X,Y의 가속도, 속도를 전혀 줄이지 않고 Z축에 힘을 줘서 점프와 완전 같은 물리효과를 낼수있다.
신나서 그대로 따라했는데
이런 오류가 뜬다...
당황하지말고 내 캐릭터의 블루프린트로 들어가서 피직스 시뮬레이트를 검색해
체크해주자.
그리고 실행해보면
아오 넌 또 뭐야 왜 자꾸 날 괴롭혀
https://ncommit-perday.tistory.com/34
이 글을 읽고 따라해봤지만 오류만 안뜨고 안된다....
일단 그냥 점프력 높이는걸로 끝냈다....
보기에는 별거 없어보이지만... 일단 2일동안 열심히 삽질해서 만들긴 했으니 한번 봐주십쇼...(트램펄린 삽질안했으면 더 있어보이게 만들긴 했겠지만 지금 당장의 결과보다는 여러가지 시도하는게 훨 중요하니까!)
'언리얼 공부' 카테고리의 다른 글
C++언리얼 하는방법(안돼서 헤맸음) (0) | 2025.01.20 |
---|---|
Unreal[실제 Unreal에 C++ 스크립트 적용시켜보기] (0) | 2025.01.09 |
2024.12.20[캐릭터 애니메이션, 액터 회전] (0) | 2024.12.20 |
2024.12.19[블루프린트와 입력액션으로 플레이어 캐릭터 조작하기] (1) | 2024.12.19 |
2024.12.18[While Loop로 구구단만들기, 열거형으로 가위바위보 만들기] (4) | 2024.12.18 |