FirstPerson Content를 추가했다. 사실 ThirdPerson으로 해도 무방하다. 있다면 안해도 된다.
FirstPerson으로 플레이하기 위해서 첫번때 게임모드를 변경해야 한다. 좌상 툴바의 리스트블루프린트 버튼을 누르고 변경하자. 오른쪽 월드세팅에서도 된다 세팅하면 Default Pawn이 자동으로 FirstPerson으로 설정된다.
FirstPerson Blueprint 폴더에가면 BP_FirstPersonCharacter Blueprint가 있다. 이걸 사용하면 원본이 회손되므로
우클릭해서 차일드를 만들자 이름은 BP_FP_Child로 하자
연습을 위한 폴더를 만들고 옮겨주자 그랩할 블루프린트도 BP_GrabBox로 만들었다.
연습에서는 BP_FP_Child를 디폴트폰으로 사용하기 때문에 다시 게임모드에서 변경해줘야하는데 오버라이드를 만들고 이름을 BP_FpChildGameMode로 하고
맨 아래 오버라이드에서 선택해준후
디폴트폰을 BP_FP_Child를 선택해주면 프로젝트세팅과 다르게 설정할수 있다.
BP_GrapBox를 열고 StaticMesh컴포넌트를 추가하고 그밑에 자식으로 P_Fire컨텐츠를 찾아 끌어다 놓고 선택후. 위치는 약간 올려서 불이 보이게 한다. Detail에서 Visibility를 꺼준다.
이벤트 그래프 창에서 커스텀 이벤트를 추가해준다. 비저빌러티를 토글하는 노드를 추가한다.
BP_FP_Child를 열자 레이저를 쏴서 아이템이 맞으면 그랩하게 하고 그 아이템의 비저빌리티를 켤 생각이다.
PhysicsHandle컴포넌트를 추가하자, 기존의 Arrow는 블루프린트에서 사용이 불가능하므로 +Add를 눌러 새로은 Arrow를 추가하자 Arrow1으로 이름이 자동으로 바뀐다.
다음에 사용할 LineTrace는 Block이 켜져있어야 하므로 StaticMesh의 콜리전을 BlockAllDynamic로 바꾸자.
나중에 가까이 오면 플레이어와 충돌이 계속되어 흔들릴때는 Custome으로 변경 Pawn을 제외해야한다.
Arrow1을 끌어다 이벤트 그래프에 놓고 마우스클릭을 체크하는 노드를 끌어다 LineTrace노드를 동작시킨다.
라이트레이스 노드 Outhit에서 우클릭해서 Break Hit Result를 뽑아내고
Cast를 사용해 BP_GrabBox의 EV_Fire를 동작시킨다. GrabComponent를 이용해 잡는다. 이함수는 액터컴포넌트를 자신에게 어태치해준다.
계속잡고 있게 하려면 Tick이벤트에서 위치를 계속 갱신해줘야한다. 귀차니즘으로 아까 라이트레이스에서 사용했던 위치노드를 그대로 사용했지만 그랩후 위치를 조정하기 위해서는 거리를 설정하는 X값을 다시 설정해줘야하거 잡은 거리를 측정하기 위해서는 break정보의 distance를 사용해야한다. 잡은 물체의 회전값은 카메라의 회전값을 적용하니 잘되었다.
다시 좌클릭을 하면 놓게만들어 보자.
플립플롭을 사용해서 구현해도 된다.
그런데 실행해보면 뭔가 에라가 많이 뜬다. 처음 좌클릭시 엉뚱한 물체를 잡으면 생기는 에러가 있어 Flipflop이 꼬인다.
따라서 Hold라는 Bool타입의 변수를 만들고 잡으면 true 놓으면 false로 분기시켰다.
처음 잡았을때 Hold는 True가 되므로 grab후 true로 만들자 맨마지막에 추가했다
사용된 변수들이다.
현재 우리는 고정된 Cube모양만 잡을수 있다.
BP_GrabBox를 BP_GrabItem과 같이 보편화 시키자. 이름을 바꾸자. 원래 이렇게 이름을 바꾸면 연결된 다른곳도 편집해야하는데 블루프린트를 이런걸 다 처리해준다 Good
BP_GrabItem을 열고 이벤트그래프옆 컨스트럭션 스크립에서 StaticMesh컴포넌트를 끌어다 놓고 Set StaticMesh를 추가한다. NewMesh입력을 우클릭후 변수로 변환하자
변수가 생기면 눈동자를 켜주고 우상 디테일에서 어레이로 만들어주자 변환할꺼냐고 물어보면 누르고 끝날때까지 기다리자 도중에 중단하면 꼬임.
변환후 노드에 에러가 나는데 타입이 안맞아서 그렇다.
NewMesh는 어레이라 Get Copy노드로 Item을 꺼내줘야한다
꺼낼때 Index번호를 설정해주면 원하는 걸 꺼낼수 있는데 디폴트로 0이다.
컴파일후 NewMesh의 디테일을 보면 0Array상태이다. +를 눌러 3개 만들자
연습을 위해 몇개 설정해주자
컴파일후 레벨에 Index0가 보일꺼고 BP_GrabItem을 선택하면(현재는 BP_GrabBox인데 지우고 다시 놓거가 ReplaceActor하면 됨 버거같은데 언리얼에서는 아니라고 우김) NewMesh가 잘 보이지만 Index를 선택할 방법이 없다
Index를 변수로 만들자
Get Index를 우클릭후 변수로 만들자 눈동자를 켜주자 필요없는 NewMesh의 눈동자는 꺼주자
컴파일후 BP_GramItem을 추가하고 Index번호를 바꿔주면 모양이 바뀌는걸 알수 있다.
컴파일후 플레이 해보자 ?를 제외한 다른건 잘된다. NewItem 배열에서 ?에 다른 스태틱메시를 설정해주니 잘된다.
'DXWave > 언리얼' 카테고리의 다른 글
cloth simulation (0) | 2024.10.22 |
---|---|
241021 워터오션 워터존 만들기 (1) | 2024.10.21 |
241014 PostProcess (0) | 2024.10.14 |
Door Animation (0) | 2024.10.10 |
240108 camera terget arm length, Line trace (0) | 2024.10.08 |