LuaScript는 MSW에서 Component에 코드를 작성할때 사용하며,
MyDesk 우클릭 -> Create Component -> Create Scripts 메뉴를 통해 생성 가능
특정 오브젝트에서 Add Component를 통해 생성 가능
Component 외에도 Logic에서 LuaScript를 활용할 수 있다.
로직은 MyDesk 우클릭 -> Create Logic 을 통해 생성할 수 있고, 기본적으로 UIPopup, UIToast 로직이 들어있다.
로직과 컴포넌트의 차이는, 컴포넌트는 특정 오브젝트의 속성으로 들어가 사용되고, 로직은 전체 게임에서 바로 적용된다.
LuaScript를 입력할 때 크게 3가지 부분으로 나뉜다.
Property
, Function
, Entity Event Handler
Property
에서는 Component에서 사용할 변수를 생성해줄 수 있다.
Function
에서는 함수를 입력해 줄 수 있다.
기본적으로 제공하는 함수가 많이 있다.
대표적으로 OnBeginPlay()
는 시작할 때, 컴포넌트가 들어있는 엔티티가 생성될 때 한 번 실행되는 함수이다.
Component내에 선언된 변수를 함수에서 사용하려면 self.
을 앞에 붙여주어야 한다.
마찬가지로 함수를 실행할 때에도 self:
을 앞에 붙여 주어야 한다.
Entity Event Handler
는 버튼을 누르거나, 특정 키보드를 눌렀을 때 등의 사건, 즉 이벤트가 발생했을 때 어떤 처리를 해주겠다. 하는 것이다.
MSW는 서버-클라이언트 관계이다.
A와 B가 똥 피하기 게임을 같이 하려면, 똥은 서버에서 생성되어 A와 B에 뿌려주어야 한다.
모든 클라이언트에게 정보를 보여주고 싶다면 서버에서 처리하고 클라이언트로 동기화해 준다.
서버와 클라이언트 관련 정보는 여기 에서 확인해 볼 수 있다.
OnHit 함수는 Entity가 피격되었을 때 호출된다. 기본 동작으로 HitEvent를 발생시킨다.
attacker Entity와, 대미지, 크리티컬여부, 출력메시지, hitCount를 입력할 수 있습니다.
self.Entity:Destroy()
코드를 통해 똥에 맞았을 때 사라지게 만들 수 있다.
똥에 맞지 않아도 바닥에 닿아도 똥이 사라지게 하기 위해 FootholdEnterEvent
를 추가하여 땅에 닿아도 사라지게 코드를 추가해 준다.
실행을 해 보면 캐릭터에 똥이 닿지 않았는데 대미지를 입고 사라지거나,
똥을 피했는데 똥이 땅에 닿기 전에 사라지는 모습을 볼 수 있다.
클라이언트와 서버에서 실행속도에 딜레이가 걸려 발생하는 문제이다.
똥은 서버에서 생성해서 각 클라이언트에서 동시에 보이게 설정해주고,
똥이 닿는 기준은 클라이언트에서 대미지, 삭제 트리거를 걸어주고,
대미지를 입히고 삭제하는 처리는 서버에서 처리해서 뿌려주도록 하면 딜레이 문제를 해결할 수 있다.
코드에서 실행 공간 설정을 ClientOnly로 설정해 준다.
실행해 보았을 때 좀 더 자연스럽게 처리가되는 것을 확인해 볼 수 있다.
하지만 이 게임은 멀티플레이 게임이기 때문에 클라이언트에서만 실행이 된다면,
다른 유저가 봤을때는 확인할 수가 없다.
그렇기 때문에 대미지를 주는거나 삭제하는 처리는 서버에서 처리해 주어야 한다.
기존에 Entity Evnet Handler에 있던 코드를 서버에서 작동하는 함수로 넣어주고
핸들러가 발생하였을때 실행되도록 만들어 줍니다.
실행을 해보면 딜레이도 없고, 정상적으로 잘 구현이 된다.
참고 : 조코딩 유튜브