수건 돌리기와 비슷한 폭탄 돌리기 미니게임을 구현을 목표로 하고 있다.

다른 기능들은 맵 안의 엔티티 들이 상호 작용을 해야 하기 때문에 대기 맵(SideViewMove) -> 게임 맵(QuterViewMove)로 전환 시키는 것만이 독립적으로 돌아갈 것이라 생각하여 설계전 미리 구현해 보도록 하자

시험 맵 제작

대충 연습맵으로 moonPractice라는 맵을 만들고 심심하니 딱 배경화면 정도만 설정 해 준 모습

연습 기간(2주 전)에 짜본 코드

어느 맵으로 가든 모든 월드에서 활용이 가능하게 Logic을 만들어 설정해줬음

연습기간에 짠 코드는 OnUdate로 매 프레임 마다 if esle문을 판별하기에 아무래도 비효율적이라고 판단해 다른 것들이 있나 개발자 센터를 뒤져보기로 했다.

출처: https://maplestoryworlds-developers.nexon.com/ko/apiReference/Events/EntityMapChangedEvent

때마침 맵 변경시 발생하는 이벤트가 있었고 이걸 핸들러에 넣어주면 맵이 변해 이벤트를 발생 시킬때만 코드가 돌아가도록 할 수 있음

1차 코딩

전 코드하고 거의 비슷하면서 되게 쉬운 코드이다.

텔레포트를 위한 코드

테스트 코드도 완성했다.

텔레포트를 통해 해당 맵으로 강제 이동을 시키는 코드

이걸로 텔레포트를 하면 아마 맵 체인저 이벤트가 발동 되어서 쿼터뷰이동으로 바뀔 것이다

잘 되는 모습

다만 방금 만든 코드는 한 맵에서만 적용이 되고 다른맵은 적용이 안된다

if _UserService.LocalPlayer.CurrentMap.Name == "xx"~~~ then

     xx~~~~

elseif _UserService.LocalPlayer.CurrentMap.Name == "yy"~~~ then

     yy~~~~

elseif _UserService.LocalPlayer.CurrentMap.Name == "zz"~~~ then

     zz~~~~

이런식으로 코딩하는건 매번 맵이 늘어날때마다 코드도 길어지고 나중에 보기도 힘들어 질것이다.

수정본
데이터 셋

따라서 처음에는 데이터 베이스에 저장을 하고 비교하려 했으나 맵 자체가 계속해서 변동되는 값도 아니기에 간단한 DataSet(파일과 비슷) 사용 해주면서 마무리했다.

 

아쉬운건 Bool타입이 0,1로 표현도 불가능하고

데이터 셋은 특정 키 벨류 지정도 불가능해서 찾으려면 for문으로 전부 봐야하는데

뭐 심각하게 따지면 맞는 값이 있어도 끝까지 돌리기에

이게 맞나,,

뭐 이렇게 강제로 끊어 보는게 좋을지 안 좋을지는 의문이긴 하네,,

 

소요시간: 30분 ~ 50분 (만들어 보니 별거 아닌데 되게 오래 걸리네..) 

+ Recent posts