언리얼엔진/언리얼 C++ 39

GameplayAbilitySystem - Ability

※ 개인적인 공부를 위해 포스팅 하는 글입니다.▶ 일반 공격을 Ability 시스템을 이용해 만들어보자ㆍ 늘 하던 구조인 GameplayAbility를 상속받은 클래스를 만들어서 총괄처럼 관리 + 파생클래스인 Attack 생성ㆍ 타고 들어가서 부모클래스를 보면 언리얼에서 뭐가 중요한지 주석도 쳐놨고 기능도 적어뒀다. ㆍ 그리고 당연하게도 정의할만한 가상함수들도 꽤 있겠다.- CanActivateAbility: 사용할수있는지 (스킬은 배워야 하는거니)- ActivateAbility: 사용중- EndAbility: 끝함수 이름과 기능이 좀 직관적이다. 필요한걸 딱 가져와서 사용할 준비를 한 모습 # 기능을 눈으로 보기 편하게 상속받은BP를 하나 파보자.ㆍ 태그로 관리한다는 것을 볼 수 있고, 쿨다운, 코스트..

GameplayAbilitySystem - Effect

※ 개인적인 공부를 위해 포스팅 하는 글입니다.▶ Effect (효과) # Effect는 뭔짓을 하는놈일까?ㆍ 말 그래도 게임에서 뭔가 효과를 입히는걸 Efffcet라고 부른다ㆍ GamePlayEffect라고 부른다ㆍ 단발성효과, 도트데미지 등등 옵션같은것이 다 정의되어 있어 사용하기만 하면 된다.ㆍ 또한 디버프, 버프... 점화를걸고 또 점화를걸고...ㆍ 물약을 먹고... 또 먹고... 중첩이되나? 시간이 초기화되나?ㆍ 평타3타마다 추가피해.... 등등 → 다양한 효과에 대한 처리를 이걸 통해 관리해 주면 된다. 눈으로 보기 편하게 BP를 먼저 파주자  ㆍ 예시를 들면 저렇게 사용할 수 있을 것 같다. 진짜 많은 기능이 준비가 되어있는데 아래 예시를보자ㆍ 10초동안 데미지를 주고싶고, 그 틱은 0.5초..

GameplayAbilitySystem - Attribute

※ 개인적인 공부를 위해 포스팅 하는 글입니다.# AbilitySystemComponentㆍ 얘는 매니저 클래스 느낌으로 사용하면 된다.ㆍ 즉 저번 포스팅은 스킬 매니저 오늘은 스탯 매니저를 만든다고 생각하면된다.  ▶ Attribute ㆍ 스텟에 관련된걸 관리하는거라 생각하면 된다,  (직역 : 속성, 특성, 특질) # 사용하는 이유?ㆍ 지금은 Character 클래스에서 스텟을 관리해주고 있다.ㆍ rpg에선 스텟의 종류도 엄청 많겠다.... 또한 아이템으로 인해 스텟도 주기적으로 변하고 버프가 있을수도 있고... 무언가 처리할 코드가 많아진다. ㆍ Character클래스에서 다른 기능과 함께 하나로 관리해주는 구조보단, Attribute를 이용해 따로 관리해 주는게 유지보수 측면에서 편리하겠다. #클..

GameAbilitySystem 이론과 초기 세팅

※ 개인적인 공부를 위해 포스팅 하는 글입니다.공식 문서 : https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-ability-system-for-unreal-engine?application_version=5.3# 왜 필요할가?ㆍ 아이템, 스킬.. 등등 없는게임을 찾기 힘들다. ㆍ 예를들어 롤같은 게임을 보자. 챔피언이 160개가 넘는데 스킬을 최소5개씩 가지고있다... 이런거를 관리해주기 어렵다.. ㆍ 또한 이런 상태도 예를 한번 보자.적1명이 독데미지 디버프와, 점화를 걸었다.  또다른 적 1명이 점화를 걸었다. 피해를 받은 사람은 15초간 회복되는 물약을 3개를 먹었다.→ 이런걸 어떻게 처리할 수 있을까? 데이터로 관리해주고 ..

Inventory - 아이템 DragAndDrop

※ 개인적인 공부를 위해 포스팅 하는 글입니다.#놀랍게도 DragDrop의 상속을 받는 클래스를 생성할 수 있다. ㆍ 실제로 마우스를 드래그 드롭 하는 순간에 보이는 위젯도 별도로 만들어줘야 하기에, 미리 클래스도 생성해줬다.-> 흣챠~! 들리는 이미지 # DragDropOperationㆍ 이미 엔진레벨에서 정의가 되어있어서 뭐 사실 별 기능은 없다. 추후 확장성을 위해 커스텀하기 편하게 가져와 사용할 준비만 해준것. ㆍ 위젯 부분도 지금은 뭐 사이즈랑, 아이콘 이미지 세팅같은걸 받아줄 준비정도만 해주는정도로 끝냈다.  #Entry 클래스ㆍ 인풋과 드래그와 관련된 함수들이 정의되어있는데, 이 함수들의 구현부를 한번 작성해보자ㆍ Drag위젯클래스를 받을 수 있는 변수도 선언해주고, 당연히 전방선언 했다.ㆍ..

Inventory - 아이템창에 아이템 구성해보기

※ 개인적인 공부를 위해 포스팅 하는 글입니다. #아이템 구성해보기 - 지난포스팅 까지 인벤토리창에 cell(slot) 을 구성하고 관리 해 줄 수 있는 SubSystem을 이용한 매니저클래스까지 준비해둔 상태이다 ㆍ 여기에 아이템을 구성해 볼 예정이다# Entry 클래스ㆍ 아이템 엔드리에서 마우스 드래그 및 클릭에 대한 액션을 처리하는게 올바른 구조인거같아 여기서 정의해 주었다.메타이름과 같게 하는걸 잊지말자ㆍ 직관적이다. 뭐 내가 선택되었다 강조해주는 부분인듯아무튼 엔트리 클래스를 작성할 준비를 해주고..  엔트리 보기 위해 상속받는 wbp를 만들어보자 계층구조는 위와 같이 해주자 ㆍ 이미지를 보면 뭘하려는지 대충 알겠다.  # InventorySlots 클래스에서 InventorySlot 클래스를 ..

SubSystem - 아이템 매니저

※ 개인적인 공부를 위해 포스팅 하는 글입니다. # 아이템데이터를 이용할수도 있지만 일단 이 포스팅에선 빨리하기 위해 이건 ㄴㄴ-> 아이템 정보는 플레이어와 스탯 연동... 그럴라면 게임어빌리티 시스템.. 등등 고려할게 좀 많으니 일단은 간단하게만 작성해봤다, 추후 포폴만들때 제대로 해봐야겠다.※ ItemInstance 클래스 생성. 오브젝트의 상속을 받는다. 디파인 클래스에 코드 추가아이템의 희귀도를 정의ㆍ Init은 데이터상에서 초기화※ 동적으로 관리해 주기 위해 아이템을 관리해 줄 수 있는 매니저 클래스가 있으면 좋겠다... # 언리얼에서 매니저 클래스를 만들려면 GameInstance Subsystem을 이용하면 된다ㆍ 생명주기를 알아서 맞춰준 매니저 클래스 . 라고 한마디로 정리 가능공식문서 링..

Scene UI - 인벤토리 구성

※ 개인적인 공부를 위해 포스팅 하는 글입니다.# Scene UI ㆍ 이전 포스팅에선 객체를 따라다니는 UI였는데 그거 말고 다른UIㆍ 말 그대로 화면 전체에서 있는 UI느낌으로 이해하자ㆍ HP바, 스킬창..인벤토리창...(보이는지 안보이는지 여부)  ㆍ 위젯 BP를 보면 사용자 정의위젯을 가져올 수 있다.   # 계층 구조가 중요하다. 인벤토리를 구성해보자ㆍ 인벤토리 슬롯1개... 슬롯들,,, 그리고 인벤토리.. WBP는 계층구조가 정말 중요하다고 알고있다. ㆍ만든 인벤토리를 여기에 올리는 작업을 할 것 이다. Scene Widget이니 추후 다른 UI들도 추가될 것이다.  이 HUD클래스가 구시대의 유물이긴 하지만, UI매니저같은 역할을 해준다고 한다.     # 인벤토리-  BP와 위젯을 이용한 간..

객체를 따라다니는 UI

※ 개인적인 공부를 위해 포스팅 하는 글입니다.# 화면에 떠있는 HUD가 아니라 객체를 따라다니는 UI를 만들고싶다... 적 위에 떠있는 체력바 느낌? ㆍ 화면 전체에 나오는 UI가 아니기 때문에 Fill Screen이 아니라 Desired로 옵션을 바꿔주자.ㆍ 변수로 승격해서 이렇게 관리하는 구조가 되게 자주 쓰인다고 하니 기억해두자. ㆍ 쓰고 싶은 부분에서 컴포넌트로 추가할 수 있다. (테스트를 위한거라 일단 그냥 붙힘) ★ 그냥 쓰면 얘는 더이상 화면에 떠있는 UI좌표가 아니라 월드오브젝트의 좌표가 되어버린다ㆍ 아니 그럼... 이렇게 회전값으로 인해 이상하게 UI가 나온다...동그라미친 옵션(스페이스) 를 Screen으로 교체해 주면 카메라 방향을 기준으로 회전을 해주는 효과. 즉 스크린에다가 UI..

UI 위젯블루프린트

※ 개인적인 공부를 위해 포스팅 하는 글입니다. # 위젯 블루프린트ㆍ 추후 C++로 만들면 내가 만든거의 c++를 상속받겠지만 지금은 그냥 기본 베이스의 상속을 받은 bp를 생성했다. ㆍ 그래프가 코딩을 하는 영역, 디자이너탭이 디자이너. ㆍ 팔레트에 뭐 직관적인 것들이 많다. ㆍ 이름은 C++에서 접근할 때 이 이름으로 접근하기 때문에 신경을 쓰는게 좋다. #불러오기ㆍ 레벨 블루프린트에서 이런식으로 추가하면 된다.ㆍ 버튼을 보면 변수여부 라고 해가지고 그래프창에 변수로 들어오게 할지 여부를 고를수도 있다.  # 해상도 대응 (앵커)  ㆍ 앵커를 찍고. 그 앵커를 기준으로 대응하겠다. 따라서 해상도에 상관 없이 UI가 대응되는것이다.(앵커의 위치는 동일하기 떄문에) ㆍ 이렇게 앵커에 따라 자동으로UI가 ..