public PartDataWhole TransformToPartsList(JoinType joinType, Transform trans, int selctIndex, byte[] pixels, byte[] drawPixel, byte[] drawTexture) { List <PartData> parts = new List <PartData>(); ResDragItem [] transList = trans.GetComponentsInChildren <ResDragItem>(); for (int i = 0; i < transList.Length; i++) { Transform img = transList[i].transform; if (img.GetComponent <Image>().sprite == null) { continue; } PartType type = transList[i].partType; byte[] b = img.GetComponent <Image>().sprite.texture.EncodeToPNG(); float[] pos = { img.localPosition.x, img.localPosition.y, img.localPosition.z }; float[] scale = { img.localScale.x, img.localScale.y, img.localScale.z }; PartData p = new PartData(type, b, pos, scale); parts.Add(p); } PartDataWhole partDataWhole = new PartDataWhole(joinType, selctIndex, pixels, drawPixel, parts, drawTexture); GameManager.instance.SetCurPartDataWhole(partDataWhole); //序列化 PersonManager.instance.SerializePerson(partDataWhole); return(partDataWhole); }
private void AddEvent() { //返回按钮 BtnHome.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); if (GameManager.instance.openType == OpenType.FirstEdit || GameManager.instance.openType == OpenType.BackEdit) { GameManager.instance.SetNextSceneName(SceneName.Home); TransitionView.instance.OpenTransition(); } else { PersonManager.instance.CurPersonPageIndex = 0;//画册进入编辑进入保存,返回画册应该是第一页 GameManager.instance.SetNextSceneName(SceneName.Calendar); TransitionView.instance.OpenTransition(); //刷新修改的人物 if (refreshCalendar != null) { refreshCalendar(CalendarDetailController.instance.curDetailIndex); } } }); //编辑按钮 BtnBack.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); PartDataWhole whole = GameManager.instance.curWhole; if (GameManager.instance.openType != OpenType.ReEdit) { GameManager.instance.SetOpenType(OpenType.BackEdit); } GameManager.instance.SetNextSceneName(SceneName.Join); TransitionView.instance.OpenTransition(); }); /*目前没有此按钮 * BtnSave.onClick.AddListener(delegate { #if !UNITY_EDITOR * ShowMask(false); #endif * AudioManager.instance.PlayAudio(EffectAudioType.Option, null); * SavePic(); * }); */ BtnGame.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); UIHelper.instance.LoadPrefab("Prefabs/game/window|window_choosegame", GameManager.instance.GetCanvas().transform, Vector3.zero, Vector3.one, true); }); }
//反序列化 public PartDataWhole DeserializePerson(string fileName) { IFormatter formatter = new BinaryFormatter(); string path = PersonDataPath + fileName + ".bin"; Debug.Log("des:" + path); if (!File.Exists(path)) { return(null); } Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); PartDataWhole whole = (PartDataWhole)formatter.Deserialize(stream); stream.Flush(); stream.Close(); return(whole); }
//序列化 public void SerializePerson(PartDataWhole whole) { IFormatter formatter = new BinaryFormatter(); DirectoryInfo info = new DirectoryInfo(PersonDataPath); if (!info.Exists) { Debug.Log("文件夹不存在:" + PersonDataPath); Directory.CreateDirectory(PersonDataPath); } string savePath = SavePath + ".bin"; Stream stream = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, whole); stream.Flush(); stream.Close(); }
private void AddBtnListener() { BtnBack.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); GameManager.instance.SetNextSceneName(SceneName.Index); TransitionView.instance.OpenTransition(); }); BtnDelete.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); ShowDeleteBtn(true); SwitchDelBtn(false); }); BtnDefault.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); ShowDeleteBtn(false); SwitchDelBtn(true); }); BtnPre.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); CalenderController.instance.CurPageIndex = Mathf.Max(0, CalenderController.instance.CurPageIndex - 1); PageScrollEndFunc(CalenderController.instance.CurPageIndex); }); BtnNext.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); CalenderController.instance.CurPageIndex = Mathf.Min(CalenderController.instance.CurPageIndex + 1, CalenderController.instance.PageNum - 1); Debug.Log("BtnNext:" + CalenderController.instance.CurPageIndex); PageScrollEndFunc(CalenderController.instance.CurPageIndex); }); BtnDetailBack.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); HideDetail(); }); BtnDetailEdit.onClick.AddListener(delegate { GameManager.instance.SetOpenType(OpenType.ReEdit); GameManager.instance.SetJoinShowAll(true); AudioManager.instance.PlayAudio(EffectAudioType.Option, null); string fileName = PersonManager.instance.pathList[CalenderController.instance.SelectItemId]; PartDataWhole whole = PersonManager.instance.DeserializePerson(fileName); GameManager.instance.homeSelectIndex = whole.ModelIndex; GameManager.instance.SetOpenType(OpenType.ReEdit); GameManager.instance.SetCurPartDataWhole(whole); GameManager.instance.curJoinType = whole.JoinType; PersonManager.instance.PersonFileName = fileName; GameManager.instance.SetNextSceneName(SceneName.Join); GameManager.instance.CalendarDetailShow = false; TransitionView.instance.OpenTransition(); }); BtnDetailGame.onClick.AddListener(delegate { GameManager.instance.openType = OpenType.ReEdit; GameManager.instance.displayType = DisplayType.NoDisplay;//从画册进入,没有展示页 string fileName = PersonManager.instance.pathList[CalenderController.instance.SelectItemId]; PartDataWhole whole = PersonManager.instance.DeserializePerson(fileName); GameManager.instance.SetCurPartDataWhole(whole); GameManager.instance.curJoinType = whole.JoinType; GameManager.instance.homeSelectIndex = whole.ModelIndex; //PersonManager.instance.PersonFileName = fileName; AudioManager.instance.PlayAudio(EffectAudioType.Option, null); UIHelper.instance.LoadPrefab("Prefabs/game/window|window_choosegame", GameManager.instance.GetCanvas().transform, Vector3.zero, Vector3.one, true); }); BtnDetailDownload.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); string path = PersonManager.instance.PersonImgPath + "/" + PersonManager.instance.pathList[CalenderController.instance.SelectItemId] + ".png"; UnityToIOS_SavePhotoToAlbum(path); }); }
public void LoadFileAnimal(PartDataWhole _whole) { if (_whole == null) { Debug.LogError("file is null:" + _whole.JoinType); } List <PartData> part = _whole.PartDataList; for (int i = 0; i < part.Count; i++) { PartType partType = part[i].PType; if (partType != PartType.Body && partType != PartType.Pixels && partType != PartType.drawPixels) { Vector3 pos = new Vector3(part[i].Pos[0], part[i].Pos[1], part[i].Pos[2]); Vector3 scale = new Vector3(part[i].Scale[0], part[i].Scale[1], part[i].Scale[2]); Debug.Log(pos); GameObject obj = null; string path = "Prefabs/join|gen_res"; if (partType == PartType.LeftHand || partType == PartType.RightHand || partType == PartType.LeftLeg || partType == PartType.RightLeg)//手脚 { obj = UIHelper.instance.LoadPrefab(path, joinMainView.HandLegCG.transform, pos, scale); } else if (partType == PartType.TrueBody) { obj = UIHelper.instance.LoadPrefab(path, joinMainView.TrueBodyCG.transform, pos, scale); } else if (partType == PartType.Head) { joinMainView.targetHeadPos = pos; obj = UIHelper.instance.LoadPrefab(path, joinMainView.HeadCG.transform, Vector3.zero, Vector3.one, false); joinMainView.EyeMouthHairCG.transform.SetParent(obj.transform); obj.transform.localScale = scale; obj.transform.localPosition = pos; } else if (partType == PartType.LeftEye || partType == PartType.RightEye || partType == PartType.Mouth || partType == PartType.Hair) { obj = UIHelper.instance.LoadPrefab(path, joinMainView.EyeMouthHairCG.transform, pos, scale); } else if (partType == PartType.Hat || partType == PartType.HeadWear) { obj = UIHelper.instance.LoadPrefab(path, joinMainView.HatHeadwearCG.transform, pos, scale); } Image img = obj.transform.GetComponent <Image>(); Texture2D t = new Texture2D(500, 500, TextureFormat.RGBA32, false); t.filterMode = FilterMode.Point; t.LoadImage(part[i].ImgBytes); t.Apply(false); Sprite s = Sprite.Create(t, new Rect(0, 0, t.width, t.height), new Vector2(0.5f, 0.5f)); img.sprite = s; img.SetNativeSize(); obj.transform.localScale = scale; ResDragItem item = obj.GetComponent <ResDragItem>(); if (item == null) { item = obj.AddComponent <ResDragItem>(); } item.partType = partType; item.LoadInitItem(partType, s); } } }
public void LoadFile(PartDataWhole _whole) { Texture2D drawTexture = null; List <PartData> part = _whole.PartDataList; for (int i = 0; i < part.Count; i++) { PartType partType = part[i].PType; if (partType != PartType.Body && partType != PartType.Pixels && partType != PartType.drawPixels) { Vector3 pos = new Vector3(part[i].Pos[0], part[i].Pos[1], part[i].Pos[2]); Vector3 scale = new Vector3(part[i].Scale[0], part[i].Scale[1], part[i].Scale[2]); GameObject obj = null; string path = "Prefabs/join|gen_res"; if (partType == PartType.LeftHand || partType == PartType.RightHand || partType == PartType.LeftLeg || partType == PartType.RightLeg)//手脚 { obj = UIHelper.instance.LoadPrefab(path, joinMainView.HandLegCG.transform, pos, scale); } else if (partType == PartType.LeftEye || partType == PartType.RightEye || partType == PartType.Mouth || partType == PartType.Hair) { obj = UIHelper.instance.LoadPrefab(path, joinMainView.EyeMouthHairCG.transform, pos, scale); } else if (partType == PartType.Hat || partType == PartType.HeadWear) { obj = UIHelper.instance.LoadPrefab(path, joinMainView.HatHeadwearCG.transform, pos, scale); } Image img = obj.transform.GetComponent <Image>(); Texture2D t = new Texture2D(500, 500, TextureFormat.RGBA32, false); t.filterMode = FilterMode.Point; t.LoadImage(part[i].ImgBytes); t.Apply(false); Sprite s = Sprite.Create(t, new Rect(0, 0, t.width, t.height), new Vector2(0.5f, 0.5f)); img.sprite = s; img.SetNativeSize(); obj.transform.localScale = scale; ResDragItem item = obj.GetComponent <ResDragItem>(); if (item == null) { item = obj.AddComponent <ResDragItem>(); } item.partType = partType; item.LoadInitItem(partType, s); } else { //不管 if (partType == PartType.Body) { Texture2D t = new Texture2D(500, 500, TextureFormat.RGBA32, false); t.filterMode = FilterMode.Point; t.LoadImage(part[i].ImgBytes); t.Apply(false); drawTexture = t; } } } if (joinMainView.mobilePaint != null) { Texture2D t = new Texture2D(500, 500, TextureFormat.RGBA32, false); t.filterMode = FilterMode.Point; t.LoadImage(_whole.DrawTexture); t.Apply(false); joinMainView.mobilePaint.SetPixelsTest(t, drawTexture); } }
public void SetCurPartDataWhole(PartDataWhole whole) { curWhole = whole; }
/// <summary> /// 同步获取一个人物并计算出最低点 /// </summary> /// <returns>The person object.</returns> /// <param name="part">Part.</param> public GameObject GetPersonObjWithFlag(PartDataWhole whole, out float minPosY) { float minY = float.MaxValue; List <PartData> part = whole.PartDataList; GameObject person = new GameObject("person"); Transform transBody = person.transform; Transform parentBody = null; GameObject parentObj = null; GameObject bodyRectTemp = null; if (whole.JoinType == JoinType.Animal) { string bodypath = "Prefabs/display|display_item_animalbody"; parentObj = UIHelper.instance.LoadPrefab(bodypath, person.transform, Vector3.zero, Vector3.one); parentBody = parentObj.transform.Find("img_item").transform; DisplayPartItem item = parentObj.gameObject.AddComponent <DisplayPartItem>(); item.partType = PartType.AnimalBody; } for (int i = 0; i < part.Count; i++) { PartType partType = part[i].PType; if (partType == PartType.Pixels || partType == PartType.drawPixels) { continue; } Vector3 pos = new Vector3(part[i].Pos[0], part[i].Pos[1], part[i].Pos[2]); Vector3 scale = new Vector3(part[i].Scale[0], part[i].Scale[1], part[i].Scale[2]); GameObject obj; Debug.Log(partType + " " + pos); string path = "Prefabs/display|display_item_" + partType.ToString().ToLower(); if (partType == PartType.LeftEye || partType == PartType.RightEye || partType == PartType.Mouth) { if (whole.JoinType == JoinType.Animal) { obj = UIHelper.instance.LoadPrefab(path, transBody, pos, scale); } else { obj = UIHelper.instance.LoadPrefab(path, person.transform, pos, scale); obj.transform.SetParent(transBody); } } else if (partType == PartType.Head || partType == PartType.TrueBody) { obj = UIHelper.instance.LoadPrefab(path, parentBody, pos, scale); if (bodyRectTemp == null) { bodyRectTemp = obj; } } else { obj = UIHelper.instance.LoadPrefab(path, person.transform, pos, scale); obj.transform.SetParent(transBody); } //给后面的节点指定父节点 if (partType == PartType.Head || partType == PartType.Body) { transBody = obj.transform.Find("img_item").transform; } //使用RawImage RawImage img = obj.transform.Find("img_item").GetComponent <RawImage>(); Texture2D t = new Texture2D(500, 500, TextureFormat.RGBA32, false); t.filterMode = FilterMode.Point; t.LoadImage(part[i].ImgBytes); t.Apply(false); img.texture = t; img.SetNativeSize(); //调整父节点的大小 float w = img.GetComponent <RectTransform>().sizeDelta.x; float h = img.GetComponent <RectTransform>().sizeDelta.y; obj.transform.GetComponent <RectTransform>().sizeDelta = new Vector2(w, h); DisplayPartItem item = obj.AddComponent <DisplayPartItem>(); item.partType = part[i].PType; item.Init(); //最低点计算 float bottom = obj.GetComponent <RectTransform>().anchoredPosition.y - h / 2; if (partType == PartType.Body) { float j = Utils.GetPicHeightRate(t); bottom = h / 2 - h * (1 - j); } if (minY > bottom) { minY = bottom; } } if (whole.JoinType == JoinType.Animal && parentObj != null) { float offsetHeight = bodyRectTemp.transform.localPosition.y; parentObj.transform.SetAsLastSibling(); parentBody.GetComponent <RectTransform>().sizeDelta = new Vector2(bodyRectTemp.GetComponent <RectTransform>().sizeDelta.x, bodyRectTemp.GetComponent <RectTransform>().sizeDelta.y - offsetHeight);//bodyRectTemp.GetComponent<RectTransform>().sizeDelta; parentObj.GetComponent <RectTransform>().sizeDelta = new Vector2(bodyRectTemp.GetComponent <RectTransform>().sizeDelta.x, bodyRectTemp.GetComponent <RectTransform>().sizeDelta.y - offsetHeight); parentBody.GetComponent <RectTransform>().anchorMin = new Vector2(0.5f, 0); parentBody.GetComponent <RectTransform>().anchorMax = new Vector2(0.5f, 0); parentBody.GetComponent <RectTransform>().pivot = new Vector2(0.5f, 0); } GameObject flagObj = new GameObject("flag_bottom"); flagObj.transform.SetParent(person.transform); flagObj.transform.localPosition = new Vector3(0, minY, 0); curPerson = person; GetListDiaplayItem(person.transform); minPosY = minY; return(person); }
void AddBtnEvent() { BtnBack.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); GameManager.instance.SetNextSceneName(SceneName.Calendar); TransitionView.instance.OpenTransition(); }); BtnPre.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); int curIndex = CalendarDetailController.instance.PreDetail(); PersonManager.instance.CurPersonIndex = curIndex; calendarListDrag.AniResetPosition(curIndex); calendarListDrag.AniResetScaleAndAlpha(curIndex); SetBtnActive(curIndex, CalenderController.instance.PersonNum); }); BtnNext.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); int curIndex = CalendarDetailController.instance.NextDetail(); PersonManager.instance.CurPersonIndex = curIndex; calendarListDrag.AniResetPosition(curIndex); calendarListDrag.AniResetScaleAndAlpha(curIndex); SetBtnActive(curIndex, CalenderController.instance.PersonNum); }); BtnDownload.onClick.AddListener(delegate { AudioManager.instance.PlayAudio(EffectAudioType.Option, null); #if !UNITY_EDITOR ShowMask(true); #endif string path = PersonManager.instance.PersonImgPath + "/" + PersonManager.instance.pathList[CalendarDetailController.instance.curDetailIndex] + ".png"; CallManager.instance.UnityToPlatform_SavePhotoToAlbum(path); }); BtnEdit.onClick.AddListener(delegate { GameManager.instance.SetOpenType(OpenType.ReEdit); GameManager.instance.SetJoinShowAll(true); AudioManager.instance.PlayAudio(EffectAudioType.Option, null); string fileName = PersonManager.instance.pathList[CalendarDetailController.instance.curDetailIndex]; PartDataWhole whole = PersonManager.instance.DeserializePerson(fileName); GameManager.instance.homeSelectIndex = whole.ModelIndex; GameManager.instance.SetOpenType(OpenType.ReEdit); GameManager.instance.SetCurPartDataWhole(whole); GameManager.instance.curJoinType = whole.JoinType; PersonManager.instance.PersonFileName = fileName; Debug.Log("1:" + fileName); GameManager.instance.SetNextSceneName(SceneName.Join); TransitionView.instance.OpenTransition(); }); BtnGame.onClick.AddListener(delegate { GameManager.instance.openType = OpenType.ReEdit; string fileName = PersonManager.instance.pathList[CalendarDetailController.instance.curDetailIndex]; PartDataWhole whole = PersonManager.instance.DeserializePerson(fileName); GameManager.instance.SetCurPartDataWhole(whole); GameManager.instance.curJoinType = whole.JoinType; Debug.Log("curJoinType:" + GameManager.instance.curJoinType); GameManager.instance.homeSelectIndex = whole.ModelIndex; AudioManager.instance.PlayAudio(EffectAudioType.Option, null); UIHelper.instance.LoadPrefab("Prefabs/game/window|window_choosegame", GameManager.instance.GetCanvas().transform, Vector3.zero, Vector3.one, true); }); }