//根据NetRoleEquipmentData创建RoleEquipmentData public static RoleEquipmentData NetDataToRoleEquipmentData(NetRoleEquipmentData data) { RoleEquipmentData roleData = new RoleEquipmentData(); roleData.RolePlastomerId = data.plastomer_id.ToString(); roleData.RoleEquipmentItems = new List <RoleEquipmentItem> (); for (int i = 0; i < data.equip_list.Length; i++) { roleData.RoleEquipmentItems.Add(CreateRoleEquipmentItemById(data.equip_list[i].item_id.ToString())); } return(roleData); }
//根据RoleEquipmentData创建NetRoleEquipmentData public static NetRoleEquipmentData RoleEquipmentDataToNetData(RoleEquipmentData data) { NetRoleEquipmentData netData = new NetRoleEquipmentData(); netData.plastomer_id = int.Parse(data.RolePlastomerId); netData.equip_list = new NetEquipmentItem[data.RoleEquipmentItems.Count]; for (int i = 0; i < data.RoleEquipmentItems.Count; i++) { netData.equip_list[i] = new NetEquipmentItem(); netData.equip_list[i].item_id = int.Parse((((int)data.RoleEquipmentItems[i].EquipmentType) / 10).ToString() + data.RoleEquipmentItems[i].EquipmentId); netData.equip_list[i].item_type = ((int)data.RoleEquipmentItems[i].EquipmentType); } return(netData); }
/// <summary> /// 保存角色的服装数据到服务器和本地 /// </summary> /// <returns><c>true</c>, if role equipment to server and local was saved, <c>false</c> otherwise.</returns> /// <param name="equipmentData">Equipment data.</param> public bool SaveRoleEquipmentToServerAndLocal(RoleEquipmentData equipmentData, RoleEquipmentItem item) { //item更新到equipmentData里面。 for (int i = 0; i < equipmentData.RoleEquipmentItems.Count; i++) { if (item.EquipmentType.Equals(equipmentData.RoleEquipmentItems[i].EquipmentType)) { equipmentData.RoleEquipmentItems[i] = item; break; } } //新的equipmentData持久化存储。 //TODO return(true); }
/// <summary> /// 初始化角色的插槽和附件信息 /// </summary> /// <param name="successfulCallBack">Successful call back.</param> /// <param name="failCallBack">Fail call back.</param> public void SpineInitRoleSlotAttachment(RoleAnaimationData animationData, SkeletonAnimation skeletonAnim, RoleEquipmentData tempData, CombineTextureData combineTextureData, Dictionary <int, List <string> > TempSlotAttachmentDic, List <Texture2D> destoryTextureList, Action <bool> setRoleStatus, bool isTP, bool isHide, Action <string> failCallBack = null) { if (null != setRoleStatus && isHide) { setRoleStatus.Invoke(false); } if (null != combineTextureData.initRoleCoroutine) { GameManager.Instance.StopCoroutine(combineTextureData.initRoleCoroutine); } combineTextureData.initRoleCoroutine = GameManager.Instance.StartCoroutine(spineChangeCoreLogic.InitRoleEquipment(animationData, skeletonAnim, tempData, combineTextureData, TempSlotAttachmentDic, destoryTextureList, setRoleStatus, failCallBack, isTP)); }
/// <summary> /// 角色换装 /// </summary> /// <param name="slotStr">Slot string.</param> /// <param name="texture2D">Texture2 d.</param> /// <param name="successfulCallBack">Successful call back.</param> /// <param name="failCallBack">Fail call back.</param> public void SpineRoleChange(RoleAnaimationData animationData, SkeletonAnimation skeletonAnim, CombineTextureData combineTextureData, Dictionary <int, List <string> > slotAttachmentDic, RoleEquipmentData equipmentData, RoleEquipmentItem equipmentItem, bool isTexturePackaged, List <Texture2D> destoryTextureList, Action <bool> setRoleStatus, Action <string> failCallBack = null) { if (null != setRoleStatus) { setRoleStatus.Invoke(false); } System.DateTime time1 = System.DateTime.Now; SpineChangeDataLogic.Instance.GetRoleEquipmentObject(equipmentItem, (UnityEngine.Object o) => { //SpineChangeDataLogic.Instance.SaveRoleEquipmentToServerAndLocal (equipmentData, equipmentItem); if (null != combineTextureData.changeRoleCoroutine) { GameManager.Instance.StopCoroutine(combineTextureData.changeRoleCoroutine); } combineTextureData.changeRoleCoroutine = GameManager.Instance.StartCoroutine(spineChangeCoreLogic.Change(animationData, skeletonAnim, combineTextureData, slotAttachmentDic, o as EquipmentObject, isTexturePackaged, destoryTextureList, setRoleStatus, failCallBack)); System.DateTime time2 = System.DateTime.Now; if (null != GameObject.FindObjectOfType <ChangeTest> ()) { GameObject.FindObjectOfType <ChangeTest> ().text.text += "加载AB用时:" + (time2 - time1).TotalMilliseconds + "\n"; } }); }
/// <summary> /// 创建角色 /// </summary> /// <param name="skeletonJson">Skeleton json.</param> /// <param name="atlasText">Atlas text.</param> /// <param name="textures">Textures.</param> /// <param name="material">Material.</param> /// <param name="initialize">If set to <c>true</c> initialize.</param> /// <param name="skinName">Skin name.</param> /// <param name="animationName">Animation name.</param> /// <param name="loop">If set to <c>true</c> loop.</param> /// <param name="pos">Position.</param> /// <param name="successfulCallBack">Successful call back.</param> /// <param name="failCallBack">Fail call back.</param> public void SpineCreateRole(SpineAvatarType avatarType, RoleEquipmentItem equipmentItem, Material material, bool initialize, string name, string skinName, string animationName, bool loop, RoleEquipmentData data, Action <Avatar> createSucCallBack, Action <string> failCallBack, Action <bool> createQueueCallBack, bool isTP) { SpineChangeDataLogic.Instance.GetRoleEquipmentObject(equipmentItem, (UnityEngine.Object o) => { spineChangeCoreLogic.Create(avatarType, o as EquipmentObject, material, initialize, name, skinName, animationName, loop, data, createSucCallBack, failCallBack, createQueueCallBack, isTP); }); }
/// <summary> /// 初始化角色的插槽附件 /// </summary> /// <returns><c>true</c>, if role slot attachment info was inited, <c>false</c> otherwise.</returns> public System.Collections.IEnumerator InitRoleEquipment(RoleAnaimationData animationData, SkeletonAnimation skeletonAnim, RoleEquipmentData tempData, CombineTextureData combineTextureData, Dictionary <int, List <string> > TempSlotAttachmentDic, List <Texture2D> destoryTextureList, Action <bool> setRoleStatus, Action <string> failCallBack, bool isTP) { if (skeletonAnim == null) { if (null != failCallBack) { failCallBack.Invoke("<-初始化角色的插槽和附件信息失败->"); } yield break; } System.DateTime time1 = System.DateTime.Now; for (int i = 0; i < tempData.RoleEquipmentItems.Count; i++) { // if(tempData.RoleEquipmentItems[i].EquipmentType == RoleEquipmentType.RoleHat || tempData.RoleEquipmentItems[i].EquipmentType == RoleEquipmentType.RoleGlasses) // continue; EquipmentRes res = SpineChangeDataLogic.Instance.GetRoleEquipmentObject(tempData.RoleEquipmentItems[i], null); while (!res.isDone) { yield return(null); } combineTextureData.changeRoleCoroutine = GameManager.Instance.StartCoroutine(Change(animationData, skeletonAnim, combineTextureData, TempSlotAttachmentDic, res.GetRes(), isTP, destoryTextureList, setRoleStatus, failCallBack, true)); yield return(combineTextureData.changeRoleCoroutine); } System.DateTime time2 = System.DateTime.Now; if (null != GameObject.FindObjectOfType <ChangeTest> ()) { GameObject.FindObjectOfType <ChangeTest> ().text.text += "创建角色并初始化用时:" + (time2 - time1).TotalMilliseconds + "\n"; } if (null != roleObject) { setRoleStatus.Invoke(true); } if (isTP) { //需要合图集 UpdateRoleEquipment(skeletonAnim, combineTextureData); } else { DestroyResources(combineTextureData); } }
/// <summary> /// 通过Spine生成的json,atlas文件创建角色 /// </summary> /// <param name="skeletonJson">Skeleton json.</param> /// <param name="atlasText">Atlas text.</param> /// <param name="textures">Textures.</param> /// <param name="material">Material.</param> /// <param name="initialize">If set to <c>true</c> initialize.</param> /// <param name="skinName">Skin name.</param> /// <param name="animationName">Animation name.</param> /// <param name="loop">If set to <c>true</c> loop.</param> public void Create(SpineAvatarType avatarType, EquipmentObject eo, Material material, bool initialize, string name, string skinName, string animationName, bool loop, RoleEquipmentData data, Action <Avatar> createSucCallBack, Action <string> failCallBack, Action <bool> createQueueCallBack, bool isTP) { #if UNITY_ANDROID GameManager.Instance.StartCoroutine(Create(avatarType, eo, SkeletonDataAsset.CreateRuntimeInstance(eo.equipmentJsonAsset, AtlasAsset.CreateRuntimeInstance(eo.equipmentTxtAsset, eo.equipmentTexture_Alpha, eo.equipmentTexture_RGB, material, initialize, true), initialize), name, animationName, skinName, loop, data, createSucCallBack, failCallBack, createQueueCallBack, isTP)); #elif UNITY_IPHONE || UNITY_EDITOR GameManager.Instance.StartCoroutine(Create(avatarType, eo, SkeletonDataAsset.CreateRuntimeInstance(eo.equipmentJsonAsset, AtlasAsset.CreateRuntimeInstance(eo.equipmentTxtAsset, new Texture2D[] { eo.equipmentTexture }, material, initialize), initialize), name, animationName, skinName, loop, data, createSucCallBack, failCallBack, createQueueCallBack, isTP)); #endif }
/// <summary> /// 通过skeletonDataAsset创建角色 /// </summary> /// <returns><c>true</c>, if spine role was created, <c>false</c> otherwise.</returns> /// <param name="skeletonDataAsset">Skeleton data asset.</param> /// <param name="animationName">Animation name.</param> /// <param name="skinName">Skin name.</param> /// <param name="pos">Position.</param> private System.Collections.IEnumerator Create(SpineAvatarType avatarType, EquipmentObject eo, SkeletonDataAsset skeletonDataAsset, string roleGameObjectName, string animationName, string skinName, bool loop, RoleEquipmentData data, Action <Avatar> createSucCallBack, Action <string> failCallBack, Action <bool> createQueueCallBack, bool isTP) { if (skeletonDataAsset == null) { if (failCallBack != null) { failCallBack.Invoke("<-创建角色失败->"); } yield break; } GameObject roleSpine = new GameObject { name = roleGameObjectName }; roleObject = roleSpine; skeletonAnimation = SkeletonAnimation.AddToGameObject(roleSpine, skeletonDataAsset); skeletonAnimation.Initialize(false); skeletonAnimation.Skeleton.SetSkin(skinName); skeletonAnimation.state.SetAnimation(SpineConstValue.TrackIndex, animationName, loop); CreateSlotAttachmentDic(skeletonAnimation.Skeleton.Data.DefaultSkin.Attachments); if (null == data) { equipmentData = new RoleEquipmentData(); equipmentData.RoleEquipmentItems = new List <RoleEquipmentItem> (); } else { equipmentData = data; } CombineTextureData combineTextureData = new CombineTextureData(); combineTextureData.resultData = new CombineFinishedData(); RoleAnaimationData rad = new RoleAnaimationData { roleJsonStr = eo.equipmentJsonAsset.text }; Avatar avatar = new SpineAvatar(equipmentData, skeletonAnimation, slotAttachmentDic, rad, combineTextureData, avatarType, roleObject, eo.equipmentJsonAsset.text); combineTextureData.resultData.self = avatar; if (createSucCallBack != null) { if (null != roleSpine) { roleSpine.SetActive(false); createSucCallBack.Invoke(avatar); } } //初始化角色的所有服装信息 if (equipmentData.RoleEquipmentItems.Count > 0) { if (null != combineTextureData.initRoleCoroutine) { GameManager.Instance.StopCoroutine(combineTextureData.initRoleCoroutine); } combineTextureData.initRoleCoroutine = GameManager.Instance.StartCoroutine(InitRoleEquipment(rad, skeletonAnimation, equipmentData, combineTextureData, slotAttachmentDic, avatar.GetDestoryTextureList, roleSpine.SetActive, null, isTP)); yield return(combineTextureData.initRoleCoroutine); } else { roleSpine.SetActive(true); } if (null != createQueueCallBack) { createQueueCallBack.Invoke(true); } }