using Metaverse;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Example : MonoBehaviour
{
[SerializeField] private AvatarOutlookDataConfig outlookConfig;
[SerializeField] private AvatarHairDataConfig hairConfig;
[SerializeField] private AvatarGlassesDataConfig glassesConfig;
[SerializeField] private AvatarBeardDataConfig beardConfig;
[SerializeField] private GameObject outlookItemPrefab;
[SerializeField] private GameObject hairItemPrefab;
[SerializeField] private GameObject glassesItemPrefab;
[SerializeField] private GameObject beardItemPrefab;
[SerializeField] private SkinnedMeshRenderer head, body, top, bottom, footwear, hair, glasses, beard;
private Material currentHeadMat;
private Material cacheHeadMat;
[SerializeField] int sum;
private void Start()
{
StartCoroutine(InitOutlook());
StartCoroutine(InitHair());
StartCoroutine(InitGlasses());
StartCoroutine(InitBeard());
}
private void Update()
{
/*
if (Input.GetKeyDown(KeyCode.A))
{
Replacement(sum);
sum++;
}
if (Input.GetKeyDown(KeyCode.S))
{
ChangingHair(sum);
sum++;
}
if (Input.GetKeyDown(KeyCode.D))
{
ChangeGlasses(sum);
sum++;
}
if (Input.GetKeyDown(KeyCode.F))
{
faceTransplant(sum);
sum++;
}
*/
}
///
/// »»Ò·þ£¨·¶Î§0-14£©
///
///
public void Replacement(int index1 = 0)
{
if (index1 >= outlookConfig.data.Count)
{
return;
}
int index = index1;
head.sharedMesh = outlookConfig.data[index].headMesh;
head.sharedMaterial = currentHeadMat != null ? currentHeadMat : outlookConfig.data[index].headMaterial;
cacheHeadMat = outlookConfig.data[index].headMaterial;
body.sharedMesh = outlookConfig.data[index].bodyMesh;
body.sharedMaterial = outlookConfig.data[index].bodyMaterial;
top.sharedMesh = outlookConfig.data[index].topMesh;
top.sharedMaterial = outlookConfig.data[index].topMaterial;
bottom.sharedMesh = outlookConfig.data[index].bottomMesh;
bottom.sharedMaterial = outlookConfig.data[index].bottomMaterial;
footwear.sharedMesh = outlookConfig.data[index].footwearMesh;
footwear.sharedMaterial = outlookConfig.data[index].footwearMaterial;
}
///
/// »»Í··¢£¨·¶Î§0-4£©
///
///
public void ChangingHair(int index1 = 0)
{
if (index1 >= hairConfig.data.Count)
{
return;
}
int index = index1;
hair.sharedMesh = hairConfig.data[index].hairMesh;
hair.sharedMaterial = hairConfig.data[index].hairMaterial;
}
///
/// »»ÑÛ¾µ£¨·¶Î§0-5£©
///
///
public void ChangeGlasses(int index1 = 0)
{
if (index1 >= glassesConfig.data.Count)
{
return;
}
int index = index1;
glasses.sharedMesh = glassesConfig.data[index].glassesMesh;
glasses.sharedMaterial = glassesConfig.data[index].glassesMaterial;
}
///
/// »»Á³£¨·¶Î§0-4£©
///
///
public void faceTransplant(int index1)
{
if (index1 >= beardConfig.data.Count)
{
return;
}
int index = index1;
var data = beardConfig.data[index];
Debug.Log(data.type);
switch (data.type)
{
case AvatarBeardData.Type.Mesh:
beard.sharedMesh = beardConfig.data[index].beardMesh;
beard.sharedMaterial = beardConfig.data[index].beardMaterial;
currentHeadMat = null;
if (cacheHeadMat != null) head.sharedMaterial = cacheHeadMat;
break;
case AvatarBeardData.Type.Texture:
head.sharedMaterial = beardConfig.data[index].beardMaterial;
currentHeadMat = beardConfig.data[index].beardMaterial;
beard.sharedMesh = null;
beard.sharedMaterial = null;
break;
}
}
private IEnumerator InitOutlook()
{
if (outlookConfig != null)
{
for (int i = 0; i < outlookConfig.data.Count; i++)
{
var data = outlookConfig.data[i];
var instance = Instantiate(outlookItemPrefab);
instance.transform.SetParent(outlookItemPrefab.transform.parent, false);
instance.transform.SetSiblingIndex(outlookItemPrefab.transform.parent.childCount - 2);
instance.GetComponent().sprite = data.thumb;
instance.SetActive(true);
instance.GetComponent().onValueChanged.AddListener(isOn =>
{
if (isOn)
{
int index = instance.transform.GetSiblingIndex();
head.sharedMesh = outlookConfig.data[index].headMesh;
head.sharedMaterial = currentHeadMat != null ? currentHeadMat : outlookConfig.data[index].headMaterial;
cacheHeadMat = outlookConfig.data[index].headMaterial;
body.sharedMesh = outlookConfig.data[index].bodyMesh;
body.sharedMaterial = outlookConfig.data[index].bodyMaterial;
top.sharedMesh = outlookConfig.data[index].topMesh;
top.sharedMaterial = outlookConfig.data[index].topMaterial;
bottom.sharedMesh = outlookConfig.data[index].bottomMesh;
bottom.sharedMaterial = outlookConfig.data[index].bottomMaterial;
footwear.sharedMesh = outlookConfig.data[index].footwearMesh;
footwear.sharedMaterial = outlookConfig.data[index].footwearMaterial;
}
});
yield return null;
}
}
}
private IEnumerator InitHair()
{
if (hairConfig != null)
{
for (int i = 0; i < hairConfig.data.Count; i++)
{
var data = hairConfig.data[i];
var instance = Instantiate(hairItemPrefab);
instance.transform.SetParent(hairItemPrefab.transform.parent, false);
instance.transform.SetSiblingIndex(hairItemPrefab.transform.parent.childCount - 2);
instance.GetComponent().sprite = data.thumb;
instance.SetActive(true);
instance.GetComponent().onValueChanged.AddListener(isOn =>
{
if (isOn)
{
int index = instance.transform.GetSiblingIndex();
hair.sharedMesh = hairConfig.data[index].hairMesh;
hair.sharedMaterial = hairConfig.data[index].hairMaterial;
}
});
yield return null;
}
}
}
private IEnumerator InitGlasses()
{
if (glassesConfig != null)
{
for (int i = 0; i < glassesConfig.data.Count; i++)
{
var data = glassesConfig.data[i];
var instance = Instantiate(glassesItemPrefab);
instance.transform.SetParent(glassesItemPrefab.transform.parent, false);
instance.transform.SetSiblingIndex(glassesItemPrefab.transform.parent.childCount - 2);
instance.GetComponent().sprite = data.thumb;
instance.SetActive(true);
instance.GetComponent().onValueChanged.AddListener(isOn =>
{
if (isOn)
{
int index = instance.transform.GetSiblingIndex();
glasses.sharedMesh = glassesConfig.data[index].glassesMesh;
glasses.sharedMaterial = glassesConfig.data[index].glassesMaterial;
}
});
yield return null;
}
}
}
private IEnumerator InitBeard()
{
if (beardConfig != null)
{
for (int i = 0; i < beardConfig.data.Count; i++)
{
var data = beardConfig.data[i];
var instance = Instantiate(beardItemPrefab);
instance.transform.SetParent(beardItemPrefab.transform.parent, false);
instance.transform.SetSiblingIndex(beardItemPrefab.transform.parent.childCount - 2);
instance.GetComponent().sprite = data.thumb;
instance.SetActive(true);
instance.GetComponent().onValueChanged.AddListener(isOn =>
{
if (isOn)
{
int index = instance.transform.GetSiblingIndex();
Debug.Log(data.type);
switch (data.type)
{
case AvatarBeardData.Type.Mesh:
beard.sharedMesh = beardConfig.data[index].beardMesh;
beard.sharedMaterial = beardConfig.data[index].beardMaterial;
currentHeadMat = null;
if (cacheHeadMat != null) head.sharedMaterial = cacheHeadMat;
break;
case AvatarBeardData.Type.Texture:
head.sharedMaterial = beardConfig.data[index].beardMaterial;
currentHeadMat = beardConfig.data[index].beardMaterial;
beard.sharedMesh = null;
beard.sharedMaterial = null;
break;
}
}
});
yield return null;
}
}
}
}