2022.09.07 ~ 2022.12.16 까지 약 3개월동안 진행한 "메이플스토리 월드 X 슈퍼해커톤 2022" 프로젝트에 대해서 회고를 작성하고자 한다.
유튜브 '조코딩' 채널에 올라온 메이플스토리 월드 강의를 수강하고 Lua Script와 메이플스토리 월드 엔진 (프로모드)에서
알아야할 기능들과 이론에 대해서 정리해보았다.
<루아 스크립트 기초>
1. Property
- 자료를 저장하는 변수
- 자료형을 클릭하면 다른 자료형으로 바꿀수 있다.
2. Function
- OnBeginPlay : 시작할때(이 컴포넌트가 붙어있는 객체가 생길때) 한번 실행되는 함수
- log("hello")로 테스트를 찍어볼 수 있음
- 함수들이 저장되는 곳
- +를 누르고 New를 누르면 새로운 함수를 만들 수 있습니다.
처럼 하면 프로퍼티에서 만든 변수에 접근하지 못한다.
프로퍼티에 있는 변수에 접근하기 위해서는 self.num으로 접근해야함
함수에 접근할때도 self:Sum() 처럼 self를 사용해 호출해야함
self는 '이 컴포넌트 안에서' 라는 의미이며, 변수와 달리 함수를 실행할땐 .(마침표) 가 아닌, : (콜론)을 이용
3. Entity Event Handler
이벤트 핸들러란 버튼 클릭 이벤트 Key Down 이벤트 등 이벤트 처리를 담당하는 부분
예시로 TriggerEnterEvent가 있는데, 이는 '충돌이 발생했을때 한번 실행되는 이벤트'이다.
4. 서버와 클라이언트의 이해
객체를 생성하는 코드를 서버에서 실행하고, 이 객체를 보여주는 코드를 Client A, B에 주게되면 동기화되어서 실시간 멀티플레이가 가능할 것
즉 객체를 생성하여도 server only 인지 client only인지 등을 지정해주지 않으면 서버, 멀티플레이 시 다른 유저에게 안보일 수도 있다는 것이다.
Function)
Ex) server only = 서버에서 실행된 것
Property)
모든 클라이언트에서 이 변수값을 똑같이 갖게하려면 [Sync]를 활성화해놓아야함 (동기화)
[None]이면 클라이언트 별로 서로다른 값을 가지게됨
이 속성에 대해 정리하자면
★Client : Server 또는 Client에서 호출할 수 있는 함수로 호출 시 Client에서 실행됩니다.
★ClientOnly : Client 전용 함수로 Client 공간에서만 호출 및 실행됩니다.
>> 실습에서 self:Sum()이 오류나게 됩니다.
★Server : Server 또는 Client에서 호출할 수 있는 함수로 호출 시 Server에서 실행됩니다.
★ServerOnly : Server 전용 함수로 Server 공간에서만 호출 및 실행됩니다.
★Multicast : Server에서만 호출할 수 있는 함수로 Server Client에서 모두 실행됩니다.
5. 캐릭터에 데미지 입히기
객체에 HitComponent를 추가
스크립트에 들어가보면
void OnHit()
= Entity가 피격되었을때 호출됩니다. 기본적으로 HitEvent 를 발생시킴
이것을 활용해보면
TriggerBodyEntity.Hitcomponent:OnHit()
// TriggerBodyEntity로 충돌을 받아서 HitComponent를 실행 (함수참조이므로 : 사용)
★OnHit(self.Entity)
인자를 5개 가지는데,
(Entity, Damage, Critical, Info, time) 을 의미한다.
객체 / 300 (데미지) / false (크리티컬) / "복어에 찔림" (공격 정보) / 1 (공격 횟수 - 한번 공격되도록 구현)
6. 캐릭터에 장애물이 부딪혔을때
self.Entity:Destroy()
>> 기본 제공함수이며, 특정 엔티티를 없애는 함수
7. 땅 오브젝트에 장애물이 부딪혔을때도 없어지도록 구현
땅 오브젝트에서 Foothole (발판) 관련 이벤트를 추가
>> FootholdEnterEvent
self.Entity:Destroy()를 여기에도 추가
땅이나 캐릭터에 닿기전에 미리 사라져있는 것을 볼 수 있는데, 서버와 클라이언트의 딜레이때문이므로
동기화를 해주어야한다.
>> 해결과정
1) Server에서 객체를 생성하고
2) Client 기준에서 닿았을때 데미지, 삭제를 트리거해주기
3) 이 트리거가 Server에 전달되어 Server에서 데미지와 삭제를 처리
4) TriggerEvent의 경우는 Client 단에서 진행 >> FunctionSetting을 ★Client Only로 바꿔주기
5) FootHold도 마찬가지로 Client Only로 변경
6) 다른유저가 봤을때는 장애물이 없어지지 않은 것처럼 보일 수 있으니
데미지와 장애물을 없애는 것은 Function +로 Server를 지정 후
void hitObject() 와 void deleteObject() 를 만들어 self.Entity:Destroy()를 넣어주기
8. 스크립트 부여한 객체를 여러개 생성해보기
- 장애물 객체가 복사되어 몇초마다 생기도록 해주어야 함
1) 이 모델을 복사할 수 있도록 등록하는 과정
2) 씬메이커상에서 객체를 누르고 ★Make Original Model을 누르게되면, 모델이 생성됨
3) 이것을 복사해서 넣어주면 같은 속성을 가지는 객체가 여러개 만들어질 수 있음
Function + 를 누르고 ★OnUpdate를 추가
>> 매 프레임마다 이 안 코드가 실행되는것
number delta
>> 한 프레임이 지나갈때 걸리는 초를 나타냅니다.
예를 들어 장애물을 0.5초마다 생성해주고자한다면 Property에 time 정수 변수를 만들고
OnUpdate에
self.time = self.time + delta
를 하게되면 self.time안에 delta가 계속 더해지므로, 지금까지 총 걸린 시간이 self.time에 쌓이게 된다.
if self.time > 0.5 then
/*
장애물 생성 코드
*/
self.time = 0
end
>> 0.5초마다 생성되는 코드
<이론 정리 요약>
이 외에도 기능 별 상세 설명이나 기본 제공 함수, 기본 제공 컴포넌트, UI에 익숙해지기 위한 강의들이
MSW 공식 강의와 개발자 공식 문서, 조코딩의 강의에 수록되어있었다.
일주일 동안 많은 배움이 있었다.
<조코딩님 Q & A>
Q. 수익화는 어떻게 이루어지나요?
>> BM들(비즈니스 모델)을 크리에이터가 원하면 다 넣을 수 있습니다.
무료로 아무것도 없이 하셔도 됩니다.
코디 아이템을 직접 그려서 코디아이템을 자기 월드에 넣고 팔수도 있구요
Q. 제작난이도는 어떤가요?
- 난이도는 프로모드
- 꾸미기 모드
Q. 루아 스크립트 어렵지 않을까요
- 1993년 개발된 프로그래밍 언어로, 배우기 쉽고, 가벼운 것이 제일 큰 특징
- 대표적 예 : 로블록스
Q. 개발 중 막히는 부분은 어디서 해결할까요?
- 많습니다. 운영하는게 여러가지 중 디스코드 채널, 개발자 위한 개발자 포럼, 행사할때는 중간중간 라이브 Zoom으로 질의응답을 했었습니다.
- 메이플 월드 자체에도 월드들의 리메이크 기능이있습니다.
- 제작자가 공개를 하면 다른 분들도 오픈소스처럼 볼 수 있는 자료가 됩니다.
Q. 출시는 어떻게 하나요?
- 출시버튼을 누르면 1초만에 전세계 어디든지 바로 공개될 정도로 빠르게 출시가 가능합니다.
AI가 문제되는 것들은 전부 필터링하고, 통과하고나면 자동으로 출시가됩니다.
Q. 개발실에서 다양한 기능을 준비하고 계신가요?
- 메이플스토리하면 딱 사이드뷰만 떠오르실텐데, 탑뷰, 쿼터뷰 3D기능이 들어간 월드등을 개발하고있습니다.
아바타는 2D긴하지만 3D공간 돌아다니는것을 R&D중인데 막상 체험해보면 자연스럽게 어울립니다.
- 메이플스토리2 리소스를 활용해서 하고있습니다.
Q. 예비 크리에이터분들꼐 한마디 부탁드립니다.
- 그동안 메이플스토리를 플레이하셨으면 만들었으면 하는 것들이 있으셨을텐데, 지원을 아끼지 않을테니 많은 아이디어 부탁드리겠습니다.
- 이 프로젝트는 계속 확대될 예정이므로 미리 선점해놓으시면 좋아요
'Recording > 메이플스토리 Worlds - SuperHackathon' 카테고리의 다른 글
[메이플스토리 Worlds] <5주차> 회고 (1) | 2023.04.13 |
---|---|
[메이플스토리 Worlds] <4주차> 회고 (0) | 2023.04.09 |
[메이플스토리 Worlds] <3주차> 회고 (0) | 2023.03.12 |
[메이플스토리 Worlds] <2주차> 회고 (0) | 2023.03.12 |
[메이플스토리 Worlds] <1주차> 회고 (0) | 2023.03.11 |