MSW 똥 피하기 월드 만들기 (3)

bi_sz·2022년 9월 30일
0

MSW

목록 보기
11/11

똥이 하나만 있다면 재미가 없기 때문에 똥 오브젝트를 복사해서 여러개를 만들어 준다.

새로 오브젝트를 추가해 준다면 추가한 Component등의 옵션이 적용되지 않기 때문에 기존에 생성해서 속성을 추가해준 똥 오브젝트를 복사해 주어야 한다.

Hieararchy에 있는 똥 오브젝트를 우클릭하여 Create Model From Entity를 눌러서

똥 오브젝트의 모델을 만들어 준 후 이 모델이 계속적으로 맵에 생성되는 코드를 작성해야 한다.

Component의 경우 엔티티에 붙여서 사용했는데,
Logic은 엔티티에 붙이지 않아도 이 자체로 실행이 된다.

어디에 속하지 않고 월드 전체에 사용할 때 Logic을 사용한다.

똥이 생성되는 코드를 DongGenerate라는 Logic에 작성해준다.

OnUpdate를 함수를 사용하여 매 프레임마다 안에있는 코드가 실행되게 해준다.

OnUpdate함수 괄호에 있는 delta는 걸린 시간을 초 단위로 파라미터로 들어온다.

0.6초마다 똥이 생성되는 함수를 만들기 위해

time이라는 변수를 생성해주고 OnUpdate함수에서 조건문을 통해 0.5초마다 실행이 되는 코드를 작성해준다.

log 대신, _SpawnService:SpawnByModelId를 통해 생성될 엔티티의 ID를 복사해 주었고, 스트링 네임과 벡터, 스폰위치, 부모 엔티티 등을 설정해 주었다.

실행해 보니 설정한 위치에서 반복적으로 똥이 생성되는 모습을 볼 수 있다.

랜덤한 위치에서 생성되도록 만들어 준다.

Scene에서 똥을 움직여서 바닥 맵의 X 좌표를 확인해 보니 가장 왼쪽은 -5 정도, 오른쪽 끝은 5 였다.

함수에 local randomNum = math.random(-5,5) 코드를 추가하여, -5에서 5 사이의 랜덤한 숫자를 생성해주는 randomNum을 선언하여 똥을 스폰해주는 코드의 x 좌표 부분에 넣고 실행해 보니 랜덤한 위치에서 똥이 생성되는 것을 확인할 수 있었다.

DongGenerate 로직을 통해 똥 오브젝트가 자동으로 생성이 되니 기존에 만들어 놓은 Dong 엔티티와, Model_Dong 엔티티는 삭제해준다.


점수 구현하기

똥이 땅에 닿을 때마다 점수가 올라가도록 구현을 해준다.

추가로 고려해야할 사항은 이것은 멀티 플레이 게임이기 떄문에 다른 플레이어도 고려해야 한다.

우측 상단의 가상의 플레이어 추가 버튼을 통해 여러 클라이언트로 테스트가 가능하다.

플레이어마다 각각 점수를 기록할 수 있도록 WorkspaceDefaultPlayer에 컴포넌트를 추가해 주면 유저가 접속할때마다 각각의 플레이어에 Component가 적용된다.

DefaultPlayer에 새로운 Component ScoreComponent를 추가해준다.

점수를 저장할 score 변수와, 최고 기록을 저장할 bestScore 변수를 생성해주고,

Entity Event Handler에 캐릭터가 죽었을 때 현재 점수와 최고기록의 점수를 비교하여 현재 기록이 최고기록보다 높을 때 최고 기록을 현재 점수로 갱신해주는 함수를 넣어준다.


LuaScript는 모든 자료형이 table 이다.

LuaScript for문의 기본 구조는
for 반복을 돌 변수 in 여러개 있는 변수 do 반복할 스크립트 end 를 작성해 주면된다.

접속해있는 모든 유저를 가져와서 반복문을 돌면서 그 유저의 ScoreComponent의 score 를 가져와서 이 score를 1 올려주는 코드이다.

해당 코드가 HandleFootholdEnterEvent 안에 있으므로 발판에 똥이 닿을때 마다 해당 유저의 점수가 오르게 된다.

실행을 해 보면 똥을 피할 때 마다 유저의 스코어를 확인해 보면 점수와 최고점수가 반영되는 것을 확인할 수 있다.


StateComponent.CurrentStateName을 통해 죽었을때는 점수가 오르지 않도록 조건문을 넣어준다.


랭킹 UI를 추가해 점수가 보이도록 설정해 준다.

UILeaderboard의 코드에서

랭킹과 점수에 해당하는 부분을 변경해 주었다.

math.cell코드는 루아스크립트에서 소수점이 있다면 반올림해서 반영하는 코드이다.

현재 점수와 최고점수가 UI에 잘 반영이된 모습이다.

멀티플레이에서도 잘 구현이 되는 모습이다.

직관적인 표시를 위해 SCORE를 BEST SCORE로 변경해주는 모습이다.

게임에 접속하자마자 게임이 시작이되면 정신없기 때문에 다음 게시물에서는 포탈을 타고 들어왔을때 실행되도록 만들어보겠습니다.

참고 : 조코딩 유튜브

0개의 댓글