← 목록

mLua · Nemotron SDG 질문-응답 (SFT)

총 21,567개 · 페이지 396/719
🔀 랜덤
불러오는 중…

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 프로퍼티 동기화 [question] | any와 table 타입의 프로퍼티가 동기화되지 않는 이유를 3문장 이내로 설명하세요. [answer] | `any`와 `table` 타입은 내부 구조가 동적으로 변할 수 있어 네트워크를 통한 일관된 동기화가 불가능하기 때문입니다. 따라서 메이플스토리 월드에서는 이 두 타입의 프로퍼티에 동기화 설정을 적용할 수 없도록 제한하고 있습니다. 결국 이 값들은 클라이언트와 서버 각각의 공간에서 독립적으로 관리되며 공유되지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 동기화 설정 방법은 매우 간단합니다. 스크립트 에디터를 한 번이라도 열어서 프로퍼티를 추가해봤다면 프로퍼티 상단에 Sync라고 쓰여 있는 것을 본 적이 있을 것입니다. 이 Sync는 프로퍼티 동기화가 되고 있다는 것을 의미합니다. 만일 프로퍼티 동기화를 원치 않는다면 Sync를 눌러 None으로 변경해 줍니다. 동기화 표시가 None으로 되어 있으면 프로퍼티 동기화는 이루어지지 않는다는 것을 의미하며, 프로퍼티 값을 공간별로 따로 관리할 수 있게 됩니다. #### 타입별 동기화 가능 여부 일부 타입의 프로퍼티는 동기화 설정이

[task] | single_turn [pass] | ⏳ 미판정 [title] | 공격과 피격 [question] | DefaultPlayer에 CharacterAttack 컴포넌트를 추가했는데 몬스터를 공격해도 대미지가 0으로 나오거나 반응이 없다면, 가장 흔한 원인 3가지와 해결 방법을 알려주세요. [answer] | 제공된 문서에 기반하여, `DefaultPlayer`에 `CharacterAttack` 컴포넌트를 추가했는데도 몬스터 공격 시 대미지가 0이거나 반응이 없는 경우의 흔한 원인 3가지와 해결 방법을 설명합니다. ### 1. `CalcDamage` 함수가 정의되지 않음 `AttackComponent`를 확장하여 `CharacterAttack`을 만들 때, 공격 동작(`Attack` 호출)만 구현하고 **대미지 계산 함수**를 구현하지 않았을 수 있습니다. 문서에 따르면 `AttackComponent`의 `CalcDamage()` 함수 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AttackComponent**를 선택합니다. 2. 콘텍스트 메뉴에서 **Extend**를 눌러 컴포넌트를 확장합니다. 확장한 컴포넌트의 이름을 **CharacterAttack**으로 변경합니다. 3. **CharacterAttack** 컴포넌트를 더블 클릭하여 스크립트 에디터를 엽니다. 4. **Method**에서 새로운 함수를 추가하고, 이름을 **NormalAttack** 으로 변경합니다. 5. `Att

[task] | single_turn [pass] | ⏳ 미판정 [title] | 서버와 클라이언트 [question] | 클라이언트에서 유저 입력을 받아 서버에게 액션 수행을 요청하는 과정이 어떻게 이루어지나요? [answer] | 클라이언트에서 유저 입력을 받아 서버에게 액션 수행을 요청하는 과정은 **실행제어**를 통해 이루어집니다. 구체적인 과정은 다음과 같습니다. 1. **클라이언트에서 입력 수신:** 클라이언트가 유저의 조작(예: 몬스터 공격 버튼 클릭)을 감지합니다. 2. **액션 요청:** 클라이언트는 서버에게 해당 동작(예: "몬스터 공격")을 수행해 달라는 요청을 보냅니다. 3. **서버에서 액션 수행:** 서버는 클라이언트의 요청을 받아 정의된 "액션"(스크립트상 함수)을 실행합니다. 이 과정에서 핵심은 스크립트 내 함수의 **실행 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버와 클라이언트 간 통신에는 데이터의 전달, 즉 동기화 외에도 공간에 정의된 "액션"을 요청하고 수행하는 과정도 필요합니다. 위의 레벨업 처리 과정을 예시로 들면, 클라이언트가 유저의 입력을 받으면, 서버에게 "몬스터 공격"이라는 "액션"을 요청하게 되고, 서버는 클라이언트의 요청에 따라 "몬스터 공격"이라는 "액션"을 수행하게 되는데요, 이렇듯 각 공간에 정의된 액션을 서로 요청하여 수행케 하는 것을 실행제어라고 합니다. 실행제어는 제작자의 의도에 따라 설정할 수 있습니다. 위에 말한 "액션"은 결국 스크립트에서는 "함수"라 할

[task] | single_turn [pass] | ⏳ 미판정 [title] | 서버와 클라이언트 [question] | 서버와 클라이언트에서 같은 이름의 함수가 선언되어 있을 때, 클라이언트에서 해당 함수를 호출하면 서버의 함수도 함께 실행되나요? [answer] | 아니요, 서버의 함수는 함께 실행되지 않습니다. 메이플스토리 월드에서 스크립트 컴포넌트는 별도의 설정이 없는 한 서버와 클라이언트 두 개의 독립적인 공간에 각각 생성됩니다. 따라서 같은 이름의 함수라도 서버에 있는 함수와 클라이언트에 있는 함수는 서로 다른 개체로 취급됩니다. 기본적으로 함수 호출은 호출이 발생한 공간 내에서만 이루어집니다. 클라이언트의 함수 A가 함수 B를 호출하면, 클라이언트에 존재하는 함수 B만 실행되고 서버에 있는 함수 B는 실행되지 않습니다. 반대로 서버에서 함수를 호출하면 서버의 함수만 실행됩니다. 즉 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버와 클라이언트가 어떻게 상호작용을 하는지를 알아보았으니, 이제 메이커에서 작성한 프로그램이 서버와 클라이언트에서 어떻게 돌아가는지 알아보도록 합니다. 제작자가 스크립트에서 선언한 프로퍼티와 함수는 별도의 설정을 하지 않는 한 기본적으로 서버와 클라이언트 두 개의 공간에 각각 독립적으로 생성됩니다. 이름은 같지만 서로 다른 공간에 존재하기 때문에 별도의 프로퍼티 또는 함수라 보는 것이 좋습니다. 기본적으로 함수의 호출과 프로퍼티의 값 참조 및 할당은 같은 공간 내에서만 이루어집니다. 예를 들어 A라는 프로퍼티에 값을 B라는 함

[task] | single_turn [pass] | ⏳ 미판정 [title] | 서버와 클라이언트 [question] | 스크립트 함수의 실행 공간을 클라이언트로 설정하면 어떤 효과와 제약이 있나요? [answer] | 참고 문서에 따르면, 스크립트 함수의 실행 공간을 클라이언트로 설정하면 다음과 같은 효과와 제약이 있습니다. **효과** 1. **클라이언트에서 실행**: 해당 함수는 서버가 아닌 클라이언트 환경에서 실행됩니다. 2. **서버로부터의 호출 가능**: 서버에 선언된 함수의 실행 공간을 클라이언트로 설정하면, 서버 내 다른 함수에서 이 함수를 호출할 수 있습니다. 즉, 서버에서 클라이언트로 수행을 요청하는 형태(서버에서 호출 가능한 클라이언트 함수)로 사용이 가능합니다. **제약** 1. **실행 공간 분리**: 실행 공간이 클라이 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버와 클라이언트 간 통신에는 데이터의 전달, 즉 동기화 외에도 공간에 정의된 "액션"을 요청하고 수행하는 과정도 필요합니다. 위의 레벨업 처리 과정을 예시로 들면, 클라이언트가 유저의 입력을 받으면, 서버에게 "몬스터 공격"이라는 "액션"을 요청하게 되고, 서버는 클라이언트의 요청에 따라 "몬스터 공격"이라는 "액션"을 수행하게 되는데요, 이렇듯 각 공간에 정의된 액션을 서로 요청하여 수행케 하는 것을 실행제어라고 합니다. 실행제어는 제작자의 의도에 따라 설정할 수 있습니다. 위에 말한 "액션"은 결국 스크립트에서는 "함수"라 할

[task] | instruction_following [pass] | ⏳ 미판정 [title] | InputService를 활용한 입력과 액션 [question] | KeyDownEvent 핸들러의 실행 공간 제약 조건을 1문장으로 설명하세요. [answer] | KeyDownEvent 핸들러는 유저의 입력 이벤트가 클라이언트에서만 발생하기 때문에 반드시 클라이언트에서만 실행됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 모든 게임은 유저의 입력과 입력에 대한 피드백으로 게임이 진행됩니다. 메이플스토리 월드에서는 InputService를 통해 유저의 입력에 대한 액션을 제어할 수 있습니다. 이번 과정에서는 유저의 입력이 발생했을 때의 액션을 추가하는 방법을 알아보겠습니다. # 참고 가이드 [Event System](https://mod-developers.nexon.com/docs?postId=73) [Entity Event System](https://mod-developers.nexon.com/docs?postId=176

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 프로퍼티 동기화 [question] | 문서에 제시된 모든 프로퍼티 타입과 그 동기화 가능 여부를 표로 정리하세요. [answer] | 제공된 문서에 명시된 프로퍼티 타입별 동기화 가능 여부는 다음과 같습니다. | 타입 | 동기화 가능 여부 | | :--- | :---: | | any | X | | string | O | | integer | O | | number | O | | boolean | O | | table | X | | SyncTable< v > | O | | SyncTable< k,v > | O | | Vector2 | O | | Vector3 | O | | Vector4 | O | | Color | O | | Entity | O | | Compon [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 동기화 설정 방법은 매우 간단합니다. 스크립트 에디터를 한 번이라도 열어서 프로퍼티를 추가해봤다면 프로퍼티 상단에 Sync라고 쓰여 있는 것을 본 적이 있을 것입니다. 이 Sync는 프로퍼티 동기화가 되고 있다는 것을 의미합니다. 만일 프로퍼티 동기화를 원치 않는다면 Sync를 눌러 None으로 변경해 줍니다. 동기화 표시가 None으로 되어 있으면 프로퍼티 동기화는 이루어지지 않는다는 것을 의미하며, 프로퍼티 값을 공간별로 따로 관리할 수 있게 됩니다. #### 타입별 동기화 가능 여부 일부 타입의 프로퍼티는 동기화 설정이

[task] | single_turn [pass] | ⏳ 미판정 [title] | 서버와 클라이언트 [question] | 클라이언트에서 서버로 프로퍼티 값을 동기화하는 방식이 제한적인데, 그 기술적인 이유가 무엇인지 궁금해요. [answer] | 클라이언트에서 서버로 프로퍼티 값을 동기화하는 방식이 제한적인 주된 이유는 서버와 클라이언트 간의 연결 구조가 **1 대 다(1-to-Many)** 관계이기 때문입니다. 서버는 여러 클라이언트(플레이어)와 동시에 연결되어 있는데, 프로퍼티 값의 출처가 여러 클라이언트에서 동시에 발생할 수 있기 때문입니다. 예를 들어, 특정 엔티티의 프로퍼티 C가 있다고 가정해 봅시다. 클라이언트 A에서는 이 값이 1이라고 판단하고, 클라이언트 B에서는 2라고 판단하여 각각 서버에 값을 전달하려고 할 수 있습니다. 이 경우 서버는 둘 중 어느 클라 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버와 클라이언트가 어떻게 상호작용을 하는지를 알아보았으니, 이제 메이커에서 작성한 프로그램이 서버와 클라이언트에서 어떻게 돌아가는지 알아보도록 합니다. 제작자가 스크립트에서 선언한 프로퍼티와 함수는 별도의 설정을 하지 않는 한 기본적으로 서버와 클라이언트 두 개의 공간에 각각 독립적으로 생성됩니다. 이름은 같지만 서로 다른 공간에 존재하기 때문에 별도의 프로퍼티 또는 함수라 보는 것이 좋습니다. 기본적으로 함수의 호출과 프로퍼티의 값 참조 및 할당은 같은 공간 내에서만 이루어집니다. 예를 들어 A라는 프로퍼티에 값을 B라는 함

[task] | instruction_following [pass] | ⏳ 미판정 [title] | InputService를 활용한 입력과 액션 [question] | 유저 입력 이벤트가 클라이언트에서만 발생하는 이유와 이에 따른 핸들러 실행 특징을 2문장 이내로 정리하세요. [answer] | 유저의 물리적 입력은 클라이언트 기기에서 직접 감지되므로, 해당 입력 이벤트는 클라이언트에서만 발생합니다. 따라서 입력 이벤트를 처리하는 이벤트 핸들러 역시 클라이언트 공간에서만 실행됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 모든 게임은 유저의 입력과 입력에 대한 피드백으로 게임이 진행됩니다. 메이플스토리 월드에서는 InputService를 통해 유저의 입력에 대한 액션을 제어할 수 있습니다. 이번 과정에서는 유저의 입력이 발생했을 때의 액션을 추가하는 방법을 알아보겠습니다. # 참고 가이드 [Event System](https://mod-developers.nexon.com/docs?postId=73) [Entity Event System](https://mod-developers.nexon.com/docs?postId=176

[task] | single_turn [pass] | ⏳ 미판정 [title] | 서버와 클라이언트 [question] | 서버에서 선언된 함수를 클라이언트에서 실행되도록 설정하는 경우, 서버 내 다른 함수에서 어떻게 호출할 수 있나요? [answer] | 서버에서 선언된 함수의 실행 공간을 클라이언트로 설정하면, 해당 함수는 서버 내 다른 함수에서 **보통의 함수 호출과 동일한 방식**으로 호출할 수 있습니다. 문서에서 언급된 예시처럼, 서버에 선언된 함수 B의 실행 공간을 클라이언트로 설정했을 때, 서버 내 다른 함수에서 함수 B를 호출하면 클라이언트로 수행 요청이 전달되어 클라이언트에서 실행됩니다. 즉, 서버 코드에서는 `self:함수명()` 형태로 호출하면 됩니다. 아래는 이 개념을 반영한 mLua 스크립트 예제입니다. ```lua Property: [None] numbe [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버와 클라이언트 간 통신에는 데이터의 전달, 즉 동기화 외에도 공간에 정의된 "액션"을 요청하고 수행하는 과정도 필요합니다. 위의 레벨업 처리 과정을 예시로 들면, 클라이언트가 유저의 입력을 받으면, 서버에게 "몬스터 공격"이라는 "액션"을 요청하게 되고, 서버는 클라이언트의 요청에 따라 "몬스터 공격"이라는 "액션"을 수행하게 되는데요, 이렇듯 각 공간에 정의된 액션을 서로 요청하여 수행케 하는 것을 실행제어라고 합니다. 실행제어는 제작자의 의도에 따라 설정할 수 있습니다. 위에 말한 "액션"은 결국 스크립트에서는 "함수"라 할

[task] | single_turn [pass] | ⏳ 미판정 [title] | 서버와 클라이언트 [question] | 서버에서 프로퍼티 값을 변경했는데 클라이언트 화면에서는 그대로인 경우가 있는데, 이것이 왜 발생하는지 알려줘. [answer] | 서버에서 프로퍼티 값을 변경했는데 클라이언트 화면에 반영되지 않는 가장 큰 이유는 해당 프로퍼티가 **동기화(Sync) 설정이 되어 있지 않기 때문**입니다. 메이플스토리 월드의 스크립트 컴포넌트에서 선언한 프로퍼티와 함수는 기본적으로 서버와 클라이언트 두 개의 독립적인 공간에 각각 생성됩니다. 즉, 서버의 함수가 서버의 프로퍼티 값을 변경하더라도, 별도의 설정이 없으면 클라이언트의 프로퍼티 값은 그대로 유지됩니다. 서버와 클라이언트 간에 값이 자동으로 공유되려면 프로퍼티 선언 시 `[Sync]` 속성을 지정해야 합니다. `[S [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버와 클라이언트가 어떻게 상호작용을 하는지를 알아보았으니, 이제 메이커에서 작성한 프로그램이 서버와 클라이언트에서 어떻게 돌아가는지 알아보도록 합니다. 제작자가 스크립트에서 선언한 프로퍼티와 함수는 별도의 설정을 하지 않는 한 기본적으로 서버와 클라이언트 두 개의 공간에 각각 독립적으로 생성됩니다. 이름은 같지만 서로 다른 공간에 존재하기 때문에 별도의 프로퍼티 또는 함수라 보는 것이 좋습니다. 기본적으로 함수의 호출과 프로퍼티의 값 참조 및 할당은 같은 공간 내에서만 이루어집니다. 예를 들어 A라는 프로퍼티에 값을 B라는 함

[task] | instruction_following [pass] | ⏳ 미판정 [title] | InputService를 활용한 입력과 액션 [question] | InputService 이벤트 핸들러를 스크립트 컴포넌트에 추가하는 절차를 3단계 번호 목록으로 나열하세요. [answer] | InputService 이벤트 핸들러를 스크립트 컴포넌트에 추가하는 절차는 다음과 같습니다. 1. 스크립트 컴포넌트를 생성한 뒤 임의의 엔티티에 추가합니다. 2. **Event Handler**에서 [+] 버튼을 눌러 이벤트 탐색 창을 열고, 핸들러에 추가할 이벤트를 찾아 선택합니다. 3. 핸들러가 추가되면 이벤트 센더가 **InputService**로 선택되어 있는지 확인합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 모든 게임은 유저의 입력과 입력에 대한 피드백으로 게임이 진행됩니다. 메이플스토리 월드에서는 InputService를 통해 유저의 입력에 대한 액션을 제어할 수 있습니다. 이번 과정에서는 유저의 입력이 발생했을 때의 액션을 추가하는 방법을 알아보겠습니다. # 참고 가이드 [Event System](https://mod-developers.nexon.com/docs?postId=73) [Entity Event System](https://mod-developers.nexon.com/docs?postId=176

[task] | code [pass] | ⏳ 미판정 [title] | 프로퍼티 [question] | 같은 컴포넌트 내에서 `OnBeginPlay` 이벤트 핸들러를 사용하여 `Property` 블록에 선언된 `[None]` 타입의 `string` 프로퍼티 값을 로컬 변수에 대입하고 `log` 함수로 출력하는 스크립트를 작성해줘. [answer] | 같은 컴포넌트 내에서 `OnBeginPlay` 생명주기 메서드를 통해 `Property` 블록에 선언된 `[None]` 타입의 `string` 프로퍼티 값을 로컬 변수에 대입하고 `log` 함수로 출력하는 스크립트는 다음과 같습니다. ```lua Property: [None] string StringProperty = "Hello!!" Method: [Server Only] void OnBeginPlay() { local localString = self.StringProperty log(localString) } [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 함수에서 프로퍼티에 접근하는 방법을 알아봅시다. 먼저 같은 컴포넌트에서는 다음과 같이 접근할 수 있습니다. ```lua Property: [None] string StringProperty = "Hello!!" Method: [Server Only] void OnBeginPlay() { local stringProperty = self.StringProperty --"self.프로퍼티명"으로 해당 프로퍼티를 가져옴 } ``` 다른 컴포넌트의 프로퍼티는 다음과 같이 접근할 수 있습니다. 아래 상황에서 접근하는 방법

[task] | code [pass] | ⏳ 미판정 [title] | 프로퍼티 [question] | `_EntityService`의 `GetEntityByPath` 메서드를 이용해 "/maps/map01/A" 경로에 있는 엔티티를 가져오고, 해당 엔티티의 `ComponentA` 컴포넌트 참조를 통해 `PropertyA` 프로퍼티의 값을 읽어와 자기 자신의 `ComponentB` 컴포넌트의 `PropertyB` 프로퍼티에 대입하는 스크립트를 작성해줘. [answer] | 요청하신 동작을 수행하는 mLua 스크립트입니다. ```lua Property: [None] string PropertyB = "" Method: [Server Only] void OnBeginPlay() { local entityA = _EntityService:GetEntityByPath("/maps/map01/A") local componentA = entityA.ComponentA self.PropertyB = componentA.PropertyA log(self.PropertyB) } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 함수에서 프로퍼티에 접근하는 방법을 알아봅시다. 먼저 같은 컴포넌트에서는 다음과 같이 접근할 수 있습니다. ```lua Property: [None] string StringProperty = "Hello!!" Method: [Server Only] void OnBeginPlay() { local stringProperty = self.StringProperty --"self.프로퍼티명"으로 해당 프로퍼티를 가져옴 } ``` 다른 컴포넌트의 프로퍼티는 다음과 같이 접근할 수 있습니다. 아래 상황에서 접근하는 방법

[task] | two_turn [pass] | ⏳ 미판정 [title] | 프로퍼티 동기화 [question] | 프로퍼티 동기화(Sync) 설정이 무엇이며, 어떤 타입의 프로퍼티만 동기화가 가능한지 알려주세요. [answer] | 프로퍼티 동기화(Sync)는 스크립트에서 선언한 프로퍼티의 값을 서버와 클라이언트(또는 여러 공간)간에 자동으로 동기화하는 기능입니다. 스크립트 에디터에서 프로퍼티를 추가하면 기본적으로 `Sync` 설정이 적용되어 동기화가 이루어진다는 것을 의미합니다. 동기화를 원하지 않는다면 프로퍼티 상단의 `Sync`를 눌러 `None`으로 변경할 수 있습니다. `None`으로 설정하면 해당 프로퍼티의 동기화가 이루어지지 않으며, 각 공간(서버/클라이언트 등)별로 프로퍼티 값을 독립적으로 따로 관리하게 됩니다. 모든 타입의 프로퍼티가 동기화 [followup] | SyncTable 타입을 사용하여 테이블 데이터를 동기화할 때, 일반 table 타입과 무엇이 다른지 구체적인 코드 예시를 요청합니다. [followup_answer] | 일반 `table` 타입은 동기화가 불가능(`X`)하여 서버와 클라이언트 간에 값이 자동으로 전달되지 않고, 각 공간별로 독립적으로 관리됩니다. 반면 `SyncTable` 타입은 동기화가 가능(`O`)하여 서버에서 값을 변경하면 클라이언트에도 자동으로 동기화됩니다. 참고 문서에 포함된 예제 코드에서 두 타입의 사용 방식을 비교할 수 있습니다. **1. 일반 `table` 사용 예시 (동기화 안 됨)** `DropItemList` 프로퍼티는 `[None]`으로 설정되어 있으며, 타입이 `table`입니다. 이 값은 서버에서만 관리 [scores] | [judge_reason] | [source_doc] | 동기화 설정 방법은 매우 간단합니다. 스크립트 에디터를 한 번이라도 열어서 프로퍼티를 추가해봤다면 프로퍼티 상단에 Sync라고 쓰여 있는 것을 본 적이 있을 것입니다. 이 Sync는 프로퍼티 동기화가 되고 있다는 것을 의미합니다. 만일 프로퍼티 동기화를 원치 않는다면 Sync를 눌러 None으로 변경해 줍니다. 동기화 표시가 None으로 되어 있으면 프로퍼티 동기화는 이루어지지 않는다는 것을 의미하며, 프로퍼티 값을 공간별로 따로 관리할 수 있게 됩니다. #### 타입별 동기화 가능 여부 일부 타입의 프로퍼티는 동기화 설정이

[task] | code [pass] | ⏳ 미판정 [title] | 공격과 피격 [question] | HitComponent의 OnHit 이벤트 핸들러에서 attacker와 damage 인자를 받아 __base:OnHit을 호출하되 damage 값만 20으로 고정하여 기본 대미지 스킨 재생을 유지하면서 최종 피격량을 20으로 처리하는 스크립트를 작성해줘 [answer] | HitComponent를 확장하여 `OnHit` 메서드를 오버라이드하고, 기본 처리(`__base:OnHit`)에서 damage 인자를 20으로 고정하여 호출하는 스크립트는 다음과 같습니다. ```lua Method: [server only] void OnHit(Entity attacker, number damage, boolean isCritical, string attackInfo, number hitCount) { __base:OnHit(attacker, 20, isCritical, attackInfo, hitCoun [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AttackComponent**를 가진 엔티티가 **HitComponent**를 가진 엔티티를 공격하면, 별다른 추가 처리를 하지 않아도 엔티티는 피격 당하게 됩니다. 이 경우 추가 처리가 없기 때문에 기본값인 1로 대미지 스킨이 재생됩니다. 피격을 구현할 때는 공격량 그대로 대미지로 받을 수도 있지만, 공격과 다른 공식을 함께 사용해 피격량을 계산할 수도 있습니다. 예를 들어 100의 공격력으로 공격했지만 몬스터의 방어력이 높은 경우 절반의 공격만 유효하게 처리할 수 있습니다. 이번에는 아래 두 가지를 구현해 피격 당하는지를

[task] | code [pass] | ⏳ 미판정 [title] | 공격과 피격 [question] | **AttackComponent**의 `CalcDamage()` 함수를 오버라이드하여 고정된 기본 대미지 100을 반환하고, **HitComponent**의 `OnHit()`에서 전달받은 대미지 값에 피격자의 회피율(0.2)을 적용한 최종 대미지를 계산하여 리턴하는 스크립트를 작성해줘. [answer] | `AttackComponent`의 `CalcDamage()` 함수를 오버라이드하여 고정된 대미지 100을 반환하고, `HitComponent`의 `OnHit()` 함수에서 전달받은 대미지에 회피율(0.2)을 적용해 최종 대미지를 계산하는 스크립트는 다음과 같습니다. 참고로 `OnHit()` 함수는 `HitComponent`에 존재하는 함수이며, `CalcDamage()`에서 반환된 값을 매개변수로 전달받아 추가 계산을 수행한 후 최종 대미지를 리턴값으로 반환하도록 동작합니다. ```lua Method: [server only] [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 크리에이터의 공격 제작 방식에 따라 `IsAttackTarget()` 함수를 활용해 피격 대상을 선정할 수 있습니다. `IsAttackTarget()` 함수는 공격자가 공격 박스에 포함되지 않도록 처리되어 있으므로, 공격자가 타격을 받지 않게 처리할 필요가 없습니다. **Entity** 타입의 `defender` 매개변수는 충돌한 엔티티가 공격 대상인지 판단할 수 있는 엔티티 정보를 받습니다. 함수의 리턴값이 **false**면 **AttackComponent**에서 적합한 공격 대상으로 판별하고 이후 판단을 **HitCompone

[task] | single_turn [pass] | ⏳ 미판정 [title] | 서버와 클라이언트 [question] | 실행제어 설정을 통해 서버와 클라이언트 간 함수 호출 방향을 어떻게 제어할 수 있나요? [answer] | 실행제어는 메이플스토리 월드에서 서버와 클라이언트 간에 정의된 "액션"(스크립트 함수)의 요청과 수행 방향을 제어하는 메커니즘입니다. 스크립트 함수의 실행 공간(Execution Space) 설정을 통해 이 방향을 지정할 수 있으며, 주요 특징은 다음과 같습니다. 1. **함수 호출 방향 제어**: * 특정 함수의 실행 공간을 **클라이언트**로 설정하면, 해당 함수는 서버 내 다른 함수에서 호출할 수 있지만 실제 실행은 클라이언트에서 이루어집니다. 이를 통해 서버가 클라이언트 측 함수를 호출하도록 요청할 수 있습니다 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버와 클라이언트 간 통신에는 데이터의 전달, 즉 동기화 외에도 공간에 정의된 "액션"을 요청하고 수행하는 과정도 필요합니다. 위의 레벨업 처리 과정을 예시로 들면, 클라이언트가 유저의 입력을 받으면, 서버에게 "몬스터 공격"이라는 "액션"을 요청하게 되고, 서버는 클라이언트의 요청에 따라 "몬스터 공격"이라는 "액션"을 수행하게 되는데요, 이렇듯 각 공간에 정의된 액션을 서로 요청하여 수행케 하는 것을 실행제어라고 합니다. 실행제어는 제작자의 의도에 따라 설정할 수 있습니다. 위에 말한 "액션"은 결국 스크립트에서는 "함수"라 할

[task] | two_turn [pass] | ⏳ 미판정 [title] | 공격과 피격 [question] | 피격 시 몬스터의 크기가 변하도록 TransformComponent.Scale을 조작하는 로직은 어떻게 구현하나요? [answer] | 피격 시 몬스터의 크기를 변경하려면 `HitComponent`를 확장한 커스텀 컴포넌트에서 `OnHit()` 함수를 오버라이드하고, 그 안에서 `self.Entity.TransformComponent.Scale` 값을 변경하면 됩니다. 기본 제공된 `HitComponent`를 그대로 사용해도 피격은 처리되지만, 대미지 값이나 피격 시 동작(크기 변경 등)을 직접 제어하려면 `BaseEnvironment - NativeScripts - HitComponent`를 Extend하여 확장 컴포넌트를 만들어야 합니다. 이 확장 컴포넌트를 [followup] | HitEvent 발생 시 Scale을 1.3배로 증가시키는 OnHit() 함수의 전체 코드와, 모델에 MonsterHit 컴포넌트를 적용할 때 기존 HitComponent를 삭제해야 하는 이유를 알려 주세요. [followup_answer] | ### 1. `OnHit()` 함수 전체 코드 피격 시 대미지를 20으로 고정하고, 크기를 1.3배씩 증가시키는 `OnHit()` 함수의 전체 코드는 다음과 같습니다. ```lua Method: [server only] override void OnHit(Entity attacker, int damage, boolean isCritical, string attackInfo, int hitCount) { __base:OnHit(attacker, 20, isCritical, attackInfo, hitCount) local s [scores] | [judge_reason] | [source_doc] | **AttackComponent**를 가진 엔티티가 **HitComponent**를 가진 엔티티를 공격하면, 별다른 추가 처리를 하지 않아도 엔티티는 피격 당하게 됩니다. 이 경우 추가 처리가 없기 때문에 기본값인 1로 대미지 스킨이 재생됩니다. 피격을 구현할 때는 공격량 그대로 대미지로 받을 수도 있지만, 공격과 다른 공식을 함께 사용해 피격량을 계산할 수도 있습니다. 예를 들어 100의 공격력으로 공격했지만 몬스터의 방어력이 높은 경우 절반의 공격만 유효하게 처리할 수 있습니다. 이번에는 아래 두 가지를 구현해 피격 당하는지를

[task] | code [pass] | ⏳ 미판정 [title] | 공격과 피격 [question] | AttackComponent와 HitComponent를 가진 엔티티의 상호작용을 기반으로, 고정된 20의 대미지를 적용하고 피격 시 TransformComponent.Scale을 1.3배씩 증가시키는 MonsterHit 확장 컴포넌트 스크립트를 작성해줘 [answer] | AttackComponent와 HitComponent가 있는 엔티티 간의 기본 상호작용을 활용하되, 대미지를 고정된 20으로 변경하고 피격 시 크기를 1.3배 증가시키는 `MonsterHit` 확장 컴포넌트 스크립트는 다음과 같습니다. 참고: 실제 프로젝트에서는 `BaseEnvironment`의 `NativeScripts`에 있는 기본 `HitComponent`를 Extend하여 확장해야 하며, 모델에 기본 `HitComponent`와 이 확장 컴포넌트가 동시에 존재하지 않도록 해야 합니다. ```lua Method: [serv [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AttackComponent**를 가진 엔티티가 **HitComponent**를 가진 엔티티를 공격하면, 별다른 추가 처리를 하지 않아도 엔티티는 피격 당하게 됩니다. 이 경우 추가 처리가 없기 때문에 기본값인 1로 대미지 스킨이 재생됩니다. 피격을 구현할 때는 공격량 그대로 대미지로 받을 수도 있지만, 공격과 다른 공식을 함께 사용해 피격량을 계산할 수도 있습니다. 예를 들어 100의 공격력으로 공격했지만 몬스터의 방어력이 높은 경우 절반의 공격만 유효하게 처리할 수 있습니다. 이번에는 아래 두 가지를 구현해 피격 당하는지를

[task] | code [pass] | ⏳ 미판정 [title] | 공격과 피격 [question] | AttackComponent의 CalcDamage()와 CalcCritical() 함수를 조합해 크리티컬 확률에 따라 GetCriticalDamageRate() 값을 적용한 최종 대미지를 계산하고, HitComponent를 가진 대상에게 해당 대미지를 전달하는 스크립트를 작성해줘 [answer] | `AttackComponent`와 `HitComponent`의 API 문서를 확인한 결과, 요청하신 로직을 **단일 스크립트**로 완전히 구현하는 것은 불가능합니다. 그 이유는 다음과 같습니다. 1. **함수 속성 충돌**: * `Attack()`, `AttackFrom()`, `AttackFast()` 함수는 **공격자** 엔티티에 붙은 `AttackComponent`에서 호출합니다. * `CalcDamage()`, `CalcCritical()`, `GetCriticalDamageRate()` 함수는 ** [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리에서 플레이어는 모험가가 되어 메이플 세계를 탐험하고 몬스터를 만나 전투를 합니다. 전투 과정에서 다른 몬스터를 공격하거나 피격당합니다. 메이플스토리뿐만 아니라 다양한 게임에서 공격과 피격은 중요한 개념입니다. 이번 과정에서는 공격과 피격을 구현하는 방법을 학습합니다. ##### 참고 가이드/레퍼런스 [AttackComponent](/apiReference/Components/AttackComponent) [HitComponent](/apiReference/Components/HitComponent

[task] | single_turn [pass] | ⏳ 미판정 [title] | 서버와 클라이언트 [question] | 모든 스크립트 프로퍼티가 자동으로 동기화되는 건지, 아니면 특정 설정을 해야만 동기화가 되는 건지 차이점을 설명해 줘. [answer] | 메이플스토리 월드에서 스크립트 프로퍼티가 자동으로 동기화되는 것은 아닙니다. 프로퍼티가 동기화되려면 **`[Sync]`** 속성(Attribute)을 명시적으로 설정해야 합니다. 구체적인 차이점은 다음과 같습니다. 1. **기본 상태 (동기화 안 됨):** 별도의 설정을 하지 않은 프로퍼티는 서버와 클라이언트 공간에서 독립적으로 존재하며, 한쪽에서 값을 변경해도 다른 쪽으로 값이 전달되지 않습니다. 이는 주로 클라이언트에서만 작동하는 로컬 상태나, 서버에서만 관리되는 데이터에 사용됩니다. 2. **`[Sync]` 설 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버와 클라이언트가 어떻게 상호작용을 하는지를 알아보았으니, 이제 메이커에서 작성한 프로그램이 서버와 클라이언트에서 어떻게 돌아가는지 알아보도록 합니다. 제작자가 스크립트에서 선언한 프로퍼티와 함수는 별도의 설정을 하지 않는 한 기본적으로 서버와 클라이언트 두 개의 공간에 각각 독립적으로 생성됩니다. 이름은 같지만 서로 다른 공간에 존재하기 때문에 별도의 프로퍼티 또는 함수라 보는 것이 좋습니다. 기본적으로 함수의 호출과 프로퍼티의 값 참조 및 할당은 같은 공간 내에서만 이루어집니다. 예를 들어 A라는 프로퍼티에 값을 B라는 함

[task] | instruction_following [pass] | ⏳ 미판정 [title] | InputService를 활용한 입력과 액션 [question] | KeyDownEvent와 KeyUpEvent의 발생 시점 차이를 설명하되, 각각 2문장 이내로 작성하세요. [answer] | KeyDownEvent는 키를 눌렀을 때 발생하며, KeyUpEvent는 키를 눌린 상태에서 손을 떼었을 때 1회 발생합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `KeyDownEvent`는 키를 눌렀을 때 발생하는 이벤트입니다. `KeyDownEvent`가 발생하면 **HandleKeyDownEvent**가 실행됩니다. `KeyDownEvent`가 핸들러의 매개 변수로 전송되며, 이벤트에는 유저가 입력한 키가 enum으로 넘어오게 됩니다. 다음은 `T` 키를 눌렀을 때 로그를 출력하는 예제입니다. ```lua Event Handler: [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { --------------- N

[task] | code [pass] | ⏳ 미판정 [title] | 공격과 피격 [question] | 피격 시마다 self.Entity.TransformComponent.Scale을 조회하여 1.3을 곱한 값을 다시 할당함으로써 몬스터의 크기가 누적적으로 커지도록 하는 HitComponent 확장 로직 스크립트를 작성해줘 [answer] | 피격 시마다 현재 스케일 값을 조회하여 1.3을 곱한 값을 다시 할당함으로써 크기가 누적적으로 증가하도록 하는 `MonsterHit` 컴포넌트 스크립트입니다. 참고 문서에 따라 `HitComponent`를 확장하여 `OnHit` 메서드를 오버라이드하고, 기본 동작(`__base:OnHit`)을 호출한 후 `TransformComponent.Scale`을 변경하는 로직을 적용했습니다. ```lua Method: [server only] override void OnHit(Entity attacker, int damage, bool [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | **AttackComponent**를 가진 엔티티가 **HitComponent**를 가진 엔티티를 공격하면, 별다른 추가 처리를 하지 않아도 엔티티는 피격 당하게 됩니다. 이 경우 추가 처리가 없기 때문에 기본값인 1로 대미지 스킨이 재생됩니다. 피격을 구현할 때는 공격량 그대로 대미지로 받을 수도 있지만, 공격과 다른 공식을 함께 사용해 피격량을 계산할 수도 있습니다. 예를 들어 100의 공격력으로 공격했지만 몬스터의 방어력이 높은 경우 절반의 공격만 유효하게 처리할 수 있습니다. 이번에는 아래 두 가지를 구현해 피격 당하는지를

[task] | code [pass] | ⏳ 미판정 [title] | 프로퍼티 [question] | `Property` 블록에 `[None]` 속성을 가진 `string` 타입의 `PropertyA`와 `PropertyB` 프로퍼티를 선언하고, `OnBeginPlay` 메서드에서 `_EntityService`를 통해 타 엔티티의 `ComponentA`를 참조하여 `PropertyA` 값을 가져와 `PropertyB`에 저장한 후 `log`로 결과를 출력하는 두 개의 서로 다른 컴포넌트 로직을 하나의 설명으로 통합하여 구현하는 스크립트를 작성해줘. [answer] | 요청하신 두 컴포넌트의 로직을 하나의 스크립트 구조로 통합하여 구현했습니다. 참고 문서에 따르면, 다른 엔티티의 컴포넌트 프로퍼티에 접근하기 위해서는 `_EntityService:GetEntityByPath()`를 통해 엔티티를 가져오고, 해당 엔티티의 컴포넌트 속성(예: `entityA.ComponentA`)을 통해 프로퍼티를 참조해야 합니다. 아래 스크립트는 `ComponentB`의 관점에서 작성되었으며, `OnBeginPlay` 시점에 타 엔티티(`A`)의 `ComponentA`에 선언된 `PropertyA` 값을 읽어와 자 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 함수에서 프로퍼티에 접근하는 방법을 알아봅시다. 먼저 같은 컴포넌트에서는 다음과 같이 접근할 수 있습니다. ```lua Property: [None] string StringProperty = "Hello!!" Method: [Server Only] void OnBeginPlay() { local stringProperty = self.StringProperty --"self.프로퍼티명"으로 해당 프로퍼티를 가져옴 } ``` 다른 컴포넌트의 프로퍼티는 다음과 같이 접근할 수 있습니다. 아래 상황에서 접근하는 방법

[task] | two_turn [pass] | ⏳ 미판정 [title] | 공격과 피격 [question] | PlayerActionEvent에서 ActionName이 "Attack"일 때만 NormalAttack을 실행하도록 코드를 작성했는데, 다른 키 입력이나 마우스 클릭으로도 공격을 트리거하려면 Event Handler의 조건문을 어떻게 수정해야 합니까? [answer] | 참고 문서에 제시된 `PlayerActionEvent` 처리 방식은 `event.ActionName` 값이 특정 문자열(예: `"Attack"`)과 일치하는지 비교하는 `if` 문장을 사용하는 것입니다. 다른 키 입력이나 마우스 클릭으로도 공격을 트리거하려면, 해당 입력이 게임 설정에서 어떤 `ActionName` 값으로 매핑되어 있는지 확인한 후, `if` 문장의 조건에 해당 값을 추가해야 합니다. 예를 들어, 마우스 좌클릭이 `"MouseLeftClick"`이라는 ActionName으로 정의되어 있다면, 다음과 같이 조건문을 [followup] | 만약 한 번의 키 입력으로 여러 번 공격이 연달아 발동되는 버그가 발생한다면, mLua 스크립트 내에서 입력 중복을 방지하기 위해 어떤 변수나 타이머(_TimerService)를 활용하여 논리를 구성할 수 있습니까? [followup_answer] | 참고 문서에는 `_TimerService` API나 입력 중복 방지(쿨다운/디바운싱)를 위한 구체적인 코드 예제나 메서드가 포함되어 있지 않습니다. 문서에 따르면, `PlayerActionEvent` 핸들러 내에서 `ActionName`이 `"Attack"`일 때 `NormalAttack()`을 호출하는 로직만 제시되어 있으며, 한 번의 키 입력으로 여러 번 발동되는 문제를 해결하기 위한 `wait()` 함수나 타이머 서비스 활용 방법은 언급되어 있지 않습니다. 따라서 참고 문서의 정보만으로는 입력 중복 방지를 위한 구체적인 구 [scores] | [judge_reason] | [source_doc] | 1. **Workspace - BaseEnvironment - NativeScripts - Component - AttackComponent**를 선택합니다. 2. 콘텍스트 메뉴에서 **Extend**를 눌러 컴포넌트를 확장합니다. 확장한 컴포넌트의 이름을 **CharacterAttack**으로 변경합니다. 3. **CharacterAttack** 컴포넌트를 더블 클릭하여 스크립트 에디터를 엽니다. 4. **Method**에서 새로운 함수를 추가하고, 이름을 **NormalAttack** 으로 변경합니다. 5. `Att

[task] | instruction_following [pass] | ⏳ 미판정 [title] | InputService를 활용한 입력과 액션 [question] | T 키 입력 시 로그를 출력하는 코드만 출력하고, 설명은 주석으로만 작성하세요. [answer] | ```lua Event Handler: [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { -- T 키가 눌렸을 때 로그를 출력합니다. local key = event.key if key == KeyboardKey.T then log("Press T!") end } ``` [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `KeyDownEvent`는 키를 눌렀을 때 발생하는 이벤트입니다. `KeyDownEvent`가 발생하면 **HandleKeyDownEvent**가 실행됩니다. `KeyDownEvent`가 핸들러의 매개 변수로 전송되며, 이벤트에는 유저가 입력한 키가 enum으로 넘어오게 됩니다. 다음은 `T` 키를 눌렀을 때 로그를 출력하는 예제입니다. ```lua Event Handler: [service: InputService] HandleKeyDownEvent(KeyDownEvent event) { --------------- N

[task] | single_turn [pass] | ⏳ 미판정 [title] | 프로퍼티 동기화 [question] | 클라이언트 스크립트에서 프로퍼티 값을 수정했는데 서버의 값은 변하지 않는 이유는 무엇이며, 이 방향으로의 동기화는 왜 제한되는가요? [answer] | 메이플스토리 월드에서 프로퍼티 동기화는 기본적으로 **서버에서 클라이언트로** 한 방향으로만 진행됩니다. 따라서 클라이언트 스크립트에서 프로퍼티 값을 수정해도 서버의 값은 변하지 않습니다. 이러한 제한이 있는 이유는 다음과 같습니다. 1. **서버의 단일성 vs 클라이언트의 복수성**: 서버는 단독으로 존재하기 때문에 서버의 값이 변경되면 이를 각 클라이언트로 전송하여 일치시킬 수 있습니다. 반면, 클라이언트는 여러 개로 존재하며 각자 독립적으로 값을 수정할 수 있습니다. 2. **값 충돌 및 판단 어려움**: 여러 클라이언 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 서버, 클라이언트 간 데이터 전송 방식 중 하나인 프로퍼티 동기화에 대해 알아봅시다. # 동기화 메이플스토리 월드에서의 동기화는 서버, 클라이언트 간 데이터 전송 방식의 일종으로,각각의 공간에 존재하는 같은 이름의 프로퍼티를 같은 값으로 맞춰주는 것을 의미합니다. 기본적으로 프로퍼티는 선언과 동시에 서버, 클라이언트 각각의 공간에 생성되지만, 만일 프로퍼티 동기화가 되지 않는다면 이름은 같지만 서로 다른 값으로 설정할 수 있습니다. 제작자의 의도에 따라서 같은 프로퍼티의 값을 각 공간에 따라 다르게 할당

[task] | single_turn [pass] | ⏳ 미판정 [title] | 프로퍼티 동기화 [question] | any 타입 프로퍼티를 사용했을 때 동기화 설정이 제한되는 이유는 무엇인가요? [answer] | 제공된 문서에는 `any` 타입 프로퍼티의 동기화 가능 여기를 'X'(불가)로 명시하고 있지만, 동기화 설정이 제한되는 구체적인 이유나 원인에 대한 설명은 포함되어 있지 않습니다. 따라서 문서의 내용만으로는 `any` 타입의 동기화 제한 이유가 무엇인지 설명할 수 없습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 동기화 설정 방법은 매우 간단합니다. 스크립트 에디터를 한 번이라도 열어서 프로퍼티를 추가해봤다면 프로퍼티 상단에 Sync라고 쓰여 있는 것을 본 적이 있을 것입니다. 이 Sync는 프로퍼티 동기화가 되고 있다는 것을 의미합니다. 만일 프로퍼티 동기화를 원치 않는다면 Sync를 눌러 None으로 변경해 줍니다. 동기화 표시가 None으로 되어 있으면 프로퍼티 동기화는 이루어지지 않는다는 것을 의미하며, 프로퍼티 값을 공간별로 따로 관리할 수 있게 됩니다. #### 타입별 동기화 가능 여부 일부 타입의 프로퍼티는 동기화 설정이

[task] | single_turn [pass] | ⏳ 미판정 [title] | 프로퍼티 동기화 [question] | 서버의 프로퍼티 값 변경이 클라이언트에 완전히 반영된 시점에 맞춰 특정 액션을 실행하려면 어떤 이벤트 함수를 사용해야 하나요? [answer] | 서버의 프로퍼티 값 변경이 클라이언트에 완전히 반영된 시점에 맞춰 특정 액션을 실행하려면 `OnSyncProperty` 이벤트 함수를 사용해야 합니다. `OnSyncProperty`는 같은 컴포넌트 내에서 프로퍼티 값이 동기화되었을 때 호출되는 함수입니다. 서버에서 값을 변경한 즉시 클라이언트에 반영되는 것이 아니라 약간의 딜레이가 발생하므로, 동기화가 완료된 시점에 액션을 수행하고 싶다면 이 함수를 활용해야 합니다. 아래는 `OnSyncProperty`를 사용하여 HP 프로퍼티가 0 이하로 동기화되었을 때 특정 처리를 하는 예 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 서버, 클라이언트 간 데이터 전송 방식 중 하나인 프로퍼티 동기화에 대해 알아봅시다. # 동기화 메이플스토리 월드에서의 동기화는 서버, 클라이언트 간 데이터 전송 방식의 일종으로,각각의 공간에 존재하는 같은 이름의 프로퍼티를 같은 값으로 맞춰주는 것을 의미합니다. 기본적으로 프로퍼티는 선언과 동시에 서버, 클라이언트 각각의 공간에 생성되지만, 만일 프로퍼티 동기화가 되지 않는다면 이름은 같지만 서로 다른 값으로 설정할 수 있습니다. 제작자의 의도에 따라서 같은 프로퍼티의 값을 각 공간에 따라 다르게 할당

← → 방향키로 페이지 이동 · 숫자 입력 후 Enter로 점프