
Item Interp Variables이제 필요한 변수들을 선언해주자.보간이 시작되는 위치, 카메라 타겟 위치, 보간 여부, 보간에 사용될 타이머, 타이머 시간, 캐릭터에 대한 변수이다. 이어서 생성자에서 초기화 해주자. 이제 Curve를 시작하기위한 함수를 만들어주자. 현재 캐릭터를 할당하고, 위치 또한 GetActorLocation() 함수를 통해 설정해주자.이제 보간을 시작하므로 bInterping = true로, 상태또한 EIS_EquipInterping으로 할당해주자.이제 타이머를 통해 ZCurveTime 동한 이를 시행해주자. 타이머에 연동된 콜백 함수도 필요하다. 현재 캐릭터를 체크하고, 해당 캐릭터를 통해 현재 아이템을 집도록 하자.해당 함수에서 아이템이 무기가 맞다면 무기 교체를 실시한다.

Item Z Curve무기가 특정 위치에 부드럽게 이동하도록 하기 위해 ZCurve를 이용할 것이다.우선 CurveFloat 변수를 선언해주자. 그리고 언리얼에서 커브를 직접 생성해주어야 한다. 휠 버튼 또는 우클릭 Add key 버튼을 통해 포인트를 생성하자.우선 첫 번째 포인트는 0.0, 0.0으로 지정하였다. 이어서 다음 지점도 생성해주었다.나머지도 강의에 따라 생성하였다. 모든 포인트들을 드래그하고 F을 누르면 그래프에 맞게 확대축소가 조절된다. 지금은 뾰족한 상태이니 이를 둥글게 만들어주자.우클릭하여 Auto를 누르면 둥글게 바뀐다. 각 포인트에 존재하는 핸들을 조절하여 추가적인 각도 조절이 가능하다. 핸들을 우클릭하고 Break을 누르면 핸들에 대해서 좌측, 우측 개별로 조절도 가능하다.

Camera Interp Location지금은 무기를 교체할 때 무기가 바로 스왑된다.무기를 바꾸기 전에 교체될 무기가 잠시 위쪽에 표시됐다가 이후에 바뀌도록 수정해보자.해당 과정은 보간을 통해 조절될 것이다. 먼저저 표시될 위치가 필요하다.목표 작업은 다음과 같다. 우선 위치를 얻기 위한 함수를 작성해주자.해당 함수는 다른 곳에서 사용되는 함수이기에 ShooterCharacter 클래스에서 public 섹션에 작성해주어야 한다. 앞에 대한 거리와, 위에 대한 거리 변수를 선언해주자. 이어서 생성자에서 초기화 해주자. 기존 FollowCamera를 통해 카메라 위치를 얻고, GetFowardVector를 통해 해당 카메라의 전방 벡터를 얻어주자.전방 벡터에 앞에 대한 거리 값을 곱해 실제 거리를 얻고,이..

Swap Weapon이제 무기를 바꿔보자.이를 위해 트레이스한 아이템에 대해서 알아야 한다.이에 대한 변수를 선언해주자. 함수 또한 생성해주자.인풋 매개 변수는 Awepon* 타입이다. 무기를 바꾸기 위해서는 기존 무기를 떨어뜨려야한다.따라서 DropWeapon() 함수를 호출하고, 이어서 EquipWeapon() 함수를 호출하여 새로운 무기를 장착하자.그러면서 TraceHitItme과 TraceHiItemLastFrame 값을 nullptr로 바꿔주자.기존에 추적하던 무기를 이제 장착한 상태이기에 다시 새로운 무기를 장착하기 위해 초기화해주는 것이 좋다. 그리고 SelectButtonReleased 함수를 이용하여 SwapWeapon() 함수를 호출해주자.E를 누르면서 무기를 버리고, 트레이스 한 아이..

Throw Weapon지금은 E키를 누르면 무기가 그대로 떨어지지만, 좀 더 날아가서 떨어지도록 바꿔보자.Weapon 클래스에서 해당 기능을 구현할 것이기에 헤더에서 생성자랑 관련 함수, 변수들도 선언해주자. 생성자에서 변수들을 초기화해주고, Tick을 활성화하는 문구도 적어주었다. 다음으로 무기가 멀리 나가는 함수를 작성해주자.현재 회전 값을 얻고, 이를 토대로 WorldRotation을 세팅해준다.이떄 ETeleportType::TeleportPhysics 값을 사용하여 물리적 시뮬레이트를 즉시 업데이트하여 순식간에 이동하도록 해준다. 이후 전방 벡터와 right 벡터를 얻고 이를 토대로 충격 방향을 설정한다.그리고 Z축으로 30도의 충돌값을 추가로 설정하고, 충돌 방향에 크기를 곱해준다.이를 토대로..

Item Falling State이제 떨어지는 상태에 대해서 구현해주자.우선 기존 Belica_guns를 토대로 물리적 에셋을 만들어줄 것이다. Primitive Type은 Box를 선택해주자. 이제 해당 파일을 열어보면 다음과 같은 화면을 볼 수 있다.여기서 우리는 총기를 제외한 나머지 부분을 전부 삭제시켜줄 것이다. 아래 부분들을 모두 삭제해주자. 이제 물리적 몸체를 뜻하는 사각형 박스를 총기에 맞춰서 조절해주자. 이렇게 만든 것을 기존 Belica_Guns의 Physics와 Lighing 에셋에 할당해주자. 이제 ETS_Falling에 대해 값을 설정해주자.캐릭터에서 떨어졌으므로 다시 Physics를 활성화해주고, 콜리즌을 켜주자.또한 Gravity 값도 활성화 해주었다. (기존 코드 다른 stat..

Detach Weapon무기를 장비하기 위해서는 현재 착용하고 있는 무기를 캐릭터에서 분리시켜야 한다.이를 위한 함수를 구현해주자. 무기를 분리하기 위해선 ItemMesh에 대해서 접근해야한다.ShooterCharacter 클래스에서 분리에 대한 작업을 하게 되므로, Item 클래스에서 getter 함수를 만들어주자. 그리고 이에 관한 액션 매핑도 지금 만들어주었다.E키를 누르면 현재 장착하고 있는 무기가 캐릭터에서 분리될 것이다. 분리를 위해서는 관련된 규칙에 대해아아야 한다.우리가 사용할 것은 KeepWorld로, 분리시 해당 위치에 그대로 유지시키도록 해주는 것이다.또한 회전 상태도 유지하기 위해 값을 true로 넘겨줄 것이다. 그리고 액션 매핑에 대해 바인딩할 함수를 작성해주자. 이제 버튼을 눌렀..

Set Item Properties이제 Switch 문을 통해 상태에 대해 상세한 내용을 구현해주자.우선 이를 위한 함수를 선언해주자. 그리고 Switch 문을 통해 지금 다룰 수 있는 상태인 Pickup과 Equipped에 대해 작성해주자.Pickup의 경우 다음과 같은 내용이 필요하다.물리 시뮬레이션 비활성화 Visibility 활성화충돌 채널 반응 무시충돌 비활성화AreaSphere에 대해 오버랩 이벤트 감지AreaSphere에 대해 오버랩 이벤트 활성화CollsionBox에 대해 충돌 이벤트 무시 CollisionBox에 대해 시각적 충돌 활성화CollisionBox에 대해 오버랩 이벤트 충돌 검사 및 물리적 충돌 활성화 Equipped의 경우 CollsionBox에 대한 충돌 이벤트와 AreS..

Item State이번에는 전에 EItemRarity를 통해 레어도를 설정했던 것과 유사하게,EItemState를 활용하여 무기의 상태에 대해 다루게 된다.무기의 상태는 아래와 같이 5가지가 존재한다.EIS_Pickup : 무기가 집힐 수 있는 상태EIS_EquipInterping : 무기가 집히면서 보간되는 중인 상태EIS_Pickedup : 무기가 집어진 상태EIS_Equipped : 무기가 장착된 상태EIS_Falling : 무기가 떨어지고 있는 상태 이를 토대로 레어도를 선언했을 때와 같이 enum class를 생성해주자. 이제 이에 대한 변수도 선언해주자. 초기화로 기본값은 Pickup 상태로 해주었다. 다음으로 ItemState 얻기 및 세팅을 위한 getter 함수를 생성해주었다. 세팅을 통..

Equip Function이제 총기를 장비하기 위한 기능을 구현해보자.이에 대한 함수를 구현해줄 것이며, 인풋으로 Aweapon* 타입 변수를 받게 된다. 그리고 총기를 얻었을 때 해당 총기는 구체와 콜리즌 박스에 대해 충돌 설정이 없어야 한다.만약 충돌 설정이 존재하면 박스와 총구에서 나오는 총알이 부딪혀서 총알이 나가지 않는 현상이 발생한다.따라서 이를 위해 getter 함수를 생성하여 접근이 가능하도록 해주자. 이제 함수 구현이다.기존의 기본 무기 생성 함수 부분에서 많은 내용을 그대로 사용한다.충돌 설정을 해제하는 2가지 부분만 추가하게 된다. 이에 따라 기존 SpawnDefaultWeapon 함수를 고칠 것이다.우선 함수 타입을 Aweapon* return 하도록 바꿔주자.기본 무기를 retu..

Spawn Default Weapon지금은 기본적으로 총기가 캐릭터에 붙어있는 상태이다.총기를 스폰하기 위해 기존 캐릭터의 총기를 안보이게 감춰주자. 이제 총기를 스폰 시켜줄 준비를 하자.장비된 무기에 대한 변수와, 할당할 WeaponClass에 대한 TSubclassOf 변수를 선언해주자. 그리고 무기 스폰을 위한 함수도 작성해주자. 그리고 우선 스폰할 위치를 검토해주자.우리는 오른쪽 손에 스폰해줄 것이며, 해당 위치에 총기를 위한 소켓을 만들어주자. Preview를 통해 미리 총기를 장착했을 때의 모습을 볼 수 있다.이때 총기를 적절히 회전 및 이동시켜서 위치를 조정해주자. 이제 소켓이름을 토대로 함수를 작성해주자. 기본적으로 총기를 소유해야 하므로 BeginPlay() 함수에서 해당 함수를 호출해주..

Bind Star Opacity이번엔 레어도를 나타내는 별 5개에 대해서도 바인딩 작업을 해주자. 먼저 헤더파일 바로 아래 부분에 enum 클래스를 선언하여 레어도에 대해 열거해주자.각 지정된 레어도들에 대해 UMETA(Displayname = " ")을 통해 이름을 넣어주자.그리고 EIR_MAX을 통해 열거형 최대 개수를 지정하게 된다.uint8의 경우 메모리 절약을 위해 사용되었다. 그리고 해당 열거형을 변수로 선언해주자. 기본 등급은 우선 Common 등급으로 초기화하였다. 그리고 bool 타입 TArray도 선언해주자.열거형에 대해서 bool로 판별하게 될 것이다. 다음으로 Stars를 활성화하기 위한 함수이다.기본 값은 false로 초기화하고, 레어도에 따라서 해당 레어디의 별 갯수만큼 true..