Home [Lilium] E03. 보스 패턴
Post
Cancel

[Lilium] E03. 보스 패턴

결과


내용

보스의 패턴을 구현했다.
플레이어가 감지 영역 내에 있다면

  1. 플레이어를 바라본다.
  2. hp가 50% 미만이라면 돌진공격을 한다
  3. 근접공격 사거리 내라면 근접공격을 한다
  4. 근접공격 사거리를 벗어났다면 원거리공격을 한다
    로 간단하게 작성해봤다.

Image

언리얼에서 제공하는 비헤이비어 트리는 여러곳에서 쓰인 코드들과의 연계가 필요하기 때문에
사전에 트리의 각 요소와 트리를 실행한 액터가 어떤 역할을 담당할지를 생각해보았는데
액터 BP_Boss : 실제 행동을 정의
서비스 BTService : 트리의 우선순위를 지정
태스크 BTTask : BP_Boss에게 행동을 지시
데코레이터 BTDecorator : 해당 Task를 실행하기 위한 조건
이렇게 나눠서 제작을 했다. AnimBlueprint가 BP_Boss에서 데이터를 받고 있고
서비스 또한 어떤 데코레이터를 트루로 해서 태스크에 걸리게 할지를 정하고 있으면서
애님블프와 서비스가 오너액터를 접근하는데 큰 어려움이 없기 때문에
태스크가 어떤 일을 직접 하기보다는 간접적으로 그일을 하는 함수를 호출하는게 맞겠다고 생각했다.

이렇게 하면 오류를 찾기가 한결 수월해진다. 누가 무슨 역할인지 알기 때문에 헤매지 않아도 된다
하지만 기능을 추가하려고 할 때 기능구현 전에 구조에 맞춰 더 생각하고 고민하게 되는 것 같다.
근데 OOP의 특성중 캡슐화를 좀 생각해본다면 이렇게 하는게 맞지 않을까? 라고 생각이 들긴 하는데
생각에 생각을 얹다보니 음.. 뭐가 정답인지는 잘 모르겠는데 일단 작동하니까..!
나중에 문제가 생긴다면 그때가서 다시 고민해보고 수업때 강사님께 언리얼과 캡슐화를 여쭤봐야겠다.

Image

보스의 원거리공격에서 날아오는 돌덩이를 절묘한 타이밍으로 부수면 드랍될 포션도 하나 만들었다.
우선 완성부터 하고 디테일을 추가하는 작업때 추가할 예정이다.

Image

다 열심히 만들었지만 플레이어 방향으로 회전하는 터닝을 만들때 정말 재밌었다.
처음에 외적만 사용해서 만들려고 했고 사인 0.1, 즉 약 6도가 안되는 범위 x 2 = 12도,
플레이어가 전방 12도에 없다면 회전하게끔 만들었는데 보스의 전방 12도이내도 0.1이지만
후방 12도도 마찬가지로 같은값이 나왔기 때문에 내적 1회, 외적 1회를 사용할 수 밖에 없었다.

강사님이 수업 초기에 칸 수학을 보면서 삼각함수와 내적/외적을 잘 공부해두라고 조언해주셨는데
솔직히 보면 원리를 잘 설명해주기 때문에 이해는 되는데 어디에 응용될지 쉽게 떠오르지가 않았다
근데 써보니까 확실히 이건 써야된다라는 느낌이 체감된다. 내적과 외적, 탄젠트는 신이야..!

Image

근접공격과 원거리공격을 1개씩 만들고 보니 너무 단조로웠다. 물론 더 추가할 생각은 있지만
좀 더 패턴을 복잡하게 만들 필요가 있다고 생각했고 그래서 돌진공격을 만들었다

처음에는 돌진을 하면 속도가 붙으니까 그 속도로 충돌 판별을 해야겠다고 생각했는데
속도가 가속력에 의해서 서서히 올라가기 때문에 항상 가속력이 붙기 전에 충돌했음이 감지되었고
뛰쳐나가는 애니메이션이 출력이 되지 않았다. 돌격 시작시 벨로시티값을 임의로 주려했는데 어려웠고
그래서 돌격시 사용할 충돌체를 생성하고 충돌체 감지 방식으로 변경했다.


문제

우선 돌격시 이미 충돌을 판단하는 충돌체 내부에 플레이어가 미리 들어가있으면 판단이 안된다.
차라리 돌격방향으로 라인트레이스를 쏘는게 나을거 같다.
패턴이 너무 쉬워서 게임난이도, 밸런스의 문제도 보이는데 이거는 디테일작업하면서 수정해야겠다.

그리고 프로젝트 외적으로
보스패턴 만드는데 3일정도가 걸렸는데 이걸 면접볼때 소개하는 방식으로 설명을 하니까
설명하는데 채 30초도 걸리지 않았다. 만약 딱 필요한 말만 한다고 치면 두세마디면 소개가 끝나는데
내가 어떤 노력을 했는지 대화하면서 자연스럽게 어필할 방법을 생각해둬야할 것 같다.

This post is licensed under CC BY 4.0 by the author.

[Lilium] E02. 콤보어택

[Lilium] E04. 인벤토리 컴포넌트