msw-defaultplayer
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMSW DefaultPlayer
MSW DefaultPlayer
DefaultPlayer 모델 파일 직접 조회/수정, 컴포넌트 관리, 이동/물리/HP/카메라 설정.
코스튬/아바타 장비는스킬을 참조. 코스튬은 DefaultPlayer뿐 아니라 모든 엔티티에 적용 가능하므로 별도 스킬로 분리되어 있다.msw-costume
直接查询/修改DefaultPlayer模型文件,管理组件,设置移动/物理/HP/相机参数。
服装/Avatar装备请参考技能。由于服装可应用于DefaultPlayer以外的所有实体,因此被单独拆分为独立技能。msw-costume
DefaultPlayer 개요
DefaultPlayer 概述
DefaultPlayer란?
什么是DefaultPlayer?
메이플스토리 월드 메이커(Maker)의 워크스페이스에 기본 제공되는 플레이어 캐릭터 모델이다.
- 모든 유저가 월드에 접속하면 이 모델을 기반으로 플레이어 엔티티가 생성된다.
- 의
DefaultUserEnterLeaveLogic프로퍼티에 사용할 모델 ID가 지정된다.PlayerUri
是冒险岛世界制作工具(Maker)工作区中默认提供的玩家角色模型。
- 所有用户进入世界时,都会基于该模型生成玩家实体。
- 的
DefaultUserEnterLeaveLogic属性中指定了要使用的模型ID。PlayerUri
파일 위치 및 구조
文件位置及结构
DefaultPlayer는 두 개의 .model 파일로 구성된다:
| 파일 | 경로 | 역할 |
|---|---|---|
| Player.model | | 베이스 모델. Components 목록과 Properties 링크를 정의 |
| DefaultPlayer.model | | Player를 상속( |
중요: 두 파일 모두폴더에 위치한다. 커스텀 스크립트 파일은./Global/에 생성한다../RootDesk/MyDesk/
DefaultPlayer由两个.model文件组成:
| 文件 | 路径 | 作用 |
|---|---|---|
| Player.model | | 基础模型。定义组件列表与属性关联 |
| DefaultPlayer.model | | 继承自Player( |
重要提示:两个文件均位于文件夹下。自定义脚本文件需创建在./Global/目录中。./RootDesk/MyDesk/
DefaultPlayer는 .model 파일로 직접 편집한다
DefaultPlayer通过直接编辑.model文件进行管理
DefaultPlayer는 파일을 직접 읽고 수정하여 관리한다.
./Global/DefaultPlayer.model- 속성값 변경: 의
DefaultPlayer.model배열에서 해당 항목의Values를 수정Value - 컴포넌트 추가/제거: 의
DefaultPlayer.model배열을 수정Components - 베이스 컴포넌트 목록 확인: 의
Player.model배열 참조Components
DefaultPlayer通过直接编辑****文件来管理。
./Global/DefaultPlayer.model- 修改属性值:在的
DefaultPlayer.model数组中修改对应项的Values值Value - 添加/移除组件:修改的
DefaultPlayer.model数组Components - 查看基础组件列表:参考的
Player.model数组Components
파일 구조 상세
文件结构详细说明
Player.model (베이스)
Player.model(基础模型)
경로: ./Global/Player.model
EntryKey: model://player- : 플레이어의 기본 컴포넌트 전체 목록 (MOD.Core.* 네이티브 컴포넌트)
Components - : 모델 프로퍼티 → 컴포넌트 프로퍼티 링크 정의 (인스펙터에서 편집 가능한 프로퍼티)
Properties - : 비어 있음 (기본값은 엔진이 제공)
Values
路径: ./Global/Player.model
EntryKey: model://player- :玩家的全部基础组件列表(MOD.Core.*原生组件)
Components - :定义模型属性到组件属性的关联(可在检查器中编辑的属性)
Properties - :为空(默认值由引擎提供)
Values
DefaultPlayer.model (오버라이드)
DefaultPlayer.model(重写模型)
경로: ./Global/DefaultPlayer.model
EntryKey: model://defaultplayer
BaseModelId: "player"- : DefaultPlayer에 추가된 컴포넌트만 (예:
Components,script.PlayerHit)script.PlayerAttack - : 오버라이드할 설정값 배열
Values
路径: ./Global/DefaultPlayer.model
EntryKey: model://defaultplayer
BaseModelId: "player"- :仅包含DefaultPlayer中新增的组件(例如:
Components、script.PlayerHit)script.PlayerAttack - :待重写的参数值数组
Values
DefaultPlayer 기본 컴포넌트 목록
DefaultPlayer基础组件列表
Player.model로부터 상속되는 네이티브 컴포넌트:
| 컴포넌트 | 역할 |
|---|---|
| TransformComponent | 위치, 회전, 크기 |
| MovementComponent | 이동 속도, 점프력 제어 |
| RigidbodyComponent | 물리(중력, 발판), 메이플스토리 이동 |
| KinematicbodyComponent | RectTileMap 상하좌우 이동 |
| SideviewbodyComponent | SideViewRectTileMap 횡스크롤 이동 |
| StateComponent | 상태 머신 (Walk, Jump, Dead 등) |
| AvatarRendererComponent | 아바타 렌더링, 색상, 감정표현 |
| AvatarStateAnimationComponent | 상태 → 아바타 애니메이션 연결 |
| CostumeManagerComponent | 장비/코스튬 관리 → 상세는 |
| CameraComponent | 카메라 추적 설정 |
| PlayerControllerComponent | 입력-액션 매핑, 조건 처리 |
| PlayerComponent | HP, 사망/부활, PVP, 맵 이동 |
| ChatBalloonComponent | 채팅 풍선 |
| NameTagComponent | 이름표 |
| DamageSkinSettingComponent | 데미지 스킨 |
| DamageSkinSpawnerComponent | 데미지 스킨 스폰 |
| HitEffectSpawnerComponent | 히트 이펙트 스폰 |
| TriggerComponent | 충돌 감지 |
| InventoryComponent | 인벤토리 |
DefaultPlayer.model에서 추가된 스크립트 컴포넌트:
| 컴포넌트 | 역할 |
|---|---|
| script.PlayerHit | 플레이어 피격 로직 |
| script.PlayerAttack | 플레이어 공격 로직 |
从Player.model继承的原生组件:
| 组件 | 作用 |
|---|---|
| TransformComponent | 位置、旋转、缩放 |
| MovementComponent | 控制移动速度、跳跃力 |
| RigidbodyComponent | 物理效果(重力、踏板)、冒险岛风格移动 |
| KinematicbodyComponent | RectTileMap上下左右移动 |
| SideviewbodyComponent | SideViewRectTileMap横版滚动移动 |
| StateComponent | 状态机(行走、跳跃、死亡等) |
| AvatarRendererComponent | Avatar渲染、颜色、表情 |
| AvatarStateAnimationComponent | 状态与Avatar动画关联 |
| CostumeManagerComponent | 装备/服装管理 → 详情参考 |
| CameraComponent | 相机追踪设置 |
| PlayerControllerComponent | 输入-动作映射、条件处理 |
| PlayerComponent | HP、死亡/复活、PVP、地图移动 |
| ChatBalloonComponent | 聊天气泡 |
| NameTagComponent | 名称标签 |
| DamageSkinSettingComponent | 伤害皮肤设置 |
| DamageSkinSpawnerComponent | 伤害皮肤生成 |
| HitEffectSpawnerComponent | 击中效果生成 |
| TriggerComponent | 碰撞检测 |
| InventoryComponent | 背包 |
DefaultPlayer.model中新增的脚本组件:
| 组件 | 作用 |
|---|---|
| script.PlayerHit | 玩家受击逻辑 |
| script.PlayerAttack | 玩家攻击逻辑 |
핵심 컴포넌트 빠른 참조
核心组件快速参考
| 컴포넌트 | 역할 | 핵심 프로퍼티/메서드 |
|---|---|---|
| PlayerComponent | HP, 사망/부활, PVP, 맵 이동 | |
| PlayerControllerComponent | 입력→액션 매핑, 조건 제어 | |
| MovementComponent | 이동 속도/점프 상위 인터페이스 | |
| RigidbodyComponent | 메이플 사이드뷰 물리 (중력/발판) | |
| KinematicbodyComponent | RectTile 탑뷰 상하좌우 이동 | (RectTile 맵 모드 전용) |
| SideviewbodyComponent | SideViewRectTile 사이드뷰 | (SideViewRectTile 맵 모드 전용) |
| AvatarRendererComponent | 아바타 렌더링/색상/감정표현 | |
| StateComponent | 상태 머신 (Walk/Jump/Dead) | |
| NameTagComponent | 이름표 | |
| ChatBalloonComponent | 채팅 풍선 | |
| CameraComponent | 카메라 추적 | |
| TriggerComponent | 충돌 감지 | |
| 组件 | 作用 | 核心属性/方法 |
|---|---|---|
| PlayerComponent | HP、死亡/复活、PVP、地图移动 | |
| PlayerControllerComponent | 输入→动作映射、条件控制 | |
| MovementComponent | 移动速度/跳跃顶层接口 | |
| RigidbodyComponent | 冒险岛横版物理(重力/踏板) | |
| KinematicbodyComponent | RectTile顶视角上下左右移动 | (RectTile地图模式专用) |
| SideviewbodyComponent | SideViewRectTile横版视角 | (SideViewRectTile地图模式专用) |
| AvatarRendererComponent | Avatar渲染/颜色/表情 | |
| StateComponent | 状态机(行走/跳跃/死亡) | |
| NameTagComponent | 名称标签 | |
| ChatBalloonComponent | 聊天气泡 | |
| CameraComponent | 相机追踪 | |
| TriggerComponent | 碰撞检测 | |
DefaultPlayer Values 구조
DefaultPlayer Values结构
DefaultPlayer.modelValuesjson
{
"TargetType": "컴포넌트명 또는 null",
"Name": "프로퍼티명",
"ValueType": {
"$type": "MODNativeType",
"type": "타입 정보"
},
"Value": 값
}DefaultPlayer.modelValuesjson
{
"TargetType": "组件名或null",
"Name": "属性名",
"ValueType": {
"$type": "MODNativeType",
"type": "类型信息"
},
"Value": 值
}TargetType 규칙
TargetType规则
- : Player.model의 Properties에 정의된 모델 프로퍼티 (Properties 링크를 통해 실제 컴포넌트 프로퍼티로 연결됨)
null - : 특정 네이티브 컴포넌트의 프로퍼티를 직접 오버라이드
"MOD.Core.컴포넌트명" - : 커스텀 스크립트 컴포넌트의 프로퍼티
"script.스크립트명"
- :Player.model的Properties中定义的模型属性(通过Properties关联映射到实际组件属性)
null - :直接重写指定原生组件的属性
"MOD.Core.组件名" - :自定义脚本组件的属性
"script.脚本名"
모델 프로퍼티 (TargetType: null)
模型属性(TargetType: null)
Player.model의 Properties에서 정의된 링크를 통해 실제 컴포넌트 프로퍼티로 매핑된다.
| 모델 프로퍼티명 | 원본 컴포넌트.프로퍼티 | 설명 | 기본값 |
|---|---|---|---|
| speed | MovementComponent.InputSpeed | 이동 속도 | 1.0 |
| jumpForce | MovementComponent.JumpForce | 점프 높이 | 1.0 |
| walkAcceleration | RigidbodyComponent.WalkAcceleration | 가속/감속 | 1.0 |
| gravity | RigidbodyComponent.Gravity | 중력 | 1.0 |
| cameraDeadZone | CameraComponent.DeadZone | 카메라 데드존 | |
| cameraSoftZone | CameraComponent.SoftZone | 카메라 소프트존 | |
| cameraDamping | CameraComponent.Damping | 카메라 부드러운 추적 | |
| cameraScreen | CameraComponent.ScreenOffset | 데드존 중심점 | |
| cameraDutch | CameraComponent.DutchAngle | 카메라 회전 | 0.0 |
| cameraOffset | CameraComponent.CameraOffset | 카메라 위치 오프셋 | |
| nameTag | NameTagComponent.Name | 이름표 | |
| damageSkinId | DamageSkinSettingComponent.DamageSkinId | 데미지 스킨 타입 | DataRef |
| damageDelayPerAttack | DamageSkinSettingComponent.DelayPerAttack | 데미지 딜레이 | 0.05 |
| triggerBodyBoxSize | TriggerComponent.BoxSize | 충돌 감지 영역 크기 | |
| triggerBodyBoxOffset | TriggerComponent.BoxOffset | 충돌 감지 영역 오프셋 | |
| triggerBodyColliderOffset | TriggerComponent.ColliderOffset | 충돌체 오프셋 | |
| maxHp | PlayerComponent.MaxHp | 최대 HP | 1000 |
通过Player.model的Properties中定义的关联,映射到实际组件属性。
| 模型属性名 | 原组件.属性 | 说明 | 默认值 |
|---|---|---|---|
| speed | MovementComponent.InputSpeed | 移动速度 | 1.0 |
| jumpForce | MovementComponent.JumpForce | 跳跃高度 | 1.0 |
| walkAcceleration | RigidbodyComponent.WalkAcceleration | 加速/减速 | 1.0 |
| gravity | RigidbodyComponent.Gravity | 重力 | 1.0 |
| cameraDeadZone | CameraComponent.DeadZone | 相机死区 | |
| cameraSoftZone | CameraComponent.SoftZone | 相机软区 | |
| cameraDamping | CameraComponent.Damping | 相机平滑追踪 | |
| cameraScreen | CameraComponent.ScreenOffset | 死区中心点 | |
| cameraDutch | CameraComponent.DutchAngle | 相机旋转 | 0.0 |
| cameraOffset | CameraComponent.CameraOffset | 相机位置偏移 | |
| nameTag | NameTagComponent.Name | 名称标签 | |
| damageSkinId | DamageSkinSettingComponent.DamageSkinId | 伤害皮肤类型 | DataRef |
| damageDelayPerAttack | DamageSkinSettingComponent.DelayPerAttack | 伤害延迟 | 0.05 |
| triggerBodyBoxSize | TriggerComponent.BoxSize | 碰撞检测区域大小 | |
| triggerBodyBoxOffset | TriggerComponent.BoxOffset | 碰撞检测区域偏移 | |
| triggerBodyColliderOffset | TriggerComponent.ColliderOffset | 碰撞体偏移 | |
| maxHp | PlayerComponent.MaxHp | 最大HP | 1000 |
컴포넌트 직접 오버라이드 (TargetType: 특정 컴포넌트)
组件直接重写(TargetType: 指定组件)
모델 프로퍼티 링크가 아닌, 컴포넌트 프로퍼티를 직접 오버라이드하는 값:
| TargetType | Name | 설명 | 기본값 |
|---|---|---|---|
| MOD.Core.CameraComponent | ZoomRatioMax | 카메라 최대 줌 비율 | 500.0 |
| MOD.Core.MovementComponent | JumpForce | 점프력 (직접 오버라이드) | 1.0 |
| MOD.Core.MovementComponent | InputSpeed | 이동 속도 (직접 오버라이드) | 1.0 |
| script.PlayerHit | CollisionGroup | 피격 충돌 그룹 | CollisionGroup ID |
| script.PlayerHit | BoxSize | 피격 충돌 영역 크기 | |
| script.PlayerHit | ColliderOffset | 피격 충돌 오프셋 | |
不通过模型属性关联,直接重写组件属性的参数:
| TargetType | Name | 说明 | 默认值 |
|---|---|---|---|
| MOD.Core.CameraComponent | ZoomRatioMax | 相机最大缩放比例 | 500.0 |
| MOD.Core.MovementComponent | JumpForce | 跳跃力(直接重写) | 1.0 |
| MOD.Core.MovementComponent | InputSpeed | 移动速度(直接重写) | 1.0 |
| script.PlayerHit | CollisionGroup | 受击碰撞组 | CollisionGroup ID |
| script.PlayerHit | BoxSize | 受击碰撞区域大小 | |
| script.PlayerHit | ColliderOffset | 受击碰撞体偏移 | |
맵 모드별 이동 컴포넌트
按地图模式划分的移动组件
TileMapMode↔Body 매핑 테이블은참조. 맵 모드에 따라 RigidbodyComponent / KinematicbodyComponent / SideviewbodyComponent 중 하나가 활성화된다.msw-general/references/platform.md §4
请参考中的TileMapMode↔Body映射表。根据地图模式,RigidbodyComponent / KinematicbodyComponent / SideviewbodyComponent三者中会有一个被激活。msw-general/references/platform.md §4
플레이어 식별 방법 (스크립트 참조)
玩家识别方法(脚本参考)
- → 해당 엔티티가 플레이어인지 확인
entity.PlayerComponent ~= nil - → 나의 플레이어 엔티티 (클라이언트 전용)
_UserService.LocalPlayer - → 특정 유저의 플레이어 엔티티
_UserService:GetUserEntityByUserId(userId)
- → 判断该实体是否为玩家
entity.PlayerComponent ~= nil - → 当前玩家实体(仅客户端可用)
_UserService.LocalPlayer - → 指定用户的玩家实体
_UserService:GetUserEntityByUserId(userId)
주요 서비스 요약 (스크립트 참조)
主要服务概述(脚本参考)
| 서비스 | 역할 | 핵심 API |
|---|---|---|
| _UserService | 유저 관리, 입장/퇴장 | |
| _TeleportService | 텔레포트/맵 이동 | |
| _CameraService | 카메라 제어 | |
| DefaultUserEnterLeaveLogic | 유저 입장/퇴장 로직 | |
| 服务 | 作用 | 核心API |
|---|---|---|
| _UserService | 用户管理、进入/退出 | |
| _TeleportService | 传送/地图移动 | |
| _CameraService | 相机控制 | |
| DefaultUserEnterLeaveLogic | 用户进入/退出逻辑 | |
DefaultPlayer 수정 방법
DefaultPlayer修改方法
속성값(Values) 수정
修改属性值(Values)
./Global/DefaultPlayer.modelContentProto.Json.ValuesValue예: 이동 속도를 2.0으로 변경
ValuesName"speed"Valuejson
{
"TargetType": null,
"Name": "speed",
"ValueType": { ... },
"Value": 2.0
}또는 컴포넌트 직접 오버라이드 항목에서 의 :
MovementComponentInputSpeedjson
{
"TargetType": "MOD.Core.MovementComponent",
"Name": "InputSpeed",
"ValueType": { ... },
"Value": 2.0
}참고: 모델 프로퍼티(,TargetType: null)와 컴포넌트 직접 오버라이드(Name: "speed",TargetType: "MOD.Core.MovementComponent")가 모두 존재할 수 있다. 양쪽을 일관되게 수정해야 한다.Name: "InputSpeed"
예: 점프력 1.5 + HP 2000으로 변경
Valuesjson
// jumpForce 모델 프로퍼티
{ "TargetType": null, "Name": "jumpForce", "Value": 1.5 }
// MovementComponent 직접 오버라이드
{ "TargetType": "MOD.Core.MovementComponent", "Name": "JumpForce", "Value": 1.5 }
// maxHp 모델 프로퍼티
{ "TargetType": null, "Name": "maxHp", "Value": 2000 }打开文件,修改数组中对应项的值。
./Global/DefaultPlayer.modelContentProto.Json.ValuesValue示例:将移动速度修改为2.0
在数组中找到为的项,修改其值:
ValuesName"speed"Valuejson
{
"TargetType": null,
"Name": "speed",
"ValueType": { ... },
"Value": 2.0
}或者在组件直接重写项中修改的:
MovementComponentInputSpeedjson
{
"TargetType": "MOD.Core.MovementComponent",
"Name": "InputSpeed",
"ValueType": { ... },
"Value": 2.0
}注意:模型属性(,TargetType: null)和组件直接重写(Name: "speed",TargetType: "MOD.Core.MovementComponent")可能同时存在,需保持两者修改一致。Name: "InputSpeed"
示例:将跳跃力改为1.5 + HP改为2000
在数组中找到对应项修改:
Valuesjson
// jumpForce模型属性
{ "TargetType": null, "Name": "jumpForce", "Value": 1.5 }
// MovementComponent直接重写
{ "TargetType": "MOD.Core.MovementComponent", "Name": "JumpForce", "Value": 1.5 }
// maxHp模型属性
{ "TargetType": null, "Name": "maxHp", "Value": 2000 }새 Values 항목 추가
新增Values项
Values주요 ValueType 패턴:
json
// float (System.Single)
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// int (System.Int64)
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// string
"ValueType": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// Vector2 (MODVector2)
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value 형식: { "$type": "MOD.Core.MODVector2, MOD.Core", "x": 0.0, "y": 0.0 }
// DataRef (MODDataRef)
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODDataRef, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value 형식: { "$type": "MOD.Core.MODDataRef, MOD.Core", "DataId": "hex..." }
// CollisionGroup
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.Physics.CollisionGroup, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value 형식: { "$type": "MOD.Core.Physics.CollisionGroup, MOD.Core", "Id": "hex..." }
// boolean (System.Boolean) — Enable=false/true에 사용
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// Value 형식: true 또는 false可通过在数组中新增项来重写默认值。需严格匹配ValueType格式。
Values主要ValueType格式:
json
// float (System.Single)
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// int (System.Int64)
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// string
"ValueType": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// Vector2 (MODVector2)
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value格式: { "$type": "MOD.Core.MODVector2, MOD.Core", "x": 0.0, "y": 0.0 }
// DataRef (MODDataRef)
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODDataRef, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value格式: { "$type": "MOD.Core.MODDataRef, MOD.Core", "DataId": "hex..." }
// CollisionGroup
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.Physics.CollisionGroup, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value格式: { "$type": "MOD.Core.Physics.CollisionGroup, MOD.Core", "Id": "hex..." }
// boolean (System.Boolean) — 用于Enable=false/true
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// Value格式: true 或 false컴포넌트 추가
添加组件
./Global/DefaultPlayer.modelContentProto.Json.Components커스텀 스크립트 컴포넌트 추가:
json
"Components": [
"script.PlayerHit",
"script.PlayerAttack",
"script.MyCustomComponent"
]커스텀 스크립트(.mlua)는 반드시에 생성해야 한다. 스크립트를 먼저 작성한 후 Components 배열에./RootDesk/MyDesk/으로 추가한다."script.스크립트명"
네이티브 컴포넌트 추가 (예: SpriteRendererComponent):
json
"Components": [
"script.PlayerHit",
"script.PlayerAttack",
"MOD.Core.SpriteRendererComponent"
]在的数组中添加项。
./Global/DefaultPlayer.modelContentProto.Json.Components添加自定义脚本组件:
json
"Components": [
"script.PlayerHit",
"script.PlayerAttack",
"script.MyCustomComponent"
]自定义脚本(.mlua)必须创建在目录下。需先编写脚本,再在Components数组中添加./RootDesk/MyDesk/。"script.脚本名"
添加原生组件(示例:SpriteRendererComponent):
json
"Components": [
"script.PlayerHit",
"script.PlayerAttack",
"MOD.Core.SpriteRendererComponent"
]컴포넌트 제거
移除组件
DefaultPlayer.modelComponentsValues주의: Player.model(베이스)에서 상속된 컴포넌트는 DefaultPlayer.model의 Components에 없으므로, 베이스 컴포넌트를 제거하려면 Player.model 자체를 수정해야 한다. 일반적으로 베이스 컴포넌트 제거는 권장하지 않는다.
从的数组中移除对应项。同时需移除相关的项。
DefaultPlayer.modelComponentsValues注意:从Player.model(基础模型)继承的组件不会出现在DefaultPlayer.model的Components中,若要移除基础组件,需直接修改Player.model。通常不建议移除基础组件。
DefaultPlayer 숨기기
隐藏DefaultPlayer
DefaultPlayer는 base model 상속 컴포넌트이므로 삭제 불가. 로 비활성화하는 것이 유일한 방법이다.
Enable=falseDefaultPlayer是继承自基础模型的组件,因此无法删除。唯一的隐藏方法是设置使其失效。
Enable=false컴포넌트 유지/비활성화 분류
组件保留/失效分类
| 컴포넌트 | 완전 숨기기 | 아바타만 숨기기 | 비고 |
|---|---|---|---|
| TransformComponent | 유지 | 유지 | 필수 |
| PlayerComponent | 유지 | 유지 | 필수 — 비활성화 시 입장 실패 |
| StateComponent | 유지 | 유지 | 비활성화 시 다른 컴포넌트 에러 |
| MovementComponent | 유지 | 유지 | 이동 필요 시 유지 |
| CameraComponent | 유지 | 유지 | 카메라 필요 시 유지 |
| AvatarRendererComponent | 비활성화 | 비활성화 | 핵심 — 이것만 꺼도 안 보임 |
| AvatarStateAnimationComponent | 비활성화 | 비활성화 | |
| CostumeManagerComponent | 비활성화 | 비활성화 | |
| PlayerControllerComponent | 비활성화 | 유지 | 이동 차단 여부에 따라 |
| ChatBalloonComponent | 비활성화 | 비활성화 | |
| NameTagComponent | 비활성화 | 비활성화 | |
| DamageSkinSettingComponent | 비활성화 | 비활성화 | |
| DamageSkinSpawnerComponent | 비활성화 | 비활성화 | |
| HitComponent | 비활성화 | 비활성화 | |
| HitEffectSpawnerComponent | 비활성화 | 비활성화 | |
| TriggerComponent | 비활성화 | 비활성화 | |
| InventoryComponent | 비활성화 | 비활성화 | |
| RigidbodyComponent | 비활성화 | 맵 모드 유지 | MapleTile 맵일 때 |
| SideviewbodyComponent | 비활성화 | 맵 모드 유지 | SideViewRectTile 맵일 때 |
| KinematicbodyComponent | EnableShadow=false | EnableShadow=false | 그림자만 제거 |
| 组件 | 完全隐藏 | 仅隐藏Avatar | 备注 |
|---|---|---|---|
| TransformComponent | 保留 | 保留 | 必需 |
| PlayerComponent | 保留 | 保留 | 必需 — 失效会导致进入失败 |
| StateComponent | 保留 | 保留 | 失效会导致其他组件报错 |
| MovementComponent | 保留 | 保留 | 需要移动时保留 |
| CameraComponent | 保留 | 保留 | 需要相机时保留 |
| AvatarRendererComponent | 失效 | 失效 | 核心 — 仅关闭此项即可隐藏 |
| AvatarStateAnimationComponent | 失效 | 失效 | |
| CostumeManagerComponent | 失效 | 失效 | |
| PlayerControllerComponent | 失效 | 保留 | 根据是否需要禁止移动选择 |
| ChatBalloonComponent | 失效 | 失效 | |
| NameTagComponent | 失效 | 失效 | |
| DamageSkinSettingComponent | 失效 | 失效 | |
| DamageSkinSpawnerComponent | 失效 | 失效 | |
| HitComponent | 失效 | 失效 | |
| HitEffectSpawnerComponent | 失效 | 失效 | |
| TriggerComponent | 失效 | 失效 | |
| InventoryComponent | 失效 | 失效 | |
| RigidbodyComponent | 失效 | 根据地图模式保留 | 当使用MapleTile地图时 |
| SideviewbodyComponent | 失效 | 根据地图模式保留 | 当使用SideViewRectTile地图时 |
| KinematicbodyComponent | EnableShadow=false | EnableShadow=false | 仅移除阴影 |
파일 편집 — Values에 Enable=false 추가
文件编辑 — 在Values中添加Enable=false
./Global/DefaultPlayer.modelContentProto.Json.Valuesjson
{
"TargetType": "MOD.Core.AvatarRendererComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
}동일 패턴으로 비활성화할 컴포넌트마다 항목 추가. 그림자 제거는:
json
{
"TargetType": "MOD.Core.KinematicbodyComponent",
"Name": "EnableShadow",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
}파일 저장 후 Maker Refresh 필수.
在的数组中添加项。若组件无现成的Enable项,则需新增。
./Global/DefaultPlayer.modelContentProto.Json.Valuesjson
{
"TargetType": "MOD.Core.AvatarRendererComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
}按照相同格式为每个需要失效的组件添加项。移除阴影的设置如下:
json
{
"TargetType": "MOD.Core.KinematicbodyComponent",
"Name": "EnableShadow",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
}保存文件后必须执行Maker Refresh。
DefaultPlayer 컴포넌트 확장 패턴
DefaultPlayer组件扩展模式
- 비아바타 플레이어: AvatarRendererComponent 비활성화 → SpriteRendererComponent 추가 → SpriteRUID 설정.
- 충돌 설정: TriggerComponent의 Values에서 ColliderType, CollisionGroup 조정.
- SpawnLocation: 맵(.map) 파일에서 Special → SpawnLocation 배치 (부활 위치).
- 非Avatar玩家:禁用AvatarRendererComponent → 添加SpriteRendererComponent → 设置SpriteRUID。
- 碰撞设置:在TriggerComponent的Values中调整ColliderType、CollisionGroup。
- 生成位置:在地图(.map)文件的Special中放置SpawnLocation(复活位置)。
워크플로우
工作流程
플레이어 기본 속성 수정 (이동 속도, 점프력, HP 등)
修改玩家基础属性(移动速度、跳跃力、HP等)
1. ./Global/DefaultPlayer.model 파일 읽기 → Values 배열 확인
2. 수정할 프로퍼티 항목을 찾아 Value 변경
3. 모델 프로퍼티(TargetType: null)와 컴포넌트 직접 오버라이드가 모두 있는 경우 양쪽 일관 수정
4. 파일 저장1. 打开./Global/DefaultPlayer.model文件 → 查看Values数组
2. 找到需修改的属性项,修改其Value值
3. 若同时存在模型属性(TargetType: null)和组件直接重写项,需保持两者修改一致
4. 保存文件플레이어에 커스텀 스크립트 추가
向玩家添加自定义脚本
1. ./RootDesk/MyDesk/ 에 새 .mlua 스크립트 작성 (msw-scripting 스킬 참조)
2. ./Global/DefaultPlayer.model 의 Components 배열에 "script.스크립트명" 추가
3. 필요 시 Values 배열에 스크립트 프로퍼티 기본값 추가
4. Maker Refresh 요청 (.codeblock 자동 생성)1. 在./RootDesk/MyDesk/中创建新的.mlua脚本(参考msw-scripting技能)
2. 在./Global/DefaultPlayer.model的Components数组中添加"script.脚本名"
3. 若需设置默认值,在Values数组中添加脚本属性项
4. 执行Maker Refresh(自动生成.codeblock)카메라 설정 변경
修改相机设置
1. ./Global/DefaultPlayer.model 읽기
2. Values에서 cameraDeadZone, cameraSoftZone, cameraDamping, cameraScreen, cameraDutch, cameraOffset 수정
3. 파일 저장1. 打开./Global/DefaultPlayer.model文件
2. 在Values中修改cameraDeadZone、cameraSoftZone、cameraDamping、cameraScreen、cameraDutch、cameraOffset
3. 保存文件경계 및 주의사항
边界与注意事项
담당 영역
负责范围
- DefaultPlayer/Player 모델 파일(.model) 조회/수정
- 컴포넌트 추가/제거 (Components 배열)
- 이동/물리/HP/카메라 설정 (Values 배열)
- 查询/修改DefaultPlayer/Player模型文件(.model)
- 添加/移除组件(Components数组)
- 设置移动/物理/HP/相机参数(Values数组)
비담당 영역
非负责范围
- 코스튬/아바타 장비 → 스킬
msw-costume - UI 에디터 → 폴더의 .ui 파일 (전용 스킬)
./ui/ - 맵 편집 → 폴더의 .map 파일 (전용 스킬, NPC/몬스터 스폰 포함)
./map/ - 일반 스크립트/리소스 → 각 전용 스킬
- 服装/Avatar装备 → 参考技能
msw-costume - UI编辑器 → 参考文件夹下的.ui文件(专属技能)
./ui/ - 地图编辑 → 参考文件夹下的.map文件(专属技能,包含NPC/怪物生成)
./map/ - 通用脚本/资源 → 参考各专属技能
제약
限制
- Global/ 폴더 주의: DefaultPlayer.model과 Player.model은 에 있다. 이 폴더는 엔진 기본 템플릿 전용이므로 신규 파일 생성은 권장하지 않는다.
./Global/ - 커스텀 스크립트 위치: 새 스크립트 파일은 반드시 에 생성한다.
./RootDesk/MyDesk/ - 맵 모드 주의: 맵 모드(MapleTile/RectTile/SideViewRectTile)에 따라 활성 이동 컴포넌트가 다르다.
- ValueType 정확성: Values 항목 추가 시 형식(특히 어셈블리 버전)을 기존 항목과 일치시켜야 한다.
ValueType - Maker Refresh: 스크립트 추가/수정 후에는 Maker Refresh가 필요하다 (.codeblock 자동 생성).
- 注意Global/文件夹:DefaultPlayer.model和Player.model位于目录下。该文件夹为引擎默认模板专属,不建议创建新文件。
./Global/ - 自定义脚本位置:新脚本文件必须创建在目录下。
./RootDesk/MyDesk/ - 注意地图模式:根据地图模式(MapleTile/RectTile/SideViewRectTile),激活的移动组件会有所不同。
- ValueType准确性:新增Values项时,需确保格式(尤其是程序集版本)与现有项一致。
ValueType - Maker Refresh:添加/修改脚本后需执行Maker Refresh(自动生成.codeblock)。