[이득우 언리얼 C++] 10. 아이템 상자와 무기 제작

    💻 Code : https://github.com/tedison7/ArenaBattle

    캐릭터 소켓 설정

    캐릭터 무기 추가를 위해 마켓 플레이스에서 InfinityBlade: Weapons 를 프로젝트에 추가하자. 무기는 캐릭터에 트랜스폼으로 배치하는 것이 아니라 메시에 착용해야 캐릭터 애니메이션에 따라 무기가 같이 움직인다. 언리얼 엔진은 아이템을 캐릭터에 부착하기 위해 소켓 시스템을 제공한다. hand_rSocket 소켓에 검을 부착해보자.

    그리고 위치값을 조정해서 자연스럽게 보이도록 하자.

    코드를 통해무기 스켈레탈 메시 컴포넌트를 캐릭터 메시에 부착해보자.

    컴파일후 플레이를 해보면 캐릭터손에 무기가 쥐어진 것을 확인할 수 있다.

    무기 액터의 제작

    필요에 따라 무기를 바꿀수 있게 하려면 무기를 액터로 분리해 만드는 것이 좋다. ABWeapon 액터 클래스를 생성하자. 그리고 이전에 작업한 코드들은 지운다.

    결과 화면은 같지만 캐릭터의 무기를 액터로 분리했다는 점이 다르다.

    아이템 상자의 제작

    플레이어에게 무기를 공급해줄 아이템 상자를 제작해보자. Actor클래스를 부모로하는 ABItemBox 클래스를 생성하였다.

    다음으로 폰이 아이템을 획득 가능하도록 아이템 상자에 오브젝트 채널을 추가한다. ItemBox라는 오브젝트 채널을 기본 반응 무시로 지정하여 추가하였다.

    ItemBox라는 프리셋도 추가하여 모두 무시하되 ABCharacter만 겹침으로 설정하고 ABCharacter의 프리셋에도 ItemBox 오브젝트를 겹침으로 설정한다.

    그리고 OnComponentBeginOverlap 델리게이트를 활용하여 겹침 이벤트를 구현해 보자

    컴파일 후 아이템을 배치하여 캐릭터를 아이템에 통과할때 로그가 발생함을 확인할 수 있다.

    아이템의 습득

    이제 아이템 상자를 통과하면 맨손의 플레이어에게 아이템을 쥐어쥐도록 구현해보자. ABItemBox의 OnCharacterOverlap 함수에서 캐릭터에게 Weapon을 설정해주는 코드를 책의 예제 코드를 따라 작성하였다. 기존에 있던 캐릭터의 BeginPlay 함수에서의 Weapon 설정은 삭제하였고, 컴파일후 테스트 해보았다.

    이제 상자에 이펙트를 추가해보자 예제에 있는 이펙트파일을 활용하여 책의 예제코드를 따라 작성하였다. 그리고 컴파일후 플레이 테스트를 통해 상자와 겹침시 이펙트와함께 상자가 사라짐을 확인할 수 있었다.

    이번엔 상자에서 다른 무기도 생성할 수 있도록 새로운 무기를 추가해보자 블루프린트를 사용해 ABWeapon을 상속받은 객체를 생성하여 적용해본다.

    이후 상자를 통과하면 새로 설정한 도끼가 획득 된다.

    요약

    • 캐릭터 소켓에 무기 부착
    • 무기 액터를 통한 무기 장착
    • 아이템 상자 습득과 이펙트 연결
    반응형

    댓글

    Designed by JB FACTORY