떨어지는 장애물 만들기
장애물에 중력을 부여하는 원리
- 장애물이 떨어지게 만드려면 “중력”을 가지도록 해야한다.
- 중력을 가지도록 하려면?
- 중력값을 가지도록 하는 Component인 RigidbodyComponent를 해당 장애물에 추가를 해준다. 또한, 장애물이 그저 중력만 갖고있다면 떨어지다가 Tile과 만나면 그대로 멈추고 아무 동작을 하지 않는다. 장애물이 바닥에 떨어지고 다시 위로 respawn 되어 떨어지게 만들어야 한다.
- 따라서 Trap이 떨어지는 Trap_Falling_Component를 만들어 장애물에 추가해주고 위의 내용을 작업해준다.
장애물 위치에 따라 해당 Entity y좌표 설정하기
- 해당 장애물이 특정 y좌표보다 아래로 떨어지게 될 경우 자신이 설정한 바닥의 y좌표보다 조금 높게 설정해준다. (해당 Entity를 다시 위로 옮겨주면 된다. )
- Position.y 가 지정한 y좌표보다 더 낮게 진행될 경우 MovementComponent:SetPosition을 통해 올려준다.
이 때 MovementComponent:SetPosition을 *사용하기 위해서는 장애물 엔티티에 *MovementComponent를 추가해 주어야한다.
구현
- 장애물이 매번 같은 라인에서 같은 주기로 떨어지게 된다면 굉장히 난이도가 쉬워진다.
⇒ math.random 함수를 이용해 x좌표를 좌우로 바꾼다.
⇒ 또 주기를 바꾸기 위해 wait(math.random())을 통해 period 또한 바꿔준다.
⇒ 그러면 다양한 타이밍에 다양한 장소로 스폰되어 다시 떨어지게 된다. - y좌표가 특정 좌표보다 크기가 줄어들 경우, self.Entity.MovementComponent:SetPosition(Vector2(,))를 통해 Entity를 옮겨주는 작업을 한다.
- 떨어지는 것을 방지하기 위해
- RigidbodyComponent의 Gravity를 잠시 0으로 바꾼 뒤
- wait()함수를 통해 랜덤한 시간을 대기하게 하고
- 다시 Gravity를 적절하게 맞추어 떨어지게끔 연출한다.
결과