728x90
충돌 기능 구현하기
충돌 기능 구현하기
장애물에 맞으면 hp를 감소시키고 hp가 0이 되면 플레이어의 상태를 조정해보자!
- 새로운 Component인 Trap_Trigger_Component를 제작한다.
- 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