using Cysharp.Threading.Tasks; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; public class CharacterManager : MonoBehaviour { public static CharacterManager Inst; public CharacterRender selfRender; /// 已穿戴的物品信息 public List WornPackageItems = new List(); /// 临时已穿戴的物品信息 public List TempWornPackageItems = new List(); public static Camera mainCam; public static Camera UICam; void Start() { Inst=this; mainCam = GameObject.Find("Camera").GetComponent(); UICam = GameObject.Find("UICamera").GetComponent(); } /// /// 匹配玩家的Character /// /// public void MatchCharacterRender(CharacterRender cr) { if (cr) selfRender = cr; } /// /// 重新匹配玩家扭脸和换装数据 /// /// public async void CharacterClothReMatch(CharacterRender cr) { Debug.Log(selfRender.dressRenders.Count); if (selfRender.dressRenders.Count>0) { foreach (var item in selfRender.dressRenders) { await ChangePlayerTex(cr, item.Value.good); } } } public async UniTask ChangePlayerTex (CharacterRender cr, Good config) { //Debug.Log(config.id); switch (int.Parse(config.assetsType)) { case 1: await cr.SetPlayerCloth(config); break; case 2: await cr.SetPlayerBlendShape(config); break; case 3: await cr.SetTextrue(config); break; case 4: await cr.SetEyeTextrue(config); break; case 5: await cr.SetTextrue(config); break; } } public async UniTask CreatNewDress(Good good, CharacterDressRender cdr, string dir = null) where T : UnityEngine.Object { int type = good.id / 10000; string assetsName = null; if (good.assetsType == "1") { assetsName = ((good.id / 100) * 100).ToString(); if ((good.id / 100) == 1415)//面饰 { assetsName = good.id.ToString(); } } else { if (type == 4 || type == 9)//眉毛/胡子 { assetsName = $"{good.id}_BaseMap"; } if (type == 15)//纹身 { assetsName = ((good.id / 100) * 100).ToString(); assetsName = $"{int.Parse(assetsName) + 1}_{good.id}_BaseMap"; } } if (string.IsNullOrEmpty(assetsName)) { assetsName = good.id.ToString(); } assetsName += dir; var handle = await YooAssetManager.Instance.LoadAsset(assetsName); if (handle as GameObject) { cdr.gameObject = GameObject.Instantiate(handle); } else { cdr.gameObject = handle; } //Debug.Log(type); if (type == 2) { int lastTwoDigits = good.id % 100; string texName = $"20000_200{lastTwoDigits.ToString("00")}_BaseMap"; var tex = await YooAssetManager.Instance.LoadAsset(texName); ((GameObject)cdr.gameObject).transform.GetChild(0).GetComponent().material.SetTexture("_BaseMap", tex); //Debug.Log(tex); //Debug.Log(cdr.gameObject); } if (type == 8) { if(good.id!=80000) { var mat = await YooAssetManager.Instance.LoadAsset(good.id.ToString() + "_mat"); ((GameObject)cdr.gameObject).transform.GetChild(0).GetComponent().material = mat; } } if (type != 15 && type > 9 && type < 18) { var mat = await YooAssetManager.Instance.LoadAsset(good.id.ToString() + "_mat"); ((GameObject)cdr.gameObject).transform.GetChild(0).GetComponent().material = mat; } cdr.good = good; return (T)cdr.gameObject; } /// /// 释放selfRender(CharacterRender)所挂在的人物模型 /// /// public void CharacterDispose() { Destroy(selfRender.gameObject); } }