분류 전체보기 83

OpenWorldRpg (9) 무기 장착 및 해제

무기를 등에 장착 및 해제하는 것을 구현해 볼 것이다. Miximo에서 무기를 등에 장착 및 해제하는 애니메이션을 구했다.위와 같이 장착과 해제 두 애니메이션을 넣은 몽타주를 만들고 Arm, Disarm, FinishEquipping 노티파이를 추가한다. Arm과 Disarm은 손을 등에 가져다 대는 그 순간 무기를 등에 부착시켜야 하므로 필요하다. FinishEquipping은 무기를 장착하는 동안 움직이지 못하도록 하고 끝나면 다시 움직일 수 있도록 타이밍을 알려주기 위함이다.캐릭터 헤더파일에 함수를 추가하고 블프에서 불러올 수 있도록 한다.E키를 눌러서 무기 장착 및 해제를 하려고 한다. CanDisarm과 Canarm은 따로 분리하여 아래와 같이 간략화 하였다.장착 몽타주는 전에 만든 공격 몽타주..

OpenWorldRpg (8) Metasound

언리얼 5에서 새로 생긴 MetaSound를 이용해보려했는데 MetaSound 소스를 만들기만하면 자꾸 에디터가 Crash가 나면서 꺼져버렸다. 해결하기 위해 엔진버전도 낮추어보고 재설치도 해보고 엔진파일 검증도하고 구글링도 하면서 며칠을 헤매다 간신히 해결하였다. 언리얼 엔진에서 제공하는 프로젝트를 가져왔었는데 그 프로젝트에 포함된 MetaSound 파일을 가져올때 오류가 생겼던 것이었다. 파일에 포함된 소스들을 전부 삭제하니 정상적으로 동작하였다. MetaSound는 블루프린트와 같이 소리를 블프마냥 사용하여 편리하게 적용할 수 있는 시스템이다.위와 같이 검을 휘두르는 소리를 적용하기 위해 메타사운드 소스를 만들고 입력을 추가하여 WavePlayer에 연결한다. Random(float) 함수로 소리 ..

OpenWorldRpg (7) 공격 애니메이션 구현

몽타주를 이용하여 공격 애니메이션을 구현해 볼 것이다.몽타주 블루프린트를 만들고 위와 같이 2개의 다른 공격애니메이션을 넣었다.블루프린트로 작업한다면 위와 같이 캐릭터의 애님 인스턴스를 구해서 Montage Play 함수에 넣으면 된다. 위의 과정을 C++로 구현할 것이다.먼저 몽타주 플레이를 위해서는 위와 같이 DefalutSlot을 추가해야한다.캐릭터 헤더 파일에 UAnimMontage 타입의 변수를 만든다.공격을 입력받을 시 캐릭터메시에서 애님 인스턴스를 가져와 MontagePlay 함수를 동작한다. 0과 1중에 무작위로 골라서 Attack1 또는 Attack2를 동작한다.무기를 장착하지 않았을 시 공격 애니메이션이 나오지 않도록 하기위해서 EActionState를 하나 더 만들었다. Unoccup..

OpenWorldRpg (6) 무기 장착 및 EnumState로 상태에 따른 애니메이션 구현

무기에 다가가 키를 누르면 무기를 장착하는 시스템과 Enum을 사용하여 캐릭터의 상태를 구분하고 상태에 따라 다른 애니메이션을 구현해 볼 것이다.앞서했던 것 처럼 EnhancedInput 시ㅡ템에 EKeyPressedAction을 바인딩하여 E키 입력을 추가한다.다음으로 캐릭터에 있는 오버랩된 아이템 정보를 넘기기 위한 함수를 만든다. OverlappingItem은 private으로 보호되어있어 원래 다른 파일에서 접근이 불가능하지만 위처럼 FORCEINLINE을 이용하여 함수로 적용하면 아이템 정보를 넘길 수 있다. 예전 블루프린트에서 이벤트 바인드를 활용한 것과 비슷하다는 느낌을 받았다.Item.cpp에서 오버랩시와 오버랩엔드시 SlashCharacter에 접근하여 위에서 만든 함수를 가져온다. 오버..

OpenWorldRpg (5) 애니메이션 리타깃 및 무기 장착

여러 애니메이션 소스를 구해 언리얼에 있는 캐릭터에 적용시키는 리타깃과 무기에 다가가면 오버랩되면서 캐릭터가 무기를 장착하는 이벤트를 C++로 구현해볼 것이다.Fap에서 간단한 에셋을 구해 Weapon에 넣어주었다.캐릭터의 스켈레톤에서 오른손에 소켓을 추가하고 RightHandSocket이라 이름붙였다. 소켓에 앞서 만든 Weapon을 넣어주고 위치를 조정하여 손에 든 모션으로 바꾸어준다.무료 애니메이션 소스를 구할 수 있는 Maximo 사이트이다. 사이트에서 제공하는 기본 캐릭터인 xBot을 다운받고 애니메이션도 다운받는다.애니메이션을 기존의 캐릭터에 적용시키려면 양쪽의 스켈레톤에서 부분들을 전부 수작업으로 등록하여 리타겟하는 방법이 원래의 방식이었다. 하지만 언리얼 5.4부터 자동 리타겟을 제공하고 ..

OpenWorldRpg (4) C++로 오버랩 이벤트 구현하기

블루프린트로 많이 해보았던 오버랩이벤트를 C++로 구현해볼 것이다. 여기서 Delegates라는 디자인패턴을 사용할 것이다. 언리얼의 오버랩을 예시로 들자면 다음과 같다. USceneComponent에 UShpereComponent를 Attach하면 그 사이에 UPrimitiveComponent라는 요소가 들어가게된다. 이 UPrimitiveComponent에는 여러 Delegates들이 내장되어있는데 그 중 하나가 OnComponentBeginOverlap이다. OnComponentBeginOverlap 이벤트가 동작하면 Sphere의 콜백함수가 동작하는 것이다. 이때 콜백함수에 올바른 타입이 필요하다.(float, bool 등등)위는 PrimitiveComponent.h파일의 OnComponentBe..

OpenWorldRpg (3) 캐릭터 애니메이션 및 IK Bones 활용

캐릭터의 이동 애니메이션을 적용해보고 IK Bones를 활용하여 경사진 곳에서 캐릭터의 두 발이 경사면 바닥에 자연스럽게 닿도록 구현해 볼 것이다.AnimInstance 타입의 C++ 파일을 생성하고 GroundSpeed와 IsFalling 변수를 선언한다. Kismet헤더파일을 include하고 VSizeXY함수로 Movement컴포넌트를 가져와서 속도를 구해 GroundSpeed로 넣어준다. bool타입의 IsFalling은 언리얼에서 기본으로 제공하는 IsFalling함수로 넣어준다. ABP 스테이트 머신은 예전에 사용했던 것과 거의 유사하다. IsFalling에 따라 애니메이션을 다르게 넣어주면된다. 다음으로 전에 만들었던 2D와 다르게 3D에서 유용한 기능이다. 경사면에서 캐릭터의 두 발중 한 ..

OpenWorldRpg (2) 캐릭터 생성 및 이동구현

최근에 코딩공부를 하면서 언리얼 프로젝트과정이 좀 늦어졌다. 플레이어가 사용할 캐릭터를 생성하고 캐릭터의 이동을 구현해볼 것이다. 블루프린트로는 많이 해본 과정을 비주얼 스튜디오 C++을 사용하여 만들어 볼 것이다. 새 C++ 파일을 Character형식으로 만든다.위와 같이 헤더파일에 사용할 컴포넌트들을 전방선언해준다.UPROPERTY를 사용하여 에디터에서 볼 수 있도록 편집한다. 움직임을 동작하는 Move함수와 마우스 움직임으로 화면을 돌리는 Look함수를 선언한다.언리얼 5의 향상된 입력 시스템을 위하여 위와같이 EnhancedInputComponent를 BindAction으로 연결한다.Event BeginPlay시 AddMappingContext로 Subysytem으로 연결한다.2차원 벡터의 움직..

OpenWorldRpg (1) 랜드스케이프 및 폴리지

새롭게 오픈월드 형식의 Rpg 게임을 간단히 만들어보는 프로젝트를 해보려고 한다. 먼저 넓은 오픈월드를 위해서 랜드스케이프 모드로 지형을 만들고 스컬프팅을 통하여 여러지형을 간단히 만들었다. 언리얼 5.4이상에서 새로 생긴 Fab에서 몇가지 무료 Surface를 구하였다. 머티리얼을 하나 만들고 Landscape Layer Blend 함수로 구한 Surface의 베이스 컬러와 노멀맵을 넣어준다.랜드스케이프에 위의 머티리얼을 넣어주면 아래와 같이 페이트 모드에서 간단히 교체하여 표면을 칠할 수 있다.또 몇가지 풀과 나무 에셋을 구하여 폴리지를 사용하여 아래와 같이 흩뿌려 숲의 지형을 만들었다.이런 식으로 여러 지형을 우선적으로 만들어 완성하고 이후 캐릭터를 추가해볼 것이다.

첫 게임 개발 (39) _ 플레이어 여러 애니메이션 추가

플레이어 애셋을 구해서 여러가지 애니메이션을 추가하였다. 위 공격, 아래 공격, 힐, 더블점프를 추가하였다.위와 아래 공격을 위해서 히트박스를 추가하였다.위 공격은 위 버튼을 누른상태에서 공격버튼을 눌러야하고 아래 공격도 아래 버튼을 누른 상태에서 공격을 눌러야한다. 이를 위하여 위와 아래 버튼을 누르고 있는 상태를 알 수 있도록 IA_UpDownValue 입력을 추가하였다.위 공격과 아래 공격 히트 박스를 공격시에만 활성화되도록 함수 2개를 추가하였다.위 공격과 아래 공격 적중시 이벤트를 추가로 만들었다. 기존의 기본공격적중시 이벤트와 거의 같다. 아래 공격에 적이 맞을 시 플레이어가 위로 튕겨오르도록 바꾸었다.더블점프시를 구분하기 위해서 플레이어 캐릭터가 공중에 있는지 체크를 Is Falling으로 ..