// Magica Cloth. // Copyright (c) MagicaSoft, 2020-2022. // https://magicasoft.jp using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace MagicaCloth { /// /// 着せ替えコントロールサンプル /// public class DressUpControl : MonoBehaviour { [SerializeField] private GameObject partsItemPrefab; [SerializeField] private VerticalLayoutGroup verticalLayoutGroup; [Space] [SerializeField] private MagicaAvatar avatar; /// /// 着せ替えグループ /// [System.Serializable] public class AvatarPartsGroup { /// /// グループ名 /// public string groupName; /// /// AvatarPartsプレハブのリスト /// public List partsPrefabList = new List(); /// /// 管理ID /// [System.NonSerialized] public int id; /// /// 現在のパーツハンドル /// [System.NonSerialized] public int handle; /// /// 現在のリストインデックス /// [System.NonSerialized] public int index; } [SerializeField] public List avatarPartsGroupList = new List(); void Start() { Init(); } void Update() { } private void OnDestroy() { avatar = null; partsItemPrefab = null; verticalLayoutGroup = null; } private void Init() { for (int i = 0; i < avatarPartsGroupList.Count; i++) { // UIとボタンイベント追加 var group = avatarPartsGroupList[i]; group.id = i; var item = Instantiate(partsItemPrefab); var ui = item.GetComponent(); ui.Init(group.groupName, i, (id, dir) => { ChangeParts(id, dir); }); item.transform.SetParent(verticalLayoutGroup.transform); item.transform.localScale = Vector3.one; // 初期装備 ChangeParts(i, 0); } } /// /// アバターパーツ変更 /// /// /// private void ChangeParts(int id, int dir) { //Debug.Log("id:" + id + " dir:" + dir); var group = avatarPartsGroupList[id]; if (group.handle != 0) { avatar.DetachAvatarParts(group.handle); group.handle = 0; } var index = group.index + dir; int cnt = group.partsPrefabList.Count; if (index < 0) index += cnt; else if (index >= cnt) index -= cnt; group.index = index; group.handle = avatar.AttachAvatarParts(group.partsPrefabList[index]); } /// /// 全パーツ削除 /// public void Clear() { foreach (var group in avatarPartsGroupList) { if (group.handle != 0) { avatar.DetachAvatarParts(group.handle); group.handle = 0; } } } } }