Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5b3d798

Browse files
committed
feat: 모델 타입 정의
1 parent fc3f54f commit 5b3d798

File tree

6 files changed

+376
-26
lines changed

6 files changed

+376
-26
lines changed

‎Assets/App/Scenes/Live2d Sence.unity‎

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,102 @@ MonoBehaviour:
256256
m_MipBias: 0
257257
m_VarianceClampScale: 0.9
258258
m_ContrastAdaptiveSharpening: 0
259+
--- !u!1 &1607417702
260+
GameObject:
261+
m_ObjectHideFlags: 0
262+
m_CorrespondingSourceObject: {fileID: 0}
263+
m_PrefabInstance: {fileID: 0}
264+
m_PrefabAsset: {fileID: 0}
265+
serializedVersion: 6
266+
m_Component:
267+
- component: {fileID: 1607417703}
268+
m_Layer: 0
269+
m_Name: CharacterRoot
270+
m_TagString: Untagged
271+
m_Icon: {fileID: 0}
272+
m_NavMeshLayer: 0
273+
m_StaticEditorFlags: 0
274+
m_IsActive: 1
275+
--- !u!4 &1607417703
276+
Transform:
277+
m_ObjectHideFlags: 0
278+
m_CorrespondingSourceObject: {fileID: 0}
279+
m_PrefabInstance: {fileID: 0}
280+
m_PrefabAsset: {fileID: 0}
281+
m_GameObject: {fileID: 1607417702}
282+
serializedVersion: 2
283+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
284+
m_LocalPosition: {x: 0, y: 0, z: 0}
285+
m_LocalScale: {x: 1, y: 1, z: 1}
286+
m_ConstrainProportionsScale: 0
287+
m_Children: []
288+
m_Father: {fileID: 0}
289+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
290+
--- !u!1 &1916112489
291+
GameObject:
292+
m_ObjectHideFlags: 0
293+
m_CorrespondingSourceObject: {fileID: 0}
294+
m_PrefabInstance: {fileID: 0}
295+
m_PrefabAsset: {fileID: 0}
296+
serializedVersion: 6
297+
m_Component:
298+
- component: {fileID: 1916112490}
299+
- component: {fileID: 1916112492}
300+
- component: {fileID: 1916112491}
301+
m_Layer: 0
302+
m_Name: Live2D Manager
303+
m_TagString: Untagged
304+
m_Icon: {fileID: 0}
305+
m_NavMeshLayer: 0
306+
m_StaticEditorFlags: 0
307+
m_IsActive: 1
308+
--- !u!4 &1916112490
309+
Transform:
310+
m_ObjectHideFlags: 0
311+
m_CorrespondingSourceObject: {fileID: 0}
312+
m_PrefabInstance: {fileID: 0}
313+
m_PrefabAsset: {fileID: 0}
314+
m_GameObject: {fileID: 1916112489}
315+
serializedVersion: 2
316+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
317+
m_LocalPosition: {x: 0, y: 0, z: 0}
318+
m_LocalScale: {x: 1, y: 1, z: 1}
319+
m_ConstrainProportionsScale: 0
320+
m_Children: []
321+
m_Father: {fileID: 0}
322+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
323+
--- !u!114 &1916112491
324+
MonoBehaviour:
325+
m_ObjectHideFlags: 0
326+
m_CorrespondingSourceObject: {fileID: 0}
327+
m_PrefabInstance: {fileID: 0}
328+
m_PrefabAsset: {fileID: 0}
329+
m_GameObject: {fileID: 1916112489}
330+
m_Enabled: 1
331+
m_EditorHideFlags: 0
332+
m_Script: {fileID: 11500000, guid: 599c8846d73d1244a80788addacb4285, type: 3}
333+
m_Name:
334+
m_EditorClassIdentifier:
335+
_autoApplyOnEnable: 1
336+
--- !u!114 &1916112492
337+
MonoBehaviour:
338+
m_ObjectHideFlags: 0
339+
m_CorrespondingSourceObject: {fileID: 0}
340+
m_PrefabInstance: {fileID: 0}
341+
m_PrefabAsset: {fileID: 0}
342+
m_GameObject: {fileID: 1916112489}
343+
m_Enabled: 1
344+
m_EditorHideFlags: 0
345+
m_Script: {fileID: 11500000, guid: bbd7bfb36017db743b3b7cab74183970, type: 3}
346+
m_Name:
347+
m_EditorClassIdentifier:
348+
_modelRoot: {fileID: 1607417703}
349+
_modelRegistry: {fileID: 11400000, guid: faf582e392fb4334aa0f4dd41df09e0d, type: 2}
350+
_defaultCharacterConfig: {fileID: 11400000, guid: 85f44d149f02e394597f11878de45759, type: 2}
259351
--- !u!1660057539 &9223372036854775807
260352
SceneRoots:
261353
m_ObjectHideFlags: 0
262354
m_Roots:
263355
- {fileID: 893152817}
356+
- {fileID: 1916112490}
357+
- {fileID: 1607417703}

‎Assets/Domain/Character/Script/ILive2DModelApplier.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace ProjectVG.Domain.Character.Service
55
public interface ILive2DModelApplier
66
{
77
/** 활성 모델과 구성에 대해 LookAt, LipSync, 썸네일 등 시각 설정을 적용한다. */
8-
void Apply(GameObject activeModel, ModelConfigmodelConfig);
8+
void Apply(GameObject activeModel, ProjectVG.Domain.Character.Live2D.Model.Live2DCharacterConfigcharacterConfig);
99
}
1010
}
1111

‎Assets/Domain/Character/Script/ILive2DModelManager.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public interface ILive2DModelManager
2929
/** 활성 모델의 가시성을 설정한다. */
3030
void SetVisibility(bool isVisible);
3131

32-
/** 활성 모델에 캐릭터별 ModelConfig를 적용한다. */
33-
void ApplyModelConfig(ModelConfigmodelConfig);
32+
/** 활성 모델에 캐릭터별 Live2DCharacterConfig를 적용한다. */
33+
void ApplyCharacterConfig(ProjectVG.Domain.Character.Live2D.Model.Live2DCharacterConfigcharacterConfig);
3434
}
3535
}
3636

‎Assets/Domain/Character/Script/Live2DCharacterConfig.cs‎

Lines changed: 91 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,111 @@ public class Live2DCharacterConfig : ScriptableObject
1010
[Serializable]
1111
public class EmotionMapping
1212
{
13+
[Header("감정 설정")]
14+
[Tooltip("감정 키입니다. 서버에서 전송되는 감정 값과 일치해야 합니다.")]
1315
public string emotionKey;
16+
17+
[Tooltip("Live2D Expression 이름입니다. 모델의 표정 파일명과 일치해야 합니다.")]
1418
public string expressionName;
19+
20+
[Header("기본값")]
21+
[Tooltip("감정의 기본 강도입니다. (0.0 ~ 1.0)")]
22+
[Range(0f, 1f)]
1523
public float defaultIntensity = 0.5f;
24+
25+
[Tooltip("감정의 기본 지속시간입니다. (밀리초)")]
26+
[Range(500, 10000)]
1627
public int defaultDurationMs = 2000;
1728
}
1829

1930
[Serializable]
2031
public class ActionMapping
2132
{
33+
[Header("행동 설정")]
34+
[Tooltip("행동 키입니다. 서버에서 전송되는 행동 값과 일치해야 합니다.")]
2235
public string actionKey;
36+
37+
[Tooltip("Live2D 모션 그룹 이름입니다.")]
2338
public string motionGroup;
39+
40+
[Tooltip("Live2D 모션 파일 이름입니다.")]
2441
public string motionName;
2542
}
2643

27-
public string characterId;
28-
public GameObject characterPrefab;
29-
public ModelConfig modelConfig;
30-
public List<EmotionMapping> emotionMappings = new List<EmotionMapping>();
31-
public List<ActionMapping> actionMappings = new List<ActionMapping>();
44+
[Header("[ 캐릭터 기본정보 ]")]
45+
[Space(5)]
46+
[Tooltip("캐릭터 고유 ID")]
47+
[SerializeField] private string characterId;
48+
49+
[Tooltip("캐릭터 이름")]
50+
[SerializeField] private string characterName;
51+
52+
[Tooltip("Live2D 캐릭터 프리팹 (Cubism 모델 포함)")]
53+
[SerializeField] private GameObject characterPrefab;
54+
55+
56+
[Tooltip("캐릭터 썸네일 이미지")]
57+
[SerializeField] private Texture2D thumbnail;
58+
59+
[Tooltip("캐릭터 설명")]
60+
[SerializeField, Multiline] private string characterDescription;
61+
62+
[Space(5)]
63+
[Header("────────────────────────────────────────")]
64+
[Header("[ 행동/표정 ]")]
65+
[Space(2)]
66+
[Tooltip("감정 → Live2D Expression 매핑")]
67+
[SerializeField] private List<EmotionMapping> emotionMappings = new List<EmotionMapping>();
68+
69+
[Tooltip("행동 → Live2D Motion 매핑")]
70+
[SerializeField] private List<ActionMapping> actionMappings = new List<ActionMapping>();
71+
72+
[Space(5)]
73+
[Header("────────────────────────────────────────")]
74+
[Header("[ 시선 설정 ]")]
75+
[Space(2)]
76+
77+
[Tooltip("시선 추적 사용 여부")]
78+
[SerializeField] private bool isLockAtActive = true;
79+
80+
[Tooltip("시선 민감도 (값이 클수록 회전이 커짐)")]
81+
[Range(0f, 30f)]
82+
[SerializeField] private float lookSensitivity = 1.0f;
83+
84+
[Tooltip("시선 반응 속도 (값이 작을수록 빠름)")]
85+
[Range(0f, 5f)]
86+
[SerializeField] private float lockAtDamping = 0.0f;
87+
88+
[Space(5)]
89+
[Header("────────────────────────────────────────")]
90+
[Header("[ 립싱크 설정 ]")]
91+
[Space(2)]
92+
93+
[Tooltip("음량 배수 (1 = 기본)")]
94+
[Range(1f, 10f)]
95+
[SerializeField] private float gain = 1f;
96+
97+
[Tooltip("입 움직임 부드러움 (값이 클수록 부드럽지만 부하 증가)")]
98+
[Range(0f, 1f)]
99+
[SerializeField] private float smoothing = 1f;
100+
101+
// 캐릭터 기본정보
102+
public string CharacterId => characterId;
103+
public string CharacterName => characterName;
104+
public GameObject CharacterPrefab => characterPrefab;
105+
public Texture2D Thumbnail => thumbnail;
106+
public string CharacterDescription => characterDescription;
107+
108+
// 행동/표정
109+
public List<EmotionMapping> EmotionMappings => emotionMappings;
110+
public List<ActionMapping> ActionMappings => actionMappings;
111+
112+
// 세부 설정
113+
public bool IsLockAtActive => isLockAtActive;
114+
public float LookSensitivity => lookSensitivity;
115+
public float LockAtDamping => lockAtDamping;
116+
public float Gain => gain;
117+
public float Smoothing => smoothing;
32118
}
33119
}
34120

‎Assets/Domain/Character/Script/Live2DModelApplier.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class Live2DModelApplier : MonoBehaviour, ILive2DModelApplier
66
{
77
[SerializeField] private bool _autoApplyOnEnable = true;
88

9-
public void Apply(GameObject activeModel, ModelConfigmodelConfig)
9+
public void Apply(GameObject activeModel, ProjectVG.Domain.Character.Live2D.Model.Live2DCharacterConfigcharacterConfig)
1010
{
1111
}
1212
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /