/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. */ using Live2D.Cubism.Core.Unmanaged; using Live2D.Cubism.Framework; using UnityEngine; namespace Live2D.Cubism.Core { /// /// Single part. /// [CubismDontMoveOnReimport] public sealed class CubismPart : MonoBehaviour { #region Factory Methods /// /// Creates parts for a . /// /// Handle to unmanaged model. /// Parts root. internal static GameObject CreateParts(CubismUnmanagedModel unmanagedModel) { var root = new GameObject("Parts"); // Create parts. var unmanagedParts = unmanagedModel.Parts; var buffer = new CubismPart[unmanagedParts.Count]; for (var i = 0; i < buffer.Length; ++i) { var proxy = new GameObject(); buffer[i] = proxy.AddComponent(); buffer[i].transform.SetParent(root.transform); buffer[i].Reset(unmanagedModel, i); } return root; } #endregion /// /// Unmanaged parts from unmanaged model. /// private CubismUnmanagedParts UnmanagedParts { get; set; } /// /// backing field. /// [SerializeField, HideInInspector] private int _unmanagedIndex = -1; /// /// Position in unmanaged arrays. /// internal int UnmanagedIndex { get { return _unmanagedIndex; } private set { _unmanagedIndex = value; } } /// /// Copy of Id. /// public string Id { get { // Pull data. return UnmanagedParts.Ids[UnmanagedIndex]; } } /// /// Current opacity. /// [SerializeField, HideInInspector] public float Opacity; /// /// Revives instance. /// /// TaskableModel to unmanaged unmanagedModel. internal void Revive(CubismUnmanagedModel unmanagedModel) { UnmanagedParts = unmanagedModel.Parts; } /// /// Restores instance to initial state. /// /// TaskableModel to unmanaged unmanagedModel. /// Position in unmanaged arrays. private void Reset(CubismUnmanagedModel unmanagedModel, int unmanagedIndex) { Revive(unmanagedModel); UnmanagedIndex = unmanagedIndex; name = Id; Opacity = UnmanagedParts.Opacities[unmanagedIndex]; } } }