← 목록

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

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

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnSyncProperty 이벤트 핸들러의 매개변수인 name과 value는 각각 어떤 정보를 담고 있나요? [answer] | `OnSyncProperty` 함수의 매개변수 `name`과 `value`는 다음과 같은 정보를 담고 있습니다. * **`name`**: 동기화가 완료된 **프로퍼티의 이름**입니다. * **`value`**: 서버에서 변경되어 동기화된 **프로퍼티의 값**입니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name,

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | 같은 엔티티에 있는 두 컴포넌트의 OnBeginPlay 호출 순서가 보장되지 않아서 nil 값 오류가 발생하면 어떻게 해결해야 하나요? [answer] | 같은 엔티티에 있는 두 컴포넌트의 `OnBeginPlay` 함수 호출 순서는 보장되지 않습니다. 따라서 한 컴포넌트의 `OnBeginPlay`에서 다른 컴포넌트의 프로퍼티를 참조하면, 그 값이 아직 초기화되지 않아 `nil`을 반환할 수 있습니다. 이 문제를 해결하려면 값의 초기화 시점을 `OnBeginPlay`가 아닌 `OnInitialize`로 앞당겨야 합니다. `OnInitialize`는 `OnUpdate` 호출 직전에 1회 호출되며, 다른 엔티티 및 컴포넌트 생성이 모두 완료된 후의 `OnBeginPlay`보다는 먼저 실행 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnBeginPlay와 OnInitialize 중 다른 엔티티나 컴포넌트 참조가 보장되는 시점은 어느 쪽인가요? [answer] | 다른 엔티티나 컴포넌트 참조가 보장되는 시점은 `OnBeginPlay`입니다. `OnBeginPlay` 함수는 로직이 시작되는 시점(`OnInitialize` 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되며, 엔티티의 모든 컴포넌트와 다른 엔티티가 모두 생성된 뒤에 실행됩니다. 따라서 `OnBeginPlay`에서는 다른 엔티티나 컴포넌트를 안전하게 참조할 수 있습니다. 반면, `OnInitialize`는 `OnBeginPlay`보다 먼저 호출되므로 다른 엔티티나 컴포넌트가 생성되지 않았을 가능성이 있습니다. 실제로 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo

[task] | code [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | PlayerStats 컴포넌트에 [server] 실행 공간의 SkillUpgrade() 메서드를 구현하여 SkillGradeTable의 Cost를 검증하고 CurrentMoney를 차감한 뒤 CurrentSkillGrade와 WeightBonus를 갱신하며, 처리 완료 시 self:RenewUI()를 호출하도록 작성해줘 [answer] | PlayerStats 컴포넌트의 `SkillUpgrade()` 메서드는 `[server]` 실행 공간에서 동작하며, 현재 운동 등급이 최대 등급인지 먼저 확인합니다. 만약 최대 등급이 아니라면, 다음 등급의 비용(`Cost`)을 `SkillGradeTable`에서 조회하여 현재 보유 금액(`CurrentMoney`)이 충분한지 검증합니다. 비용이 충분할 경우, `SetMoney()`를 통해 차감된 금액을 설정하고 `CurrentSkillGrade`를 1 증가시킵니다. 이후 갱신된 등급에 해당하는 `WeightBonus`를 `Ski [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 구매 처리 실제 돈이 있는 상태에서 **DnaUpButton**을 클릭했을 때, 운동 기술과 DNA를 업그레이드 할 수 있도록 처리해봅시다. **UIManager**에서 `OnClickButton()`에서**SkillUpButton**와 **DnaUpButton**을 눌렀을 때 동작할 내용을 추가합니다. 1. **PlayerStats** 컴포넌트에서 새로운 `SkillUpgrade()` 메소드를 추가하고, 아래 내용을 입력합니다. 운동 레벨이 증가하면 해당 운동 레벨에 맞는 운동량을 설정하게 됩니다. ```lua

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnBeginPlay 함수 안에서 _EntityService:GetEntityByPath로 다른 엔티티를 가져와도 안전하게 참조할 수 있는 이유는 무엇인가요? [answer] | `OnBeginPlay` 함수 안에서 `_EntityService:GetEntityByPath`로 다른 엔티티를 가져와도 안전하게 참조할 수 있는 이유는, **`OnBeginPlay`가 다른 모든 엔티티와 컴포넌트가 생성된 뒤에 호출되기 때문**입니다. 이는 `OnInitialize` 함수와의 차이점에서 명확히 드러납니다. `OnInitialize`는 로직이 시작되는 시점(`OnUpdate` 호출 직전)에 1회 호출되지만, `OnBeginPlay`는 엔티티의 다른 컴포넌트 및 다른 엔티티들이 모두 생성 완료된 후에 호출됩니다. 따 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo

[task] | instruction_following [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | `[Sync]` 속성을 가진 프로퍼티가 서버에서 변경되어 클라이언트로 동기화될 때 발생하는 과정과 `OnSyncProperty` 함수의 호출 조건을 단계별 번호 목록으로 정리하세요. [answer] | `[Sync]` 속성을 가진 프로퍼티의 동기화 과정과 `OnSyncProperty` 함수의 호출 조건은 다음과 같습니다. 1. **프로퍼티 동기화 설정 확인**: 프로퍼티의 동기화 설정이 `[Sync]`인 경우에만 동기화 과정이 시작됩니다. 설정이 `[None]`인 경우 동기화가 이루어지지 않아 `OnSyncProperty` 함수는 호출되지 않습니다. 2. **서버에서 프로퍼티 값 변경**: 서버 실행 공간(Server Space)에서 해당 `[Sync]` 프로퍼티의 값이 변경됩니다. 3. **클라이언트로 동기화**: 서버에 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name,

[task] | instruction_following [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | 제공된 코드 예제에서 `HP`와 `MP` 프로퍼티가 0 이하일 때 처리 로직을 추가하는 부분만 코드 블록으로 출력하고, 설명은 주석으로만 작성하세요. [answer] | ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name, any value) --name : 프로퍼티 이름, value : 변경된 프로퍼티 값 { if name == "HP" then if self.HP == value then log("동기화가 완료된 시점에 호출되므로, 이 로그가 콘솔 창에 출력됩니다.") [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name,

[task] | two_turn [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | `OnClickButton` 메서드에서 `buttonName`이 "ShopCloseButton"으로 매칭되지 않아 상점이 닫히지 않을 때, UI 엔티티의 이름(Hierarchy)과 스크립트 내 문자열 비교 로직을 어떻게 점검해야 하는지 구체적인 절차와 예외 처리 코드를 요청합니다. [answer] | 상점 닫기 버튼(`ShopCloseButton`)이 동작하지 않는 문제는 대부분 **UI 엔티티의 실제 이름**과 **스크립트 내 비교 문자열**이 일치하지 않아 발생하거나, **UI 그룹의 가시성(`Visible`) 상태**가 초기화되지 않아 발생합니다. 아래 절차에 따라 점검하고, 예외 처리 코드를 적용해 보세요. ### 1. 점검 절차 1. **UI 엔티티 이름 확인 (Hierarchy)** * 에디터에서 `UIManager` 또는 해당 UI Group의 하위 엔티티를 확인하세요. * `ShopClo [followup] | UI 엔티티 이름이 이미지와 동일해야 한다는 Tip에 따라 이름을 변경했는데도 여전히 분기문이 실행되지 않을 때, `event.Entity.Name` 값이 실제 무엇으로 들어오는지 확인하는 로그 코드와, 이름 매칭 실패 시 기본 동작(예: 콘솔 로그 출력)을 추가하는 방법을 알려주세요. [followup_answer] | UI 엔티티 이름을 문서의 이미지와 동일하게 변경했음에도 분기문이 실행되지 않는 경우, `event.Entity.Name`으로 전달되는 실제 값이 예상과 다를 수 있습니다. 이는 엔티티 이름에 보이지 않는 공백이 있거나, 대소문자 차이, 또는 이벤트가 연결된 엔티티가 버튼 자체의 부모 엔티티일 수 있기 때문입니다. 아래와 같이 `OnClickButton` 메서드에 디버깅 로그를 추가하여 실제 들어오는 값을 확인하고, 매칭 실패 시 기본 동작을 수행하도록 코드를 구성할 수 있습니다. ```lua Method: [client onl [scores] | [judge_reason] | [source_doc] | # 상점 UI 제작 1. 새로운 **UI Group**을 추가하고, **DefaultShow** 값을 **true**로 설정합니다. 2. 아래와 같이 UI엔티티를 추가하고 배치합니다. UI엔티티의 이름은 이미지와 동일해야 합니다. ![[object Object]](https://mod-file.dn.nexoncdn.co.kr/bbs/1769512144899182516b8ee4d4248a16af41cc5d72f56.png "1") > **Tip.** > 이미지나 텍스트가 다른 UI엔티티에 가릴 경우 하이어라키 순서를 변경합니다.

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | 프로퍼티의 동기화 설정을 None으로 지정하면 OnSyncProperty 함수가 호출되지 않는 이유는 무엇인가요? [answer] | 프로퍼티의 동기화 설정이 `None`으로 지정되면 서버와 클라이언트 간에 해당 프로퍼티 값의 동기화 자체가 이루어지지 않기 때문입니다. `OnSyncProperty` 함수는 서버에서 변경된 프로퍼티 값이 클라이언트로 전달되어 동기화가 완료된 시점에 호출됩니다. 하지만 `None` 설정에서는 값이 클라이언트로 전달되는 과정이 생략되므로, 동기화 완료 이벤트가 발생하지 않아 `OnSyncProperty` 함수가 호출되지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name,

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnMapEnter 함수에서 매개변수로 넘어오는 Entity를 활용해 특정 맵 이름 조건에 따라 플레이어의 Scale을 변경하는 코드는 어떻게 작성하나요? [answer] | `OnMapEnter` 함수는 엔티티가 맵에 입장하거나 생성될 때마다 호출되며, 매개변수로 입장한 맵의 `Entity`를 전달받습니다. 특정 맵 이름에 따라 플레이어의 Scale을 변경하려면, 전달받은 맵 엔티티의 `Name` 속성을 확인하여 조건이 충족되면 `self.Entity`의 `TransformComponent`에서 `Scale` 값을 수정하고 다시 대입하면 됩니다. 아래는 `map01` 맵에 입장할 때마다 플레이어의 Scale을 x, y 방향으로 1씩 증가시키는 예시 코드입니다. ```lua void OnMapEnte [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnEndPlay와 OnDestroy 함수가 호출되는 시점의 가장 큰 차이점은 무엇이며, 엔티티 제거 후 로직을 실행할 때 어떤 함수를 사용해야 하나요? [answer] | `OnEndPlay`와 `OnDestroy` 함수의 가장 큰 차이점은 **함수 실행 완료 시점의 엔티티 상태**입니다. 1. **OnEndPlay**: 엔티티가 제거되는 시점에 1회 호출됩니다. 하지만 이 함수가 완료된 후에도 엔티티는 즉시 제거되지 않고 **유효한 상태**로 유지됩니다. 2. **OnDestroy**: `OnEndPlay` 함수가 호출된 이후에 호출됩니다. 이 함수가 완료된 시점에 비로소 **엔티티가 제거**됩니다. 따라서 엔티티가 완전히 제거된 **후**에 로직을 실행해야 하는 상황이라면 **`OnDest [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time

[task] | single_turn [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | SetMoney()와 SetMaxPow() 호출 후 UI가 즉시 갱신되지 않는다면, RenewUI() 호출 위치나 실행 공간 설정 중 어디를 확인해야 하나요? [answer] | `SetMoney()`와 `SetMaxPow()` 호출 후 UI가 즉시 갱신되지 않는다면, **`RenewUI()` 메소드의 실행 공간 설정**과 **호출 시점(위치)**을 확인해야 합니다. ### 1. 실행 공간(Execution Space) 확인 UI 갱신은 클라이언트에서 이루어져야 합니다. * `RenewUI()` 메소드는 반드시 **`[client]`** 또는 **`[multicast]`**로 선언되어야 클라이언트에서 UI가 갱신됩니다. * 참고 문서의 예시처럼 `RenewUI()`는 `[client]`로 선언되어 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 구매 처리 실제 돈이 있는 상태에서 **DnaUpButton**을 클릭했을 때, 운동 기술과 DNA를 업그레이드 할 수 있도록 처리해봅시다. **UIManager**에서 `OnClickButton()`에서**SkillUpButton**와 **DnaUpButton**을 눌렀을 때 동작할 내용을 추가합니다. 1. **PlayerStats** 컴포넌트에서 새로운 `SkillUpgrade()` 메소드를 추가하고, 아래 내용을 입력합니다. 운동 레벨이 증가하면 해당 운동 레벨에 맞는 운동량을 설정하게 됩니다. ```lua

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnUpdate 함수의 delta 매개변수를 활용해 특정 시간 간격마다 동작을 실행하려면 어떻게 코드를 작성해야 하나요? [answer] | `OnUpdate` 함수는 `OnBeginPlay` 호출 이후 프레임마다 실행되며, 매개변수로 **delta**를 전달받습니다. 이 값은 이전 프레임에서 현재 프레임까지 걸린 시간(단위: 초)입니다. 특정 시간 간격마다 동작을 실행하려면, 프레임별로 `delta` 값을 누적하여 특정 시간(예: 3초) 이상 지났는지 확인하고, 조건이 충족되면 해당 동작을 실행한 후 누적 시간을 초기화하는 로직을 작성해야 합니다. 다음은 3초마다 콘솔에 메시지를 출력하는 예시입니다. ```lua void OnUpdate(number delta) [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time

[task] | code [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | PlayerStats 컴포넌트에 [None] 속성인 table SkillGradeTable, table DnaGradeTable 프로퍼티를 추가하고, [server only] 속성의 SetTable() 메서드에서 문서에 제시된 운동 스킬 및 DNA 등급별 Cost, WeightBonus/MaxPow, GradeName 데이터를 테이블로 초기화하며, OnBeginPlay() 메서드에서 self:SetTable()을 호출하는 스크립트를 작성해줘 [answer] | 요청하신 PlayerStats 컴포넌트 스크립트입니다. ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테이블 정보를 저장합니다. [None] table DnaGradeTable = {} -- dna 관련 테이블을 저장합니다. Method: [server only] void SetTable() { self.SkillGradeTable = { {["Cost"] = 0, ["WeightBonus"] = 1, ["GradeName"] = "1단계"} [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 운동 기술과 DNA는 돈을 사용해 업그레이드 할 수 있습니다. 그러므로 각각의 등급에서 증가하는 힘과 누적 가능한 힘, 필요한 금액 정보를 구성해 봅시다. > **Tip.** > 관리할 데이터가 많아질 경우 스크립트에 직접 입력하는 대신 공식을 사용하거나, 데이터셋을 사용해 효율적으로 관리할 수 있습니다. 1. **PlayerStats** 컴포넌트에 새로운 프로퍼티 2개를 추가합니다. ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnSyncProperty 안에서 서버에서 온 값과 현재 클라이언트의 self 프로퍼티 값을 직접 비교하는 코드의 목적은 무엇인가요? [answer] | `OnSyncProperty` 이벤트 핸들러는 서버에서 변경된 값이 클라이언트로 **동기화가 완료된 시점**에 호출됩니다. 따라서 이 함수 안에서 `self.프로퍼티`와 매개변수로 넘어온 `value`를 직접 비교하는 코드의 목적은 **동기화 완료 후 클라이언트의 프로퍼티 값이 실제로 서버 값과 일치하는지(즉, 동기화가 정상적으로 반영되었는지) 확인**하기 위함입니다. 참고 문서의 예제에서도 다음과 같이 설명하고 있습니다. ```lua if self.HP == value then log("동기화가 완료된 시점에 호출되므 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name,

[task] | code [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | PlayerStats 컴포넌트의 SkillGradeTable 또는 DnaGradeTable 데이터를 기반으로 현재 등급의 다음 단계 업그레이드에 필요한 금액을 계산하여 반환하는 [server only] 속성의 GetNextUpgradeCost(table gradeTable, number currentGrade) 메서드를 구현하는 스크립트를 작성해줘 [answer] | 사용자가 요청한 `GetNextUpgradeCost` 메서드는 `PlayerStats` 컴포넌트에 추가되어야 하며, `[server only]` 실행 공간에서 동작해야 합니다. **주의사항:** 1. `SkillGradeTable`과 `DnaGradeTable`은 구조가 약간 다릅니다. - `SkillGradeTable`: `{["Cost"] = number, ["WeightBonus"] = number, ["GradeName"] = string}` - `DnaGradeTable`: `{["Cost"] = number, [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 운동 기술과 DNA는 돈을 사용해 업그레이드 할 수 있습니다. 그러므로 각각의 등급에서 증가하는 힘과 누적 가능한 힘, 필요한 금액 정보를 구성해 봅시다. > **Tip.** > 관리할 데이터가 많아질 경우 스크립트에 직접 입력하는 대신 공식을 사용하거나, 데이터셋을 사용해 효율적으로 관리할 수 있습니다. 1. **PlayerStats** 컴포넌트에 새로운 프로퍼티 2개를 추가합니다. ```lua Property: [None] table SkillGradeTable = {} -- 운동 스킬 관련 테

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | 플레이어가 맵을 이동할 때마다 초기화해야 하는 로직이 있다면 OnBeginPlay 대신 어떤 함수를 사용해야 하는 이유가 무엇인가요? [answer] | 플레이어가 맵을 이동할 때마다 초기화해야 하는 로직이 있다면 `OnBeginPlay` 대신 `OnMapEnter` 함수를 사용해야 합니다. 그 이유는 두 함수의 호출 시점이 다르기 때문입니다. * **`OnBeginPlay`**: 엔티티가 생성될 때 **매번** 호출됩니다. * **`OnMapEnter`**: 엔티티가 맵에 입장하거나, 맵에 생성될 때마다 호출됩니다. 따라서 플레이어가 특정 맵으로 이동할 때마다 필요한 처리(예: 해당 맵에 맞는 상태 초기화, 객체 생성 등)를 수행하려면 맵 입장 이벤트를 감지하는 `OnM [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | `OnBeginPlay` 함수 호출 이후, 프레임마다 호출되는 함수입니다. 따라서 프레임별로 엔티티 위치, 상태, 동작을 변경하고 싶다면 `OnUpdate` 함수에 스크립트를 작성합니다. 매개 변수로 **delta**를 사용하며, 이전 프레임에 걸린 시간 값(단위: 초)을 받습니다. **delta**를 활용하여 프레임 단위 구현을 할 수 있고, 특정 시간마다 액션을 제어할 수 있습니다. ```lua void OnUpdate(number delta) { if self._T.Time == nil then self._T.Time

[task] | two_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnMapLeave 함수에서 퇴장한 맵의 엔티티를 매개변수로 받아 맵 이름에 따라 플레이어의 Scale을 수정하는 코드를 작성해 주세요. [answer] | `OnMapLeave` 함수는 엔티티가 맵을 떠날 때 호출되며, 퇴장한 맵의 엔티티를 매개변수로 받습니다. 이 매개변수의 `Name` 속성을 확인하여 특정 맵(예: `map01`)에서 퇴장할 경우에만 플레이어의 `Scale`을 줄이는 로직을 구현할 수 있습니다. 아래 코드는 `map01`에서 퇴장할 때마다 플레이어의 X, Y Scale을 1씩 감소시키는 예시입니다. ```lua void OnMapLeave(Entity leftMap) { -- map01에서 퇴장할 때마다 플레이어 크기가 작아짐 if leftMap. [followup] | map01에서 퇴장할 때마다 플레이어의 Scale x, y 값을 1씩 감소시키는 OnMapLeave 함수의 mLua 코드 예시를 보여주세요. [followup_answer] | `OnMapLeave` 함수는 엔티티가 맵에서 퇴장할 때 호출되며, 퇴장한 맵의 엔티티를 매개변수로 받습니다. 매개변수의 `Name` 속성을 `"map01"`과 비교하여 해당 맵에서 퇴장할 경우에만 플레이어의 `Scale` x, y 값을 1씩 감소시킵니다. 아래는 이를 구현한 mLua 코드 예시입니다. ```lua void OnMapLeave(Entity leftMap) { -- map01에서 퇴장할 때마다 플레이어 크기가 작아짐 if leftMap.Name == "map01" then local m [scores] | [judge_reason] | [source_doc] | 예를 들어, 내 플레이어 엔티티가 **map01에서 map02로 이동**했다고 가정합니다. 이때 내 플레이어 엔티티의 스크립트 컴포넌트에 `OnMapEnter` 함수가 있었다면, map02로 이동할 때 내 플레이어 엔티티의 `OnMapEnter` 함수가 호출됩니다. 그런데 내 플레이어뿐만 아니라 다른 플레이어의 `OnMapEnter` 함수도 호출되는 것을 볼 수 있습니다. 클라이언트 상에서 보자면, 현재 내가 존재하는 맵에 다른 플레이어 엔티티가 생성된 것과 마찬가지이기 때문입니다. 하지만 서버상에서는 내 플레이어 엔티티가 map

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnInitialize에서 프로퍼티 값을 설정하고 OnBeginPlay에서 참조하는 방식과, OnBeginPlay에서 설정한 값을 바로 참조하는 방식의 차이는 무엇인가요? [answer] | `OnInitialize`와 `OnBeginPlay`의 호출 시점과 보장 범위의 차이 때문에, 두 방식의 신뢰도가 다릅니다. **1. OnBeginPlay에서 설정 후 바로 참조하는 방식 (불안정)** `OnBeginPlay`는 엔티티와 모든 컴포넌트가 생성된 후에 호출되지만, **각 컴포넌트 간의 `OnBeginPlay` 호출 순서는 보장되지 않습니다.** 따라서 컴포넌트 A의 `OnBeginPlay`에서 프로퍼티 값을 설정하고, 다른 컴포넌트 C의 `OnBeginPlay`에서 그 값을 참조하면, C의 `OnBeginPlay`가 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo

[task] | code [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnInitialize에서 self.Entity.Name을 log로 출력하고, OnBeginPlay에서 _EntityService:GetEntityByPath로 특정 엔티티를 조회하여 nil이 아닐 경우에만 그 엔티티의 이름을 log로 출력하는 스크립트를 작성해줘. [answer] | 요청하신 `OnInitialize`와 `OnBeginPlay` 동작을 포함하는 스크립트 컴포넌트입니다. ```lua Property: [None] Method: [server only] void OnInitialize() { local myEntity = self.Entity log(myEntity.Name .. "Hello MapleStory Worlds") } [server only] void OnBeginPlay() { local targetEntity = _EntityService:GetEntity [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서 스크립트를 활용하면 크리에이터만의 독창적인 월드를 자유자재로 만들 수 있습니다. 스크립트를 작성할 때는 필요에 따라 기본 이벤트 함수를 활용하게 됩니다. **기본 이벤트 함수**란 다른 함수에서 직접 호출하지 않아도 **특정 조건이 되면 자동으로 호출되는 함수**를 말합니다. 이번 과정에서는 기본 이벤트 함수의 종류와 호출 시점을 알아봅시다. # 기본 이벤트 함수 추가하기 기본 이벤트 함수를 추가해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Crea

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | 서버에서 다른 플레이어 엔티티가 이미 존재하고 있는 상황에서 내 플레이어가 맵에 진입했을 때 OnBeginPlay가 다시 호출되지 않는 원리는 무엇인가요? [answer] | 서버에서 `OnBeginPlay` 함수는 엔티티가 월드에 **최초로 진입하여 생성되는 단 한 번만** 호출되는 생명주기 함수입니다. 다른 플레이어 엔티티는 내 플레이어가 해당 맵에 진입하기 전에 이미 서버에서 생성되어 존재하고 있었습니다. 따라서 내 플레이어가 새로운 맵으로 이동할 때, 서버 입장에서는 새로운 엔티티가 생성되는 상황이 아닙니다. 기존에 존재하던 다른 플레이어 엔티티의 `OnBeginPlay`는 그 엔티티가 처음 월드에 진입했을 때 이미 호출되었으므로, 내 플레이어의 맵 이동과는 무관하게 다시 실행되지 않습니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 예를 들어, 내 플레이어 엔티티가 **map01에서 map02로 이동**했다고 가정합니다. 이때 내 플레이어 엔티티의 스크립트 컴포넌트에 `OnMapEnter` 함수가 있었다면, map02로 이동할 때 내 플레이어 엔티티의 `OnMapEnter` 함수가 호출됩니다. 그런데 내 플레이어뿐만 아니라 다른 플레이어의 `OnMapEnter` 함수도 호출되는 것을 볼 수 있습니다. 클라이언트 상에서 보자면, 현재 내가 존재하는 맵에 다른 플레이어 엔티티가 생성된 것과 마찬가지이기 때문입니다. 하지만 서버상에서는 내 플레이어 엔티티가 map

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | 클라이언트에서 HP가 0 이하가 되었을 때 특정 효과를 발생시키려면 OnSyncProperty의 어떤 조건문을 활용해야 하나요? [answer] | `OnSyncProperty` 함수에서 `name` 매개 변수가 `"HP"`인지 확인한 뒤, 전달된 `value`가 0 이하인지 검사하는 조건문을 활용해야 합니다. 참고 문서의 예제 흐름을 보면, `if name == "HP" then` 블록 내부에서 `value > 0 then return` 처리를 먼저 수행합니다. 이 `return`으로 인해 값이 양수일 경우 함수가 즉시 종료되고, 나머지 코드가 실행되지 않습니다. 따라서 `value > 0`이 아닌 경우(즉, 0 이하인 경우)에만 해당 분기 아래에 작성된 코드가 실행됩니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 서버에서 변경된 값이 클라이언트로 동기화될 때 클라이언트에서 호출되는 함수입니다. `OnSyncProperty` 함수를 호출하면 동기화된 프로퍼티의 이름과 값이 매개 변수로 넘어옵니다. 프로퍼티 동기화 설정을 **None**으로 하면 동기화가 이루어지지 않으므로 `OnSyncProperty` 함수는 호출되지 않습니다. ```lua Property: [Sync] number HP = 100 [Sync] number MP = 100 Method: [Client Only] void OnSyncProperty(string name,

[task] | single_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnMapLeave 이벤트 핸들러의 매개변수로 전달되는 Entity 객체를 활용해 특정 맵에서만 실행되는 로직을 작성하려면 어떤 조건문을 사용해야 하나요? [answer] | `OnMapLeave` 이벤트 핸들러는 엔티티가 맵에서 퇴장할 때 호출되며, 매개변수로 퇴장한 맵의 `Entity` 객체를 전달받습니다. 특정 맵에서만 로직을 실행하려면 이 매개변수 객체의 `Name` 프로퍼티를 확인하는 조건문을 사용해야 합니다. `Entity` 객체의 `Name` 프로퍼티가 목표 맵의 이름(예: `"map01"`)과 일치하는지 비교하는 `if` 문을 작성합니다. 아래는 `map01`에서 퇴장할 때만 특정 로직(플레이어 크기 감소)을 실행하는 예시입니다. ```lua void OnMapLeave(Entity [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | 예를 들어, 내 플레이어 엔티티가 **map01에서 map02로 이동**했다고 가정합니다. 이때 내 플레이어 엔티티의 스크립트 컴포넌트에 `OnMapEnter` 함수가 있었다면, map02로 이동할 때 내 플레이어 엔티티의 `OnMapEnter` 함수가 호출됩니다. 그런데 내 플레이어뿐만 아니라 다른 플레이어의 `OnMapEnter` 함수도 호출되는 것을 볼 수 있습니다. 클라이언트 상에서 보자면, 현재 내가 존재하는 맵에 다른 플레이어 엔티티가 생성된 것과 마찬가지이기 때문입니다. 하지만 서버상에서는 내 플레이어 엔티티가 map

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | 하위 엔티티를 재귀적으로 찾을 때 recursive 매개 변수를 설정해야 하는 이유를 3문장 이내로 설명하세요. [answer] | `GetChildByName` 함수의 두 번째 매개 변수인 `recursive`는 하위에 하위 엔티티까지 재귀적으로 찾을 것인지 여부를 결정합니다. 이 값을 `true`로 설정해야만 바로 아래 단계가 아닌 더 깊은 하위 레벨에 위치한 엔티티까지 탐색 범위가 확장됩니다. 기본값인 `false` 상태에서는 즉시 하위 엔티티까지만 검색되므로, 깊이가 있는 구조의 엔티티를 찾지 못합니다. [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

[task] | code [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnInitialize에서 self.Entity.Name을 변수에 저장하고 log로 출력하며, OnBeginPlay에서 해당 변수를 다시 log로 출력하여 생명주기 순서를 확인하는 스크립트를 작성해줘. [answer] | 요청하신 `OnInitialize`와 `OnBeginPlay`의 호출 순서를 확인하기 위한 스크립트입니다. `OnInitialize`에서 엔티티 이름을 변수에 저장하고 로그를 출력한 후, `OnBeginPlay`에서 같은 변수를 다시 출력하면 `OnInitialize`가 먼저 실행되었음을 확인할 수 있습니다. ```lua Property: [None] string EntityName Method: [server only] void OnInitialize() { -- OnInitialize: 엔티티 생성 직후 호출 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서 스크립트를 활용하면 크리에이터만의 독창적인 월드를 자유자재로 만들 수 있습니다. 스크립트를 작성할 때는 필요에 따라 기본 이벤트 함수를 활용하게 됩니다. **기본 이벤트 함수**란 다른 함수에서 직접 호출하지 않아도 **특정 조건이 되면 자동으로 호출되는 함수**를 말합니다. 이번 과정에서는 기본 이벤트 함수의 종류와 호출 시점을 알아봅시다. # 기본 이벤트 함수 추가하기 기본 이벤트 함수를 추가해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Crea

[task] | code [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | OnInitialize에서 nil 참조 위험을 피하기 위해 다른 엔티티 참조를 하지 않고 self.Entity.TransformComponent.Position을 log로 출력하며, OnBeginPlay에서 _TimerService:SetTimerOnce를 사용해 1초 후 log로 "Start"를 출력하는 스크립트를 작성해줘. [answer] | 요청하신 조건을 만족하는 스크립트입니다. `OnInitialize`에서는 다른 엔티티나 컴포넌트 참조를 피하고 `self.Entity.TransformComponent.Position`만 안전하게 로그로 출력합니다. `OnBeginPlay`에서는 `_TimerService:SetTimerOnce`를 사용하여 1초 후 "Start"를 로그로 출력합니다. ```lua Method: [server only] void OnInitialize() { -- nil 참조 위험을 피하기 위해 다른 엔티티/컴포넌트 참조는 하지 않음 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | # 학습 과정 소개 메이플스토리 월드에서 스크립트를 활용하면 크리에이터만의 독창적인 월드를 자유자재로 만들 수 있습니다. 스크립트를 작성할 때는 필요에 따라 기본 이벤트 함수를 활용하게 됩니다. **기본 이벤트 함수**란 다른 함수에서 직접 호출하지 않아도 **특정 조건이 되면 자동으로 호출되는 함수**를 말합니다. 이번 과정에서는 기본 이벤트 함수의 종류와 호출 시점을 알아봅시다. # 기본 이벤트 함수 추가하기 기본 이벤트 함수를 추가해 봅시다. 1. **Workspace - MyDesk**의 콘텍스트 메뉴에서 **Crea

[task] | code [pass] | ⏳ 미판정 [title] | Maple GYM 만들기 Ⅱ [question] | UIManager 컴포넌트의 OnClickButton(any event) 이벤트 핸들러에서 event.Entity.Name 을 이용하여 버튼 이름을 추출하고, 해당 이름에 따라 SkillLevelText 또는 DnaLevelText 컴포넌트의 Text 속성을 업데이트하는 로직을 작성해줘. [answer] | 제공된 참고 문서에는 `UIManager`의 `OnClickButton()` 메서드가 `event.Entity.Name`을 받아 `buttonName` 변수에 저장하는 부분까지만 제시되어 있습니다. 문서에 따르면, `OnClickButton()` 이후에 `buttonName`의 값에 따라 `SkillLevelText`나 `DnaLevelText`를 어떻게 업데이트하는지에 대한 구체적인 코드나 로직은 포함되어 있지 않습니다. 또한 `SkillLevelText`와 `DnaLevelText`가 어떤 컴포넌트(예: `TextCompone [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | ```lua void SetShopInfo() { local skillGrade = math.floor(self.Stats.CurrentSkillGrade) local dnaGrade = math.floor(self.Stats.CurrentDnaGrade) self.SkillLevelText.Text = ("기술 레벨: "..skillGrade.."레벨") self.DnaLevelText.Text = ("DNA: "..self.Stats.DnaG

[task] | two_turn [pass] | ⏳ 미판정 [title] | MSW 기본 이벤트 함수 [question] | `OnBeginPlay`에서 다른 엔티티나 컴포넌트를 참조할 때 왜 `nil`이 나올 수 있으며, 이를 방지하기 위해 `OnInitialize`와 어떻게 조합해야 하는가? [answer] | `OnBeginPlay` 함수는 엔티티와 모든 컴포넌트가 생성된 후에 호출되므로, 다른 엔티티나 컴포넌트의 참조 자체는 가능합니다. 하지만 **각 컴포넌트 간의 `OnBeginPlay` 함수 호출 순서는 보장되지 않습니다.** 이 때문에 한 컴포넌트(예: ComponentC)의 `OnBeginPlay`에서 다른 컴포넌트(예: ComponentA)의 프로퍼티 값을 참조할 때, ComponentA의 `OnBeginPlay`가 아직 실행되지 않았거나 순서가 뒤쳐질 경우 해당 프로퍼티의 초기값(nil 또는 기본값)을 받게 됩니다. ## [followup] | 특정 컴포넌트 A가 `OnInitialize`에서 값을 설정하고, 컴포넌트 C가 `OnBeginPlay`에서 그 값을 참조하는 구체적인 mLua 코드 예제를 작성해 주세요. [followup_answer] | 컴포넌트 A는 `OnInitialize`에서 프로퍼티 값을 설정하고, 컴포넌트 C는 `OnBeginPlay`에서 해당 값을 참조하는 mLua 코드 예제는 다음과 같습니다. ```lua -- ComponentA Property: [Sync] string B = "" Method: [server only] void OnInitialize() { self.B = "Hello" log(self.B) } -- ComponentC Property: Method: [Server Only] void OnBeginPla [scores] | [judge_reason] | [source_doc] | 본격적으로 로직이 시작되는 시점(`OnInitialize` 함수 호출 이후, `OnUpdate` 호출 직전)에 1회 호출되는 함수입니다. 엔티티의 `OnBeginPlay` 함수는 다른 엔티티와 컴포넌트가 모두 생성된 뒤에 호출됩니다. 동적으로 생성된 엔티티도 해당 엔티티의 컴포넌트가 모두 생성된 후에 `OnBeginPlay` 함수가 호출됩니다. 그러므로 `OnInitialize` 함수와는 달리 `OnBeginPlay` 함수는 다른 엔티티 및 컴포넌트의 참조가 보장됩니다. ```lua void OnBeginPlay() { lo

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | OnBeginPlay()에서 GetChildByName()을 사용해 "EntityD"와 "EntityJ"를 참조하는 mLua 코드만 출력하고, 설명은 주석으로 작성하세요. [answer] | ```lua Method: [server only] void OnBeginPlay() { -- 자기 자신이 적용된 엔티티를 참조합니다. local myEntity = self.Entity -- 바로 아래 단계의 하위 엔티티 중 이름이 "EntityD"인 엔티티를 찾습니다. local entityD = myEntity:GetChildByName("EntityD") -- 찾은 엔티티의 이름을 로그로 출력합니다. log(entityD.Name) -- 하위에 하위 엔티티까지 재 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

[task] | instruction_following [pass] | ⏳ 미판정 [title] | 엔티티와 컴포넌트 참조 [question] | Entity:GetChildByName() 함수의 매개 변수와 반환값을 2단 표로 정리해서 알려주세요. [answer] | `Entity:GetChildByName()` 함수의 매개 변수와 반환값은 다음과 같습니다. ### 매개 변수 | 매개 변수 | 타입 | 설명 | | :--- | :--- | :--- | | `name` | `string` | 찾고자 하는 하위 엔티티의 이름을 넘겨줍니다. | | `recursive` | `bool` | 하위에 하위 엔티티를 재귀적으로 계속 찾을 것인지를 설정합니다.<br>`true`일 경우 하위에 하위 엔티티까지 재귀적으로 찾습니다.<br>`false`일 경우 바로 아래 단계까지만 찾습니다.<br>옵셔널 매개 [followup] | [followup_answer] | [scores] | [judge_reason] | [source_doc] | Entity.Children처럼 하위 엔티티를 참조하는 또 다른 방법을 알아봅시다. Entity:GetChildByName()은 하위 엔티티 중 매개 변수로 넘겨진 값과 같은 이름의 엔티티를 반환하는 함수입니다. 따라서 Entity.Children처럼 모든 하위 엔티티를 받아온 후 반복문을 통해 원하는 엔티티를 찾을 필요가 없습니다. 찾고자 하는 엔티티의 이름만 알고 있다면 훨씬 간단하게 하위 엔티티를 가져올 수 있습니다. * **매개 변수** * GetChildByName 함수는 두 개의 매개 변수를 받을 수 있습니다.

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