Skip to content

Commit 55c48dd

Browse files
Merge pull request #85 from Live2D/develop
Update to Cubism 5 SDK for Unity R4
2 parents 5260831 + 174b795 commit 55c48dd

File tree

110 files changed

+23499
-7823
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

110 files changed

+23499
-7823
lines changed

Assets/Live2D/Cubism/CHANGELOG.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66

77

8+
## [5-r.4] 2025-05-29
9+
10+
### Added
11+
12+
* Add an empty `AnimatorController` at the same hierarchy level as each model's Prefab.
13+
* Add an API to `CubismMotionJson` for verifying the consistency of `motion3.json`. by [@pillowtrucker](https://github.com/Live2D/CubismNativeFramework/pull/57)
14+
* Add parameter repeat processing that connects the right and left ends of the parameter to create a loop, allowing the motion to repeat.
15+
* Add the variable `_isOverriddenParameterRepeat` to the `CubismModel` class for managing parameter repeat flags at the model level.
16+
* Add variables `_isOverriddenUserParameterRepeat` to the `CubismModel` class and `_isParameterRepeated` to the `CubismParameter` class for managing parameter repeat flags for each parameter.
17+
18+
### Changed
19+
20+
* Change the version of the development project to `2022.3.59f1`.
21+
* Change CubismMath class not to inherit from MonoBehaviour.
22+
* Change `CubismMoc._bytes` not to be displayed in Inspector.
23+
24+
### Fixed
25+
26+
* Fix `CubismPhysicsController` to be in the correct disabled state.
27+
* When performing a Reimport Fixed a problem that `.cdi3.json` updates were not reflected in `CubismDisplayInfoParameterName`,`CubismDisplayInfoPartName`.
28+
* Fix a problem in which the slider of CubismParametersInspector and CubismPartsInspector in the Inspector window did not move when operated.
29+
* Fix a bug that CubismParametersInspector and CubismPartsInspector do not display the names of parameters and parts if .cdi3.json is not set on the model.
30+
* Fix `CubismParameterInspector` and `CubismPartInspector` can be operated in play mode.
31+
* Fix a bug that prevented MotionFade fade-out from working properly.
32+
* Fix unnecessary processing in `CubismFadeController`.
33+
* Fix so that end events are sent for all clips played by `CubismMotionController`.
34+
* Fix an error that occurred when playing a expression that uses parameters that do not exist in the model.
35+
36+
837
## [5-r.3] - 2024-11-28
938

1039
### Added
@@ -16,6 +45,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
1645

1746
### Changed
1847

48+
* Change an expression "overwrite" to "override" for multiply color, screen color, and culling to adapt the actual behavior.
1949
* Change `OnGeneratedCSProjectFiles` function to be disabled in Unity 2017.3 and later by [@moz-moz](https://github.com/moz-moz)
2050
* Change to a single function The initialization process in CubismModel class. by [@KT](https://creatorsforum.live2d.com/t/topic/2356/)
2151
* Change to optimize update process for Multiply Color and Screen Color.
@@ -433,6 +463,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
433463
* Fix issue where Priority value was not reset after playing motion with CubismMotionController.
434464

435465

466+
[5-r.4]: https://github.com/Live2D/CubismUnityComponents/compare/5-r.3...5-r.4
436467
[5-r.3]: https://github.com/Live2D/CubismUnityComponents/compare/5-r.2...5-r.3
437468
[5-r.2]: https://github.com/Live2D/CubismUnityComponents/compare/5-r.1...5-r.2
438469
[5-r.1]: https://github.com/Live2D/CubismUnityComponents/compare/5-r.1-beta.4...5-r.1

Assets/Live2D/Cubism/Core/ArrayExtensionMethods.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88

99
using Live2D.Cubism.Core.Unmanaged;
10+
using Live2D.Cubism.Framework;
1011
using System;
1112
using UnityEngine;
1213

@@ -97,7 +98,7 @@ internal static void ReadFrom(this CubismParameter[] self, CubismUnmanagedModel
9798
// Pull.
9899
for (var i = 0; i < self.Length; ++i)
99100
{
100-
self[i].Value = values[self[i].UnmanagedIndex];
101+
self[i].OverrideValue(values[self[i].UnmanagedIndex]);
101102
}
102103
}
103104

Assets/Live2D/Cubism/Core/CubismMoc.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public static uint LatestVersion
8484
/// <summary>
8585
/// <see cref="Bytes"/> backing field.
8686
/// </summary>
87-
[SerializeField]
87+
[SerializeField, HideInInspector]
8888
private byte[] _bytes;
8989

9090
/// <summary>

Assets/Live2D/Cubism/Core/CubismModel.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,31 @@ public CubismCanvasInformation CanvasInformation
209209
/// </summary>
210210
CubismParameterStore _parameterStore;
211211

212+
/// <summary>
213+
/// Whether parameter repetition is performed for the entire model.
214+
/// </summary>
215+
[SerializeField]
216+
private bool _isOverriddenParameterRepeat = true;
217+
218+
219+
/// <summary>
220+
/// Checks whether parameter repetition is performed for the entire model.
221+
/// </summary>
222+
/// <returns>True if parameter repetition is performed for the entire model; otherwise returns false.</returns>
223+
public bool GetOverrideFlagForModelParameterRepeat()
224+
{
225+
return _isOverriddenParameterRepeat;
226+
}
227+
228+
/// <summary>
229+
/// Sets whether parameter repetition is performed for the entire model.
230+
/// </summary>
231+
/// <param name="isRepeat">Use true to perform parameter repetition for the entire model, or false to not perform it.</param>
232+
public void SetOverrideFlagForModelParameterRepeat(bool isRepeat)
233+
{
234+
_isOverriddenParameterRepeat = isRepeat;
235+
}
236+
212237
/// <summary>
213238
/// True if instance is revived.
214239
/// </summary>
@@ -330,6 +355,8 @@ private void Reset(CubismMoc moc)
330355
CanvasInformation = new CubismCanvasInformation(TaskableModel.UnmanagedModel);
331356

332357
RefreshParameterStore();
358+
359+
SetOverrideFlagForModelParameterRepeat(_isOverriddenParameterRepeat);
333360
}
334361

335362
/// <summary>
@@ -484,9 +511,16 @@ private void Update()
484511
TaskableModel.TryReadParameters(Parameters);
485512

486513
// restore last frame parameters value and parts opacity.
487-
if(_parameterStore != null)
514+
if (_parameterStore != null)
488515
{
516+
#if UNITY_EDITOR
517+
if (Application.isPlaying)
518+
{
519+
_parameterStore.RestoreParameters();
520+
}
521+
#else
489522
_parameterStore.RestoreParameters();
523+
#endif
490524
}
491525

492526
// Trigger event.

Assets/Live2D/Cubism/Core/CubismParameter.cs

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
using Live2D.Cubism.Core.Unmanaged;
1010
using Live2D.Cubism.Framework;
11+
using Live2D.Cubism.Framework.Utils;
12+
using System;
1113
using UnityEngine;
1214

1315

@@ -142,6 +144,162 @@ public float DefaultValue
142144
[SerializeField, HideInInspector]
143145
public float Value;
144146

147+
/// <summary>
148+
/// CubismModel cache.
149+
/// </summary>
150+
private CubismModel _model;
151+
152+
/// <summary>
153+
/// Whether to be overridden
154+
/// </summary>
155+
[SerializeField]
156+
private bool _isOverriddenUserParameterRepeat = false;
157+
158+
/// <summary>
159+
/// Override flag for settings
160+
/// </summary>
161+
[SerializeField]
162+
private bool _isParameterRepeated = false;
163+
164+
/// <summary>
165+
/// Checks whether parameter repetition is performed for the entire model.
166+
/// </summary>
167+
/// <returns>True if parameter repetition is performed for the entire model; otherwise returns false.</returns>
168+
public bool GetOverrideFlagForModelParameterRepeat()
169+
{
170+
if (_model == null)
171+
{
172+
_model = transform.FindCubismModel(true);
173+
174+
if (_model == null)
175+
{
176+
return false;
177+
}
178+
}
179+
180+
return _model.GetOverrideFlagForModelParameterRepeat();
181+
}
182+
183+
/// <summary>
184+
/// Returns the flag indicating whether to override the parameter repeat.
185+
/// </summary>
186+
/// <returns>True if the parameter repeat is overridden, false otherwise.</returns>
187+
public bool GetOverrideFlagForParameterRepeat()
188+
{
189+
return _isOverriddenUserParameterRepeat;
190+
}
191+
192+
/// <summary>
193+
/// Sets the flag indicating whether to override the parameter repeat.
194+
/// </summary>
195+
/// <param name="value">True if it is to be overridden; otherwise, false.</param>
196+
public void SetOverrideFlagForParameterRepeat(bool value)
197+
{
198+
_isOverriddenUserParameterRepeat = value;
199+
}
200+
201+
/// <summary>
202+
/// Returns the repeat flag.
203+
/// </summary>
204+
/// <returns>True if repeating, false otherwise.</returns>
205+
public bool GetRepeatFlagForParameterRepeat()
206+
{
207+
return _isParameterRepeated;
208+
}
209+
210+
/// <summary>
211+
/// Sets the repeat flag.
212+
/// </summary>
213+
/// <param name="value">True to enable repeating, false otherwise.</param>
214+
public void SetRepeatFlagForParameterRepeat(bool value)
215+
{
216+
_isParameterRepeated = value;
217+
}
218+
219+
/// <summary>
220+
/// Gets whether the parameter has the repeat setting.
221+
/// </summary>
222+
/// <returns>True if it is set, otherwise returns false.</returns>
223+
public bool IsRepeat()
224+
{
225+
bool isRepeat;
226+
227+
// パラメータリピート処理を行うか判定
228+
if (GetOverrideFlagForModelParameterRepeat() || _isOverriddenUserParameterRepeat)
229+
{
230+
// SDK側で設定されたリピート情報を使用する
231+
isRepeat = _isParameterRepeated;
232+
}
233+
else
234+
{
235+
// Editorで設定されたリピート情報を使用する
236+
isRepeat = GetParameterRepeats();
237+
}
238+
239+
return isRepeat;
240+
}
241+
242+
/// <summary>
243+
/// Returns the calculated result ensuring the value falls within the parameter's range.
244+
/// </summary>
245+
/// <param name="value">Parameter value</param>
246+
/// <returns>A value that falls within the parameter’s range. If the parameter does not exist, returns it as is.</returns>
247+
public float GetParameterRepeatValue(float value)
248+
{
249+
var maxValue = MaximumValue;
250+
var minValue = MinimumValue;
251+
var valueSize = maxValue - minValue;
252+
253+
if (maxValue < value)
254+
{
255+
var overValue = CubismMath.ModF(value - maxValue, valueSize);
256+
if (!float.IsNaN(overValue))
257+
{
258+
value = minValue + overValue;
259+
}
260+
else
261+
{
262+
value = maxValue;
263+
}
264+
}
265+
if (value < minValue)
266+
{
267+
var overValue = CubismMath.ModF(minValue - value, valueSize);
268+
if (!float.IsNaN(overValue))
269+
{
270+
value = maxValue - overValue;
271+
}
272+
else
273+
{
274+
value = minValue;
275+
}
276+
}
277+
278+
return value;
279+
}
280+
281+
/// <summary>
282+
/// Returns the result of clamping the value to ensure it falls within the parameter's range.
283+
/// </summary>
284+
/// <param name="value">Parameter value</param>
285+
/// <returns>The clamped value. If the parameter does not exist, returns it as is.</returns>
286+
public float GetParameterClampValue(float value)
287+
{
288+
var maxValue = MaximumValue;
289+
var minValue = MinimumValue;
290+
291+
return CubismMath.ClampF(value, minValue, maxValue);
292+
}
293+
294+
/// <summary>
295+
/// Returns the repeat of the parameter.
296+
/// </summary>
297+
/// <returns>The raw data parameter repeat from the Cubism Core.</returns>
298+
public bool GetParameterRepeats()
299+
{
300+
return Convert.ToBoolean(UnmanagedParameters.Repeats[UnmanagedIndex]);
301+
}
302+
145303

146304
/// <summary>
147305
/// Revives the instance.

Assets/Live2D/Cubism/Core/Unmanaged/CubismCoreDll.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,11 @@ public static class CubismCoreDll
214214
[DllImport(DllName, EntryPoint = "csmGetParameterValues")]
215215
public static extern unsafe float* GetParameterValues(IntPtr model);
216216
/// <summary>
217+
/// Gets Parameter Repeat informations.
218+
/// </summary>
219+
[DllImport(DllName, EntryPoint = "csmGetParameterRepeats")]
220+
public static extern unsafe int* GetParameterRepeats(IntPtr model);
221+
/// <summary>
217222
/// Gets number of key values of each parameter.
218223
/// </summary>
219224
[DllImport(DllName, EntryPoint = "csmGetParameterKeyCounts")]

Assets/Live2D/Cubism/Core/Unmanaged/CubismUnmanagedParameters.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ public sealed class CubismUnmanagedParameters
5454
/// </summary>>
5555
public CubismUnmanagedFloatArrayView Values { get; private set; }
5656

57+
/// <summary>
58+
/// Parameter Repeat informations.
59+
/// </summary>>
60+
public CubismUnmanagedIntArrayView Repeats { get; private set; }
61+
5762
/// <summary>
5863
/// Number of key values of each parameter.
5964
/// </summary>>
@@ -104,6 +109,9 @@ internal unsafe CubismUnmanagedParameters(IntPtr modelPtr)
104109
length = CubismCoreDll.GetParameterCount(modelPtr);
105110
Values = new CubismUnmanagedFloatArrayView(CubismCoreDll.GetParameterValues(modelPtr), length);
106111

112+
length = CubismCoreDll.GetParameterCount(modelPtr);
113+
Repeats = new CubismUnmanagedIntArrayView(CubismCoreDll.GetParameterRepeats(modelPtr), length);
114+
107115
length = CubismCoreDll.GetParameterCount(modelPtr);
108116
KeyCounts = new CubismUnmanagedIntArrayView(CubismCoreDll.GetParameterKeyCounts(modelPtr), length);
109117

Assets/Live2D/Cubism/Editor/Importers/CubismModel3JsonImporter.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,9 +376,22 @@ private static void CopyUserData<T>(T[] source, T[] destination, bool copyCompon
376376

377377
// Copy component.
378378
var destinationComponent = destinationT.GetOrAddComponent(sourceComponent.GetType());
379-
380-
381-
EditorUtility.CopySerialized(sourceComponent, destinationComponent);
379+
if (destinationComponent is CubismDisplayInfoParameterName cdiParameterName && !string.IsNullOrEmpty(cdiParameterName.Name))
380+
{
381+
var name = cdiParameterName.Name;
382+
EditorUtility.CopySerialized(sourceComponent, destinationComponent);
383+
cdiParameterName.Name = name;
384+
}
385+
else if (destinationComponent is CubismDisplayInfoPartName cdiPartName && !string.IsNullOrEmpty(cdiPartName.Name))
386+
{
387+
var name = cdiPartName.Name;
388+
EditorUtility.CopySerialized(sourceComponent, destinationComponent);
389+
cdiPartName.Name = name;
390+
}
391+
else
392+
{
393+
EditorUtility.CopySerialized(sourceComponent, destinationComponent);
394+
}
382395
}
383396
}
384397
}

0 commit comments

Comments
 (0)