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