본문 바로가기

그 땐 IT활동했지/그 땐 멋쟁이사자처럼했지

[멋쟁이사자처럼 X 넥슨] MOD Suppoters Hackathon 4주차 7/27일 회고 | 실습: 따라하기만 하면 만들 수 있는 장애물 피하기 게임

728x90

충돌 기능 구현하기


충돌 기능 구현하기


장애물에 맞으면 hp를 감소시키고 hp가 0이 되면 플레이어의 상태를 조정해보자!
  1. 새로운 Component인 Trap_Trigger_Component를 제작한다.
  2. Component의 Trap 데미지를 조정할 수 있도록 Property에 damage를 넣어준다.

👉🏻Entity Event Handler에서 TriggerEvent를 추가한다.

 

TriggerEvent 발생 시 충돌 기능 구현하기


  • TriggerEvent 발생 시 대상이 Player인지 확인한다.
  • if문으로 TriggerBodyEntity의 ID가 Player의 ID와 맞는지 확인한다.
  • MyDesk → Create Scripts → Create Component에서 Take_Damage_Component를 생성한다.
    • Trigger Event가 발생할 시, player가 잠깐 장애물과 떨어진 후 키입력을 하면 동시에 Trigger Event가 감지되어 Hp가 2배로 차감되는 것을 방지한다.
  • DefaultPlayer의 Property에 Take_Damage_Component를 추가하고 boolean Take_Damage_Period = true로 설정한다.
    • plyer의 period가 참일 경우에만 Trap과 충돌하여 hp가 깎이도록 한다. 
  • PlayerComponent.Hp - self.damage를 거쳤을 때 해당 trap이 가지고 있는 데미지 값이 0보다 적으면 플레이어는 사망 상태가 된다.
  • 장애물에 부딪히면 Take_damage_Period = false로 설정해 두 번 trigger Event가 발생하지 않게 한다.
  • Player의 State를 TriggerBodyEntity.StateComponent: ChangeState("DEAD")로 만든다.
    • 이는 Player를 사망 상태로 만들 뿐 이동과 같은 동작은 정상적으로 작동하므로 이런 행동(InputSpeed, JumpForce 등)도 막아준다.

 

PlayerDead 함수 만들기


위의 과정은 Player를 사망 상태로만 만들 뿐 이동과 같은 동작은 정상적으로 작동하므로 이런 행동을 못하도록 막아주자!
  • MovementComponent에서 InputSpeed와 JumpForce를 0으로 바꾼다.
    • player가 움직일 수 없다.
  • wait(5)를 설정하고 Player의 State를 TriggerBodyEntity.StateComponent: ChangeState("IDLE")로 설정한다.
    • DEAD에서 IDLE 상태로 변경한다.
  • TriggerBodyEntity.MovementComponent:SetPosition(Vector2(3.4,-4))로 설정하고 HP를 MaxHP로 설정한다.
    • Player를 시작점으로 보낸다.
  • TriggerBodyEntity.Take_Damage_Component.Take_Damage_Period = true로 설정한다.
    • Player가 Trap에 닿으면 Hp가 깎이도록 다시 설정해준다.

👉🏻PlayerDead함수가 끝나면 PlayerAlive 함수를 실행해 Player를 게임 가능 상태로 활성화한다.

728x90