// Update is called once per frame //void Update() //{ // if (isOnline) // { // lock (cli.sendLockObject) // { // Debug.Log(cli.sendTask.Count); // Byte[] temp = StructToArray(); // cli.sendTask.Enqueue(temp); // Debug.Log("Enqueue " + temp.Length ); // } // //if (cli.recvTask.Count > 0) // //{ // // byte[] buf = cli.recvTask.Dequeue(); // // Debug.Log("recv Pakcet" + buf.Length); // // // StructFurniture temp = fromBytes(buf); // // // Debug.Log(temp.name); // //} // } //} public void Clear() { Debug.Log("Clear Room"); // 전체 삭제 isLocalPlayer LocalPlayer = GameObject.Find("LocalPlayer").GetComponent <isLocalPlayer>(); foreach (Transform child in transform) { LocalPlayer.CmdDeleteFurniture(child.gameObject); } ObjDataList obj = new ObjDataList(); GameObject[] wallTexture = new GameObject[6]; wallTexture[0] = GameObject.Find("Room").transform.Find("Top").gameObject; wallTexture[1] = GameObject.Find("Room").transform.Find("Wall1").gameObject; wallTexture[2] = GameObject.Find("Room").transform.Find("Wall2").gameObject; wallTexture[3] = GameObject.Find("Room").transform.Find("Wall3").gameObject; wallTexture[4] = GameObject.Find("Room").transform.Find("Wall4").gameObject; wallTexture[5] = GameObject.Find("Room").transform.Find("Bottom").gameObject; int[] walls = new int[6] { obj.top, obj.wall1, obj.wall2, obj.wall3, obj.wall4, obj.bottom }; for (int i = 0; i < wallTexture.Length; i++) { //벽지 초기화 LocalPlayer.CmdSetSyncWallTexture(wallTexture[i], 0, walls[0]); LocalPlayer.CmdSetSyncWallTexture(wallTexture[i], 0, -1); //wallTexture[i].GetComponent<MeshRenderer>().material.mainTexture = FurnitureTextures[walls[0]]; //wallTexture[i].GetComponent<DropObject>().SetMaterial(FurnitureTextures[walls[0]]); //wallTexture[i].GetComponent<DropObject>().textureName = FurnitureTextures[walls[0]].name; } }
public void saveSlot(int idx) { //가구를 리스트에 담아서 반환하는 함수 호출 ObjDataList obj = Furniture.GetComponent <FurnitureManager>().FurnitureToList(); //가구 정보를 담는 리스트 클래스를 JSON 으로 변경 string jsonData = JsonUtility.ToJson(obj, true); //JSON 파일 저장할 경로 설정 //string path = Path.Combine(Application.dataPath, "objData.json"); ////JSON 파일로 저장 //File.WriteAllText(path, jsonData); if (Client.instance != null) { //방장 //if(Client.instance.isOwner) if (true) { Client.instance.Save(jsonData, idx); } } else { string path = Path.Combine(Application.dataPath, "objData.json"); //JSON 파일로 저장 File.WriteAllText(path, jsonData); } audio.clip = SaveSound; audio.Play(); timestamp(true); }
public void loadSlot(int idx) { if (idx != 5) { Furniture.GetComponent <FurnitureManager>().Clear(); if (Client.instance != null) { //방장 if (Client.instance.isOwner) { string jsonData = Client.instance.Load(idx); //읽어온 JSON 파일을 가구 정보를 담는 리스트 객체(ObjDataList)로 변환 ObjDataList obj = JsonUtility.FromJson <ObjDataList>(jsonData); Furniture.GetComponent <FurnitureManager>().ListToFurniture(obj); Client.instance.roomType = idx; } } else { //JSON 파일 불러올 경로 설정 string path = Path.Combine(Application.dataPath, "objData.json"); //JSON 파일 불러옴 string jsonData = File.ReadAllText(path); //읽어온 JSON 파일을 가구 정보를 담는 리스트 객체(ObjDataList)로 변환 ObjDataList obj = JsonUtility.FromJson <ObjDataList>(jsonData); Furniture.GetComponent <FurnitureManager>().ListToFurniture(obj); } audio.clip = LoadSound; audio.Play(); } else { Furniture.GetComponent <FurnitureManager>().Clear(); Back(); } }
public void ListToFurniture(ObjDataList obj) { //가구 생성에 필요한 스크립트 호출 isLocalPlayer LocalPlayer = GameObject.Find("LocalPlayer").GetComponent <isLocalPlayer>(); //벽 객체 받아옴 Debug.Log(obj.objDataList.Count); GameObject[] wallTexture = new GameObject[6]; wallTexture[0] = GameObject.Find("Room").transform.Find("Top").gameObject; wallTexture[1] = GameObject.Find("Room").transform.Find("Wall1").gameObject; wallTexture[2] = GameObject.Find("Room").transform.Find("Wall2").gameObject; wallTexture[3] = GameObject.Find("Room").transform.Find("Wall3").gameObject; wallTexture[4] = GameObject.Find("Room").transform.Find("Wall4").gameObject; wallTexture[5] = GameObject.Find("Room").transform.Find("Bottom").gameObject; //저장된 리스트에서 벽지 정보 받아옴 int[] walls = new int[6] { obj.top, obj.wall1, obj.wall2, obj.wall3, obj.wall4, obj.bottom }; //벽지 씌워줌 for (int i = 0; i < wallTexture.Length; i++) { if (walls[i] != -1) { LocalPlayer.CmdSetSyncWallTexture(wallTexture[i], 0, walls[i]); //wallTexture[i].GetComponent<MeshRenderer>().material.mainTexture = FurnitureTextures[walls[i]]; //wallTexture[i].GetComponent<DropObject>().SetMaterial(FurnitureTextures[walls[i]]); //wallTexture[i].GetComponent<DropObject>().textureName = FurnitureTextures[walls[i]].name; } else { LocalPlayer.CmdSetSyncWallTexture(wallTexture[i], 0, 0); } } //리스트의 길이 만큼 반복 for (int i = 0; i < obj.objDataList.Count; i++) { //가구 이름 받아옴 string name = obj.objDataList[i].name; LocalPlayer.SpawnObjectRot(name, obj.objDataList[i].position, obj.objDataList[i].rotation, obj.objDataList[i].textures); ////이름에 맞는 가구 Prefab Load //GameObject NewGameObject = Resources.Load("Prefabs/" + name) as GameObject; ////Load 된 Prefab을 가구 정보에 맞게 생성 //GameObject newObj = Instantiate(NewGameObject, obj.objDataList[i].position, obj.objDataList[i].rotation); //newObj.name = name; //int cnt = newObj.transform.childCount; ////자식 오브젝트가 없는 경우 자기 자신 오브젝트에 Drop Object //if (cnt == 0) //{ // //씌워진 텍스쳐가 없는 경우 혹은 Drop Object가 경우 break; // if (obj.objDataList[i].textures[0] == -1) break; // LocalPlayer.CmdSetSyncListInt(newObj, 0, obj.objDataList[i].textures[0]); // //newObj.GetComponent<MeshRenderer>().material.mainTexture = FurnitureTextures[obj.objDataList[i].textures[0]]; // //newObj.GetComponent<DropObject>().SetMaterial(FurnitureTextures[obj.objDataList[i].textures[0]]); // //newObj.GetComponent<DropObject>().textureName = FurnitureTextures[obj.objDataList[i].textures[0]].name; //} ////자식 오브젝트가 있는 경우 자식 오브젝트에 Drop Object //else //{ // for (int j = 0; j < cnt; j++) // { // if (newObj.transform.GetChild(j).GetComponent<MeshRenderer>() != null) // { // if (obj.objDataList[i].textures[j] == -1) // { // continue; // } // LocalPlayer.CmdSetSyncListInt(newObj, j, obj.objDataList[i].textures[j]); // //newObj.transform.GetChild(j).GetComponent<MeshRenderer>().material.mainTexture = FurnitureTextures[obj.objDataList[i].textures[j]]; // //newObj.transform.GetChild(j).GetComponent<DropObject>().SetMaterial(FurnitureTextures[obj.objDataList[i].textures[j]]); // //newObj.transform.GetChild(j).GetComponent<DropObject>().textureName = FurnitureTextures[obj.objDataList[i].textures[j]].name; // //Debug.Log(newObj.transform.GetChild(j).GetComponent<DropObject>().textureName); // } // } //} } }
public ObjDataList FurnitureToList() { //자식 객체 카운트 구함 int childCnt = transform.childCount; int len = FurnitureTextures.Length; //가구정보들을 담는 리스트 객체 초기화 ObjDataList obj = new ObjDataList(); string[] wallTexture = new string[6]; wallTexture[0] = GameObject.Find("Room").transform.Find("Top").GetComponent <DropObject>().textureName; wallTexture[1] = GameObject.Find("Room").transform.Find("Wall1").GetComponent <DropObject>().textureName; wallTexture[2] = GameObject.Find("Room").transform.Find("Wall2").GetComponent <DropObject>().textureName; wallTexture[3] = GameObject.Find("Room").transform.Find("Wall3").GetComponent <DropObject>().textureName; wallTexture[4] = GameObject.Find("Room").transform.Find("Wall4").GetComponent <DropObject>().textureName; wallTexture[5] = GameObject.Find("Room").transform.Find("Bottom").GetComponent <DropObject>().textureName; if (wallTexture[0] == "") { obj.top = -1; } if (wallTexture[1] == "") { obj.wall1 = -1; } if (wallTexture[2] == "") { obj.wall2 = -1; } if (wallTexture[3] == "") { obj.wall3 = -1; } if (wallTexture[4] == "") { obj.wall4 = -1; } if (wallTexture[5] == "") { obj.bottom = -1; } for (int k = 0; k < len; k++) { //Debug.Log(cur.GetChild(j).GetComponent<DropObject>().textureName + ", " + FurnitureTextures[k]); if (FurnitureTextures[k].name == wallTexture[0]) { obj.top = k; } if (FurnitureTextures[k].name == wallTexture[1]) { obj.wall1 = k; } if (FurnitureTextures[k].name == wallTexture[2]) { obj.wall2 = k; } if (FurnitureTextures[k].name == wallTexture[3]) { obj.wall3 = k; } if (FurnitureTextures[k].name == wallTexture[4]) { obj.wall4 = k; } if (FurnitureTextures[k].name == wallTexture[5]) { obj.bottom = k; } } obj.objDataList = new List <ObjData>(); //총 가구 개수 만큼 리스트에 추가함 for (int i = 0; i < childCnt; i++) { //자식 가구 Transform 받아옴 Transform cur = transform.GetChild(i); //가구 정보 담는 객체 생성 ObjData objData = new ObjData(); objData.textures = new int[10]; //가구 정보 할당 objData.position = cur.position; objData.rotation = cur.rotation; objData.name = cur.name; //색 저장 int cnt = cur.childCount; if (cnt > 0) { for (int j = 0; j < cnt; j++) { if (cur.GetChild(j).GetComponent <DropObject>() == null) { continue; } if (cur.GetChild(j).GetComponent <MeshRenderer>() != null) { if (cur.GetChild(j).GetComponent <DropObject>().textureName == "") { objData.textures[j] = -1; } for (int k = 0; k < len; k++) { //Debug.Log(cur.GetChild(j).GetComponent<DropObject>().textureName + ", " + FurnitureTextures[k]); if (FurnitureTextures[k].name == cur.GetChild(j).GetComponent <DropObject>().textureName) { Debug.Log(cur.GetChild(j).GetComponent <DropObject>().textureName + ", " + FurnitureTextures[k].name); objData.textures[j] = k; } } //Debug.Log(cur.GetChild(j).GetComponent<MeshRenderer>().material.mainTexture.name); } } } else { if (cur.GetComponent <DropObject>() != null) { if (cur.GetComponent <DropObject>().textureName == "") { objData.textures[0] = -1; } else { for (int k = 0; k < len; k++) { //Debug.Log(cur.GetChild(j).GetComponent<DropObject>().textureName + ", " + FurnitureTextures[k]); if (FurnitureTextures[k].name == cur.GetComponent <DropObject>().textureName) { Debug.Log(cur.GetComponent <DropObject>().textureName + ", " + FurnitureTextures[k].name); objData.textures[0] = k; } } } } } //리스트에 가구 정보 추가 obj.objDataList.Add(objData); } return(obj); }