DressUpControl.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // Magica Cloth.
  2. // Copyright (c) MagicaSoft, 2020-2022.
  3. // https://magicasoft.jp
  4. using System.Collections.Generic;
  5. using UnityEngine;
  6. using UnityEngine.UI;
  7. namespace MagicaCloth
  8. {
  9. /// <summary>
  10. /// 着せ替えコントロールサンプル
  11. /// </summary>
  12. public class DressUpControl : MonoBehaviour
  13. {
  14. [SerializeField]
  15. private GameObject partsItemPrefab;
  16. [SerializeField]
  17. private VerticalLayoutGroup verticalLayoutGroup;
  18. [Space]
  19. [SerializeField]
  20. private MagicaAvatar avatar;
  21. /// <summary>
  22. /// 着せ替えグループ
  23. /// </summary>
  24. [System.Serializable]
  25. public class AvatarPartsGroup
  26. {
  27. /// <summary>
  28. /// グループ名
  29. /// </summary>
  30. public string groupName;
  31. /// <summary>
  32. /// AvatarPartsプレハブのリスト
  33. /// </summary>
  34. public List<GameObject> partsPrefabList = new List<GameObject>();
  35. /// <summary>
  36. /// 管理ID
  37. /// </summary>
  38. [System.NonSerialized]
  39. public int id;
  40. /// <summary>
  41. /// 現在のパーツハンドル
  42. /// </summary>
  43. [System.NonSerialized]
  44. public int handle;
  45. /// <summary>
  46. /// 現在のリストインデックス
  47. /// </summary>
  48. [System.NonSerialized]
  49. public int index;
  50. }
  51. [SerializeField]
  52. public List<AvatarPartsGroup> avatarPartsGroupList = new List<AvatarPartsGroup>();
  53. void Start()
  54. {
  55. Init();
  56. }
  57. void Update()
  58. {
  59. }
  60. private void OnDestroy()
  61. {
  62. avatar = null;
  63. partsItemPrefab = null;
  64. verticalLayoutGroup = null;
  65. }
  66. private void Init()
  67. {
  68. for (int i = 0; i < avatarPartsGroupList.Count; i++)
  69. {
  70. // UIとボタンイベント追加
  71. var group = avatarPartsGroupList[i];
  72. group.id = i;
  73. var item = Instantiate(partsItemPrefab);
  74. var ui = item.GetComponent<UIPartsItem>();
  75. ui.Init(group.groupName, i, (id, dir) =>
  76. {
  77. ChangeParts(id, dir);
  78. });
  79. item.transform.SetParent(verticalLayoutGroup.transform);
  80. item.transform.localScale = Vector3.one;
  81. // 初期装備
  82. ChangeParts(i, 0);
  83. }
  84. }
  85. /// <summary>
  86. /// アバターパーツ変更
  87. /// </summary>
  88. /// <param name="id"></param>
  89. /// <param name="dir"></param>
  90. private void ChangeParts(int id, int dir)
  91. {
  92. //Debug.Log("id:" + id + " dir:" + dir);
  93. var group = avatarPartsGroupList[id];
  94. if (group.handle != 0)
  95. {
  96. avatar.DetachAvatarParts(group.handle);
  97. group.handle = 0;
  98. }
  99. var index = group.index + dir;
  100. int cnt = group.partsPrefabList.Count;
  101. if (index < 0)
  102. index += cnt;
  103. else if (index >= cnt)
  104. index -= cnt;
  105. group.index = index;
  106. group.handle = avatar.AttachAvatarParts(group.partsPrefabList[index]);
  107. }
  108. /// <summary>
  109. /// 全パーツ削除
  110. /// </summary>
  111. public void Clear()
  112. {
  113. foreach (var group in avatarPartsGroupList)
  114. {
  115. if (group.handle != 0)
  116. {
  117. avatar.DetachAvatarParts(group.handle);
  118. group.handle = 0;
  119. }
  120. }
  121. }
  122. }
  123. }