← 목록

mLua · Nemotron-CC 리프레이즈 (CPT)

총 8,200개 · 페이지 246/274
🔀 랜덤
불러오는 중…

[task] | extract_knowledge [title] | UI 만들기 [category] | Guides [rephrased] | # 트리거 기반 UI 표시 제어 본 절에서는 플레이어(또는 다른 엔티티)가 지정된 트리거 영역에 진입하거나 벗어날 때, 클라이언트 측에서 특정 UI를 활성화하거나 비활성화하는 방법을 다룹니다. 이 패턴은 아바타 미리보기, 상호작용 힌트 등 상황별 UI 표시에 활용됩니다. ## 1. 개념 mLua 스크립트에서 UI를 제어하는 핵심은 `DisplayComponent`의 `Enable` 속성을 변경하는 것입니다. * **TriggerComponent**: 엔티티가 특정 영역에 들어오거나 나갈 때 이벤트를 발생시킵니다. * * [original] | 신에 배치된 엔티티와 충돌하면, 애니메이션 재생 UI가 나타날 수 있게 만들어봅시다. 1. 플레이어와 충돌할 수 있는 엔티티를 골라 배치합니다. 이름을 **display**로 변경합니다. * RUID: 5338cb745c644b2d83bf16127b52b292 2. **TriggerComponent**를 추가하고, Collider를 엔티티 크기에 맞게 조정합니다. 3. 새로운 **DisplayComponent**를 생성하고, **display** 엔티티에 추가합니다. 4. 새로운 **Sh [chunk_id] | Guides:1140:1

[task] | extract_knowledge [title] | 장애물 만들기 [category] | Guides [rephrased] | # Model_Obstacle의 배치 및 소환 본 절에서는 게임 시작 시점에 `Model_Obstacle` 객체를 특정 간격으로 배치하여 5개 소환하는 로직을 구현하는 방법을 다룹니다. ### 1. 개념 설명 장애물 객체를 동적으로 생성하고, 생성된 엔티티를 관리하기 위해 테이블 타입의 프로퍼티를 사용합니다. 게임 로직 컴포넌트(`GameLogic`)의 초기화 단계(`OnBeginPlay`)에서 `SpawnService`를 호출하여 모델 ID에 해당하는 엔티티를 월드에 배치하고, 생성된 참조를 배열에 저장하여 향후 업데이트나 제 [original] | 게임이 실행될 때 만든 Model_Obstacle를 5개 소환하도록 만들어 봅시다. 1. 새로운 **GameLogic**을 생성합니다. 2. 새로운 table 타입의 **obstacles** 프로퍼티를 생성합니다. ```lua Property: [None] table obstacles = {} ``` 3. `OnBeginPlay()` 와 `Init()` 함수를 추가합니다. `SpawnService:SpawnByModelId()`를 활용해 장애물을 불러올 수 있도록 아래와 같이 작성합니다. [chunk_id] | Guides:1141:1

[task] | knowledge_list [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | 제시된 문서 원문에 포함된 정보만을 기반으로 핵심 사실을 추출하여 정리한 목록입니다. 1. `Model_Obstacle` 엔티티를 Scene에 배치하고, 기존 엔티티를 삭제한 후 Hierarchy의 컨텍스트 메뉴에서 **Create Model From Entity**를 사용하여 모델화하는 것을 권장합니다. 2. 새로운 `TouchAndDieComponent`를 생성하여 Top, Bottom 엔티티에 추가합니다. 3. `FishPlayerComponent`에 실행 공간 제약이 없는 `[None]` 속성으로 `boolean` 타 [original] | 1. Scene에 **Model_Obstacle**을 배치합니다. 2. 새로운 **TouchAndDieComponent**를 생성하고, Top, Bottom 엔티티에 추가합니다. 3. Hierarchy에서 Model_Obstacle의 콘텍스트 메뉴를 **Create Model From Entity**를 눌러 모델화 합니다. > **Tip.** > 기존의 Model_Obstacle을 지운 뒤에 모델화를 권장합니다. 4. FishPlayerComponent에서 새로운 **isDead** 프로퍼티를 생성합니다. [chunk_id] | Guides:1142:1

[task] | knowledge_list [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | 1. `GameLogic` 컴포넌트의 `OnBeginPlay()` 메서드는 `[client only]` 실행 공간 제약이 적용되며, 함수 내부에서 `for i = 1, 5 do` 루프를 통해 5개의 장애물을 생성합니다. 2. `OnBeginPlay()` 함수 내에서 `_SpawnService:SpawnByModelId()` API를 사용하여 장애물 엔티티를 생성할 때, 모델 ID는 `_EntryService:GetModelIdByName("Model_Obstacle")`으로 조회하고, 이름은 `"obstacle"`, 위치는 `Vec [original] | # 죽음 판정 1. **GameLogic**의 `OnBeginPlay()` 함수를 수정합니다. 풀링된 장애물 중 마지막 인덱스의 다음 인덱스로 초기화할 수 있도록 아래와 같이 코드를 변경합니다. ```lua [client only] void OnBeginPlay() { for i = 1, 5 do local entity = _SpawnService:SpawnByModelId(_EntryService:GetModelIdByName("Model_Obstacle"), "obs [chunk_id] | Guides:1142:0

[task] | wikipedia [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | # 죽음 판정 본 섹션은 메이플스토리 월드(MapleStory Worlds)의 mLua 스크립트 언어를 사용하여 '플래피 피쉬 리메이크' 프로젝트에서 죽음 판정 로직을 구현하는 방법을 설명합니다. 이 과정은 게임 로직 컴포넌트(`GameLogic`)와 장애물 컴포넌트(`ObstacleComponent`)의 특정 함수를 수정하여 이루어집니다. ## 1. GameLogic 컴포넌트의 초기화 로직 수정 첫째, `GameLogic` 컴포넌트의 `OnBeginPlay()` 함수를 수정하여 풀링된 장애물 엔티티의 인덱스 초기화 방식을 변 [original] | # 죽음 판정 1. **GameLogic**의 `OnBeginPlay()` 함수를 수정합니다. 풀링된 장애물 중 마지막 인덱스의 다음 인덱스로 초기화할 수 있도록 아래와 같이 코드를 변경합니다. ```lua [client only] void OnBeginPlay() { for i = 1, 5 do local entity = _SpawnService:SpawnByModelId(_EntryService:GetModelIdByName("Model_Obstacle"), "obs [chunk_id] | Guides:1142:0

[task] | wikipedia [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | # 플래피 피쉬 리메이크: 시작 및 종료 로직 구현 본 문서는 메이플스토리 월드 스크립트 언어인 mLua를 사용하여 '플래피 피쉬 리메이크' 게임의 플레이 시작과 종료 상태를 제어하는 방법을 설명합니다. 이 과정에서는 `FishPlayerComponent` 컴포넌트를 수정하여 게임 진행 상태(`started`)를 관리하고, 해당 상태에 따라 플레이어의 이동과 카메라 효과를 제어합니다. ## 1. 시작 상태 프로퍼티 추가 먼저 `FishPlayerComponent`에 게임이 시작되었는지를 나타내는 논리형(`boolean`) 프로 [original] | 1. **FishPlayerComponent**에 새로운 **started** 프로퍼티를 생성합니다. ```lua [None] boolean started = false ``` 2. `OnUpdate` 함수 내용을 수정합니다. ```lua if not self.isDead and self.started then self:Move(delta) end self:CheckPosY() ``` 3. `Floating()` 함수 첫 줄에 아래 내용을 작성합 [chunk_id] | Guides:1142:2

[task] | diverse_qa [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | 질문: FishPlayerComponent에 시작 여부를 관리하기 위해 생성해야 하는 프로퍼티의 이름과 초기값은 무엇인가요? 답변: 프로퍼티의 이름은 started이며, 초기값은 false입니다. 질문: FishPlayerComponent의 started 프로퍼티를 정의하는 mLua 코드 블록은 어떻게 작성하나요? 답변: 다음과 같이 작성합니다. ```lua [None] boolean started = false ``` 질문: OnUpdate 함수에서 캐릭터가 이동(Move)하기 위해 만족해야 하는 두 가지 조건은 무엇인가요? [original] | 1. **FishPlayerComponent**에 새로운 **started** 프로퍼티를 생성합니다. ```lua [None] boolean started = false ``` 2. `OnUpdate` 함수 내용을 수정합니다. ```lua if not self.isDead and self.started then self:Move(delta) end self:CheckPosY() ``` 3. `Floating()` 함수 첫 줄에 아래 내용을 작성합 [chunk_id] | Guides:1142:2

[task] | distill [title] | 점수 획득 구현하기 [category] | Guides [rephrased] | # 점수 획득 구현 **Model_Obstacle**의 부모 엔티티에 `TriggerComponent`를 추가하여 플레이어와 충돌 시 점수를 획득하도록 구현합니다. ## 1. 충돌체 설정 * **위치**: `Workspace > MyDesk > Model_Obstacle` * **구성**: `TriggerComponent` 추가 * **Collider 설정**: * Type: `Box` * Size: `X 0.05`, `Y 20` (장애물 중앙을 세로로 통과하는 형태) * **주의사항**: ` [original] | # 점수 획득 구현 Model_Obstacle의 부모 엔티티에 충돌체를 추가합니다. 해당 충돌체와 플레이어 엔티티가 충돌할 때 점수를 획득할 수 있도록 만들어 봅시다. 1. **Workspace - MyDesk - Model_Obstacle**에 **TriggerComponent**를 추가합니다. 2. **[Edit]** 버튼을 눌러 Collider를 추가합니다. 장애물의 중앙을 통과하도록 길게 세로로 Collider를 만듭니다. * ColiderType: Box * BoxSize: X 0.05, Y 20 [chunk_id] | Guides:1143:0

[task] | knowledge_list [title] | 애니메이션 재생 [category] | Guides [rephrased] | 제시된 문서 내용에만 기반하여 핵심 사실을 추출한 목록입니다. 1. `ActionNameStruct`는 `string` 타입의 `CoreActionName`과 `PartsActionName` 프로퍼티를 포함하는 StructType으로 정의됩니다. 2. `ActionNameLogic` 스크립트는 `[None]` 동기화 속성을 가진 `table` 타입의 `AttackActionType_OneHand_Names`, `AttackActionType_TwoHand_Names`, `AttackActionType_StaffWand_Names` [original] | # 학습 과정 소개 무기 버튼을 누르면 아바타가 공격 스킬을 재생하도록 만들어 봅시다. # ActionNameStruct 만들기 1. **Workspace - MyDesk - Create Scripts - Create StructType**에서 **ActionNameStruct**를 생성합니다. 2. **CoreActionName, PartsActionName** 프로퍼티를 추가합니다. ```lua Property: string CoreActionName = "" string PartsAc [chunk_id] | Guides:1144:0

[task] | wikipedia [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | # 플래피 피쉬 리메이크: 시작 및 종료 로직 구현 본 문서는 메이플스토리 월드(MapleStory Worlds)의 mLua 스크립트 언어를 사용하여 '플래피 피쉬 리메이크' 게임의 시작과 종료 로직을 구현하는 방법을 단계별로 안내합니다. 이 과정에서는 장애물 충돌 시 게임 오버 처리, 플레이어가 일정 높이 이하로 떨어질 경우의 판정, 그리고 시각적 피드백을 위한 카메라 연출 효과를 포함합니다. ## 장애물 충돌 시 게임 오버 구현 장애물에 플레이어가 부딪혔을 때 게임을 종료하고 초기 상태로 복귀시키기 위해 다음 단계를 따릅니 [original] | 1. Scene에 **Model_Obstacle**을 배치합니다. 2. 새로운 **TouchAndDieComponent**를 생성하고, Top, Bottom 엔티티에 추가합니다. 3. Hierarchy에서 Model_Obstacle의 콘텍스트 메뉴를 **Create Model From Entity**를 눌러 모델화 합니다. > **Tip.** > 기존의 Model_Obstacle을 지운 뒤에 모델화를 권장합니다. 4. FishPlayerComponent에서 새로운 **isDead** 프로퍼티를 생성합니다. [chunk_id] | Guides:1142:1

[task] | knowledge_list [title] | 점수 획득 구현하기 [category] | Guides [rephrased] | 1. Model_Obstacle의 부모 엔티티에 TriggerComponent 컴포넌트를 추가해야 하며, 해당 충돌체와 플레이어 엔티티가 충돌하는 시점에 점수 획득 로직이 실행됩니다. 2. TriggerComponent의 Collider 설정에서 ColliderType은 Box, BoxSize는 X 0.05, Y 20으로 지정하여 장애물 중앙을 세로로 관통하는 형태를 만들어야 합니다. 3. 충돌 감지를 위해 DefaultPlayer와 ModelObstacle 모두 CollisionGroup이 TriggerBox로 설정되어 있어야 합 [original] | # 점수 획득 구현 Model_Obstacle의 부모 엔티티에 충돌체를 추가합니다. 해당 충돌체와 플레이어 엔티티가 충돌할 때 점수를 획득할 수 있도록 만들어 봅시다. 1. **Workspace - MyDesk - Model_Obstacle**에 **TriggerComponent**를 추가합니다. 2. **[Edit]** 버튼을 눌러 Collider를 추가합니다. 장애물의 중앙을 통과하도록 길게 세로로 Collider를 만듭니다. * ColiderType: Box * BoxSize: X 0.05, Y 20 [chunk_id] | Guides:1143:0

[task] | wikipedia [title] | 장애물 만들기 [category] | Guides [rephrased] | # 장애물 생성 및 재활용 로직 게임에 필요한 모든 장애물을 한 번에 배치하거나 개별적으로 소환하는 방식은 시스템 성능에 부하를 유발할 수 있습니다. 이를 방지하기 위해 일정 수의 엔티티를 생성한 뒤 순환적으로 재사용하는 방식을 적용하는 것이 권장됩니다. 본 가이드에서는 5개의 장애물 엔티티를 재활용하여 게임 플레이를 유지하는 방법을 설명합니다. 구체적으로, 5개의 엔티티를 초기화한 후 가장 먼저 생성된 장애물을 화면 뒤쪽(생성 대기 위치)으로 이동시켜 새로운 장애물로 다시 활용하도록 구성합니다. 구현을 위해 `GameLogic [original] | 게임에 필요한 장애물을 모두 배치하거나, 한 번에 불러오는 방식은 성능에 부하를 줄 수 있습니다. 일정 개수의 엔티티를 만들어 다시 사용하는 것이 성능 향상에 도움이 됩니다. 5개의 장애물을 재활용해봅시다. 5개의 엔티티를 불러온 뒤, 가장 먼저 생성된 장애물을 맨 뒤로 가져와 생성할 수 있도록 합니다. 1. **GameLogic**에 새로운 **intervalX, startPosX, index** 프로퍼티를 생성합니다. ```lua Property: [None] number intervalX = 4 [chunk_id] | Guides:1141:2

[task] | diverse_qa [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | 질문: 플래피 피쉬 리메이크 구현 시 Model_Obstacle을 모델화하기 전에 권장되는 작업은 무엇인가요? 답변: 기존의 Model_Obstacle 엔티티를 지운 뒤에 모델화하는 것이 권장됩니다. 질문: FishPlayerComponent에서 플레이어의 사망 상태를 관리하기 위해 추가해야 하는 프로퍼티의 이름과 타입, 기본값은 무엇인가요? 답변: 이름은 `isDead`, 타입은 `boolean`, 기본값은 `false`입니다. 질문: `Die()` 함수 내에서 `isDead`가 이미 `true`인 경우 함수는 어떻게 동작하나 [original] | 1. Scene에 **Model_Obstacle**을 배치합니다. 2. 새로운 **TouchAndDieComponent**를 생성하고, Top, Bottom 엔티티에 추가합니다. 3. Hierarchy에서 Model_Obstacle의 콘텍스트 메뉴를 **Create Model From Entity**를 눌러 모델화 합니다. > **Tip.** > 기존의 Model_Obstacle을 지운 뒤에 모델화를 권장합니다. 4. FishPlayerComponent에서 새로운 **isDead** 프로퍼티를 생성합니다. [chunk_id] | Guides:1142:1

[task] | distill [title] | 애니메이션 재생 [category] | Guides [rephrased] | # UI에서 아바타 애니메이션 재생하기 무기 버튼을 누르면 아바타가 공격 스킬 애니메이션을 재생하도록 구성합니다. ## 1. `ActionNameStruct` 생성 `Create StructType`으로 `ActionNameStruct`를 생성하고 아래 프로퍼티를 정의합니다. ```lua Property: string CoreActionName = "" string PartsActionName = "" ``` ## 2. `ActionNameLogic` 스크립트 구성 ### 프로퍼티 무기 유형별 애니메이션 이름 테이블을 정의 [original] | # 학습 과정 소개 무기 버튼을 누르면 아바타가 공격 스킬을 재생하도록 만들어 봅시다. # ActionNameStruct 만들기 1. **Workspace - MyDesk - Create Scripts - Create StructType**에서 **ActionNameStruct**를 생성합니다. 2. **CoreActionName, PartsActionName** 프로퍼티를 추가합니다. ```lua Property: string CoreActionName = "" string PartsAc [chunk_id] | Guides:1144:0

[task] | distill [title] | 애니메이션 재생 [category] | Guides [rephrased] | **UI에서 아바타 애니메이션 재생하기 (연장)** `ActionNameStruct`를 반환하여 특정 무기 타입에 맞는 유효한 공격 애니메이션 이름을 가져오는 메서드입니다. **Method: GetActionNameDatas** * **시그니처**: `[client only] ActionNameStruct GetActionNameDatas (string dataID)` * **동작**: `dataID`에 따라 해당 무기류(1손, 활, 지팡이/법봉, 2손)의 유효한 랜덤 애니메이션 이름을 `CoreActionName`과 ` [original] | ```lua [client only] ActionNameStruct GetActionNameDatas (string dataID) { local randomName ="" if dataID == "sword" or dataID == "dagger" then randomName = self:GetRandomButValidName(self.AttackActionType_OneHand_Names) local data = Action [chunk_id] | Guides:1144:1

[task] | diverse_qa [title] | 애니메이션 재생 [category] | Guides [rephrased] | 질문: 이 학습 과정의 최종 목표는 무엇인가요? 답변: 무기 버튼을 누르면 아바타가 공격 스킬을 재생하도록 만드는 것입니다. 질문: ActionNameStruct를 생성하는 정확한 경로는 무엇인가요? 답변: Workspace - MyDesk - Create Scripts - Create StructType 경로에서 생성합니다. 질문: ActionNameStruct에 추가해야 하는 프로퍼티의 이름과 타입을 각각 무엇으로 지정해야 하나요? 답변: CoreActionName과 PartsActionName이라는 이름의 string 타입 [original] | # 학습 과정 소개 무기 버튼을 누르면 아바타가 공격 스킬을 재생하도록 만들어 봅시다. # ActionNameStruct 만들기 1. **Workspace - MyDesk - Create Scripts - Create StructType**에서 **ActionNameStruct**를 생성합니다. 2. **CoreActionName, PartsActionName** 프로퍼티를 추가합니다. ```lua Property: string CoreActionName = "" string PartsAc [chunk_id] | Guides:1144:0

[task] | extract_knowledge [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | # 시작 및 종료 상태 관리 (Started State Management) 본 절에서는 `FishPlayerComponent`를 사용하여 게임 루프의 시작과 종료(사망) 상태를 관리하는 방법을 다룹니다. `started` 프로퍼티를 통해 플레이어가 조작을 시작했는지 여부를 추적하고, 사망 시 초기화하여 재시도 로직을 구현합니다. ## 1. 개념 설명 플래피 피쉬 류의 게임에서는 플레이어의 첫 입력 또는 특정 트리거 이후부터 물리 이동(`Move`)을 허용해야 합니다. 또한, 캐릭터가 사망하면 상태가 초기화되어야 다음 라운드에 [original] | 1. **FishPlayerComponent**에 새로운 **started** 프로퍼티를 생성합니다. ```lua [None] boolean started = false ``` 2. `OnUpdate` 함수 내용을 수정합니다. ```lua if not self.isDead and self.started then self:Move(delta) end self:CheckPosY() ``` 3. `Floating()` 함수 첫 줄에 아래 내용을 작성합 [chunk_id] | Guides:1142:2

[task] | knowledge_list [title] | 애니메이션 재생 [category] | Guides [rephrased] | 제시된 문서 내용에서 추출한 핵심 사실은 다음과 같습니다. 1. `GetActionNameDatas` 메서드는 `[client only]` 실행 공간 제약 하에 동작하며, 매개변수로 `dataID` (string 타입)를 받아 `ActionNameStruct` 타입 또는 `nil`을 반환합니다. 2. `dataID`가 `"sword"` 또는 `"dagger"`인 경우, `self.AttackActionType_OneHand_Names` 리스트에서 `self:GetRandomButValidName` 메서드를 통해 무작위且有効한 이름 [original] | ```lua [client only] ActionNameStruct GetActionNameDatas (string dataID) { local randomName ="" if dataID == "sword" or dataID == "dagger" then randomName = self:GetRandomButValidName(self.AttackActionType_OneHand_Names) local data = Action [chunk_id] | Guides:1144:1

[task] | diverse_qa [title] | 애니메이션 재생 [category] | Guides [rephrased] | 질문: `GetActionNameDatas` 메서드의 실행 공간은 무엇인가요? 답변: 이 메서드는 `[client only]` 실행 공간에서 동작합니다. 질문: `dataID` 파라미터의 값이 "sword" 또는 "dagger"인 경우, 어떤 변수에서 무작위 이름을 선택하여 반환합니까? 답변: `self.AttackActionType_OneHand_Names` 변수에서 `GetRandomButValidName` 메서드를 호출하여 이름을 선택합니다. 질문: `dataID`가 "bow"일 때 생성되는 `ActionNameStruct [original] | ```lua [client only] ActionNameStruct GetActionNameDatas (string dataID) { local randomName ="" if dataID == "sword" or dataID == "dagger" then randomName = self:GetRandomButValidName(self.AttackActionType_OneHand_Names) local data = Action [chunk_id] | Guides:1144:1

[task] | distill [title] | 애니메이션 재생 [category] | Guides [rephrased] | # UI에서 아바타 애니메이션 재생하기 ## 1. 이벤트 정의 `UIWeaponSelectEvent`를 생성하고 아래 프로퍼티를 추가합니다. ```lua UIWeaponItemComponentRef EventSender = nil ``` ## 2. 버튼 클릭 처리 (`UIAvatarPreviewComponent`) `OnSelectButton` 메서드를 구현하여 이벤트를 전송하고 `SkillDatas`에서 데이터를 조회합니다. ```lua [client only] void OnSelectButton (UIWeaponItemC [original] | # UIWeaponSelectEvent 만들기 1. **Workspace - MyDesk - Create Scripts - Create EventType**에서 **UIWeaponSelectEvent**를 생성합니다. 2. **EventSender** 프로퍼티를 추가합니다. ```lua UIWeaponItemComponentRef EventSender = nil ``` # 버튼 기능 만들기 1. **UIAvatarPreviewComponent**에 새로운 `OnSelectButton()` 함수를 생성합니 [chunk_id] | Guides:1144:2

[task] | diverse_qa [title] | 점수 획득 구현하기 [category] | Guides [rephrased] | 질문: 점수를 획득하기 위해 Model_Obstacle의 부모 엔티티에 어떤 컴포넌트를 추가해야 하나요? 답변: TriggerComponent를 추가해야 합니다. 질문: 장애물 충돌체를 만들기 위해 추가하는 Collider의 유형(ColliderType)은 무엇이며, BoxSize의 X와 Y 값은 각각 얼마인가요? 답변: ColliderType은 Box이며, BoxSize의 X 값은 0.05, Y 값은 20입니다. 질문: TriggerEnterEvent 핸들러 내에서 플레이어의 점수를 증가시키기 위해 확인하는 조건은 무엇인가요? [original] | # 점수 획득 구현 Model_Obstacle의 부모 엔티티에 충돌체를 추가합니다. 해당 충돌체와 플레이어 엔티티가 충돌할 때 점수를 획득할 수 있도록 만들어 봅시다. 1. **Workspace - MyDesk - Model_Obstacle**에 **TriggerComponent**를 추가합니다. 2. **[Edit]** 버튼을 눌러 Collider를 추가합니다. 장애물의 중앙을 통과하도록 길게 세로로 Collider를 만듭니다. * ColiderType: Box * BoxSize: X 0.05, Y 20 [chunk_id] | Guides:1143:0

[task] | extract_knowledge [title] | 시작, 종료 구현하기 [category] | Guides [rephrased] | # 죽음 판정 구현 본 절에서는 게임 로직(`GameLogic`)과 장애물(`Obstacle`) 사이의 상호작용을 통해 장애물이 소모되었을 때 새 장애물을 생성(풀링)하고, 이를 위해 인덱스를 관리하는 방법을 다룹니다. ## 1. 개념 설명 * **장애물 풀링(Obstacle Pooling):** 게임 시작 시 미리 생성된 장애물 엔티티 리스트(`self.obstacles`)를 유지합니다. * **인덱스 관리(`self.index`):** 현재 활성화되어야 할 장애물의 위치를 나타내는 인덱스입니다. * 초기화 [original] | # 죽음 판정 1. **GameLogic**의 `OnBeginPlay()` 함수를 수정합니다. 풀링된 장애물 중 마지막 인덱스의 다음 인덱스로 초기화할 수 있도록 아래와 같이 코드를 변경합니다. ```lua [client only] void OnBeginPlay() { for i = 1, 5 do local entity = _SpawnService:SpawnByModelId(_EntryService:GetModelIdByName("Model_Obstacle"), "obs [chunk_id] | Guides:1142:0

[task] | extract_knowledge [title] | 장애물 만들기 [category] | Guides [rephrased] | # 장애물 풀링(Pooling) 구현 게임 내에서 장애물과 같은 반복적인 엔티티를 무한히 생성하거나 한 번에 모두 배치하면 클라이언트 및 서버의 성능에 부하가 발생할 수 있습니다. 이를 방지하기 위해 고정된 개수의 엔티티를 생성한 후, 화면 밖으로 나간 엔티티를 재사용하는 '풀링(Pooling)' 기법을 적용합니다. 본 절에서는 5개의 장애물 엔티티를 생성하고, 플레이어가 진행함에 따라 가장 뒤에 있는 장애물을 앞으로 이동시켜 재활용하는 방식을 다룹니다. ## 개념 설명 1. **초기 생성**: 게임 시작 시 총 5개의 장애 [original] | 게임에 필요한 장애물을 모두 배치하거나, 한 번에 불러오는 방식은 성능에 부하를 줄 수 있습니다. 일정 개수의 엔티티를 만들어 다시 사용하는 것이 성능 향상에 도움이 됩니다. 5개의 장애물을 재활용해봅시다. 5개의 엔티티를 불러온 뒤, 가장 먼저 생성된 장애물을 맨 뒤로 가져와 생성할 수 있도록 합니다. 1. **GameLogic**에 새로운 **intervalX, startPosX, index** 프로퍼티를 생성합니다. ```lua Property: [None] number intervalX = 4 [chunk_id] | Guides:1141:2

[task] | wikipedia [title] | 애니메이션 재생 [category] | Guides [rephrased] | # UI에서 아바타 애니메이션 재생하기 본 가이드는 사용자 인터페이스(UI)의 무기 버튼을 눌렀을 때, 캐릭터(아바타)가 해당 무기에 맞는 공격 스킬 애니메이션을 재생하도록 스크립트를 구성하는 방법을 다룹니다. ## ActionNameStruct 생성 및 프로퍼티 설정 먼저, 애니메이션 이름 데이터를 구조화하기 위해 `ActionNameStruct`를 생성합니다. 에디터의 `Workspace - MyDesk - Create Scripts - Create StructType` 경로를 통해 `ActionNameStruct`를 추가 [original] | # 학습 과정 소개 무기 버튼을 누르면 아바타가 공격 스킬을 재생하도록 만들어 봅시다. # ActionNameStruct 만들기 1. **Workspace - MyDesk - Create Scripts - Create StructType**에서 **ActionNameStruct**를 생성합니다. 2. **CoreActionName, PartsActionName** 프로퍼티를 추가합니다. ```lua Property: string CoreActionName = "" string PartsAc [chunk_id] | Guides:1144:0

[task] | wikipedia [title] | 점수 획득 구현하기 [category] | Guides [rephrased] | # 점수 획득 구현 플래피 피쉬 리메이크 프로젝트에서 점수 획득 기능은 플레이어 엔티티가 장애물(`Model_Obstacle`)을 통과할 때 발동되는 트리거 이벤트 기반으로 구현됩니다. 이 과정은 `Model_Obstacle`의 부모 엔티티에 충돌 감지 기능을 부여하고, 해당 충돌 시 플레이어의 점수를 증가시키는 로직을 연결하는 것으로 구성됩니다. 구현을 위해 먼저 `Workspace - MyDesk - Model_Obstacle` 엔티티에 `TriggerComponent`를 추가합니다. 이 컴포넌트를 편집하여 Collider를 [original] | # 점수 획득 구현 Model_Obstacle의 부모 엔티티에 충돌체를 추가합니다. 해당 충돌체와 플레이어 엔티티가 충돌할 때 점수를 획득할 수 있도록 만들어 봅시다. 1. **Workspace - MyDesk - Model_Obstacle**에 **TriggerComponent**를 추가합니다. 2. **[Edit]** 버튼을 눌러 Collider를 추가합니다. 장애물의 중앙을 통과하도록 길게 세로로 Collider를 만듭니다. * ColiderType: Box * BoxSize: X 0.05, Y 20 [chunk_id] | Guides:1143:0

[task] | wikipedia [title] | 애니메이션 재생 [category] | Guides [rephrased] | ## UI에서 아바타 애니메이션 재생하기: 애니메이션 재생 이 가이드는 `ActionNameStruct` 타입을 사용하여 특정 무기 유형에 맞는 유효한 애니메이션 이름 조합을 반환하는 로직을 다룹니다. 제공된 예제는 클라이언트에서만 실행되는 `[client only]` 메서드 `GetActionNameDatas`를 정의하며, 입력으로 받은 `string` 타입의 `dataID` 값에 따라 해당 무기 계열에 속하는 랜덤한 애니메이션 이름을 선택하여 반환합니다. 메서드는 먼저 로컬 변수 `randomName`을 빈 문자열로 초기화합 [original] | ```lua [client only] ActionNameStruct GetActionNameDatas (string dataID) { local randomName ="" if dataID == "sword" or dataID == "dagger" then randomName = self:GetRandomButValidName(self.AttackActionType_OneHand_Names) local data = Action [chunk_id] | Guides:1144:1

[task] | distill [title] | 무기 목록 불러오기 [category] | Guides [rephrased] | # Scroll_Item 모델 제작 및 SkillDatas 연동 `Scroll_Layout`에 표시할 버튼(`Scroll_Item`)을 제작하여 `SkillDatas` 내용을 모델로 불러옵니다. ## 1. Scene 구성 1. **Button** 추가 및 이름 변경: `Scroll_Item` - `ImageRUID`: `5813efbad2403444786f6955f97649fb` - `RaycastTarget`: enable 2. `Scroll_Item`에 **UIWeaponItemComponent** 추가 3. 자식 [original] | Model_Scroll_Item을 만들고, SkillDatas의 내용을 모델에 불러올 수 있도록 만들어 봅시다. # Scroll_Item 모델 제작 Scroll_Layout UI에 나타날 버튼을 만들어 봅시다. 1. Scene에 **Button**을 추가하고, 이름을 **Scroll_Item**으로 변경합니다. * ImageRUID: 5813efbad2403444786f6955f97649fb * RaycastTarget: enable 2. 새로운 **UIWeaponItemComponent**를 **Scroll_ [chunk_id] | Guides:1145:0

[task] | wikipedia [title] | 무기 목록 불러오기 [category] | Guides [rephrased] | # UI에서 아바타 애니메이션 재생하기: 무기 목록 불러오기 본 가이드는 `Model_Scroll_Item` 컴포넌트를 생성하여 `SkillDatas`의 데이터를 모델에 로드하는 방법을 설명합니다. ## Scroll_Item 모델 제작 `Scroll_Layout` UI에 표시될 버튼을 만들기 위해 다음 절차를 따릅니다. 첫째, 씬(Scene)에 **Button**을 추가하고 이름을 **Scroll_Item**으로 변경합니다. 이 버튼의 속성으로 `ImageRUID`는 `5813efbad2403444786f6955f97649f [original] | Model_Scroll_Item을 만들고, SkillDatas의 내용을 모델에 불러올 수 있도록 만들어 봅시다. # Scroll_Item 모델 제작 Scroll_Layout UI에 나타날 버튼을 만들어 봅시다. 1. Scene에 **Button**을 추가하고, 이름을 **Scroll_Item**으로 변경합니다. * ImageRUID: 5813efbad2403444786f6955f97649fb * RaycastTarget: enable 2. 새로운 **UIWeaponItemComponent**를 **Scroll_ [chunk_id] | Guides:1145:0

[task] | diverse_qa [title] | 애니메이션 재생 [category] | Guides [rephrased] | 질문: Workspace의 MyDesk에서 UIWeaponSelectEvent를 생성하기 위해 어떤 경로를 따라가야 하나요? 답변: Workspace - MyDesk - Create Scripts - Create EventType 경로를 따라가야 합니다. 질문: UIWeaponSelectEvent에 추가하는 EventSender 프로퍼티의 데이터 타입은 무엇인가요? 답변: UIWeaponItemComponentRef 입니다. 질문: OnSelectButton 함수의 실행 공간은 어디로 설정되어야 하나요? 답변: [client o [original] | # UIWeaponSelectEvent 만들기 1. **Workspace - MyDesk - Create Scripts - Create EventType**에서 **UIWeaponSelectEvent**를 생성합니다. 2. **EventSender** 프로퍼티를 추가합니다. ```lua UIWeaponItemComponentRef EventSender = nil ``` # 버튼 기능 만들기 1. **UIAvatarPreviewComponent**에 새로운 `OnSelectButton()` 함수를 생성합니 [chunk_id] | Guides:1144:2

[task] | diverse_qa [title] | 무기 목록 불러오기 [category] | Guides [rephrased] | 질문: Scroll_Layout UI에 나타날 버튼을 만들 때 추가해야 하는 컴포넌트 이름과 설정해야 할 이름은 무엇인가요? 답변: Scene에 Button을 추가하고 이름을 Scroll_Item으로 변경해야 합니다. 질문: Scroll_Item 버튼에 설정해야 하는 ImageRUID 값은 무엇인가요? 답변: ImageRUID 값은 5813efbad2403444786f6955f97649fb 입니다. 질문: Scroll_Item 버튼의 RaycastTarget 설정은 어떻게 되어야 하나요? 답변: RaycastTarget은 ena [original] | Model_Scroll_Item을 만들고, SkillDatas의 내용을 모델에 불러올 수 있도록 만들어 봅시다. # Scroll_Item 모델 제작 Scroll_Layout UI에 나타날 버튼을 만들어 봅시다. 1. Scene에 **Button**을 추가하고, 이름을 **Scroll_Item**으로 변경합니다. * ImageRUID: 5813efbad2403444786f6955f97649fb * RaycastTarget: enable 2. 새로운 **UIWeaponItemComponent**를 **Scroll_ [chunk_id] | Guides:1145:0

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