// 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;
}
}
}
}
}