public void cvObject() { cvLine line = new cvLine() { type = "cvLine", color = new Color32(0, 0, 0, 255), pos0 = new Vector3(0, 0, 1), pos1 = new Vector3(123, 32, 3) }; cvObject obj = new cvObject(); obj.name = "一个名字"; obj.prefabName = "pname"; obj.position = new Vector3(1, 2, 3); obj.rotation = Quaternion.Euler(123, 312, 3); cvObject obj2 = new cvObject(); obj2.components.Add(line); obj.children.Add(obj2); Assert.IsTrue(object.ReferenceEquals(obj.children[0], obj2)); string text = JsonConvert.SerializeObject(obj); cvObject objr = JsonConvert.DeserializeObject <cvObject>(text); Assert.IsTrue(objr.children.Count == 1); Assert.IsTrue(objr.children[0].components.Count == 1); }
public void SetUp() { //Newtonsoft.Json的U3D扩展类型支持 xuexue.json.U3DJsonSetting.SetDefault(); //初始化一段实验数据. cvLine line = new cvLine() { type = "cvLine", color = new Color32(0, 0, 0, 255), pos0 = new Vector3(0, 0, 1), pos1 = new Vector3(123, 32, 3) }; cvObject obj2 = new cvObject(); obj2.components.Add(line); cvObject obj = new cvObject(); obj.name = "一个名字"; obj.prefabName = "pname"; obj.position = new Vector3(1, 2, 3); obj.rotation = Quaternion.Euler(123, 312, 3); obj.children.Add(obj2); scene.objects.Add(obj); scene.objects.Add(obj); scene.objects.Add(obj); }
/// <summary> /// 添加一个cv物体到场景里 /// </summary> /// <param name="co"></param> /// <param name="parent"></param> private void AddCvObj(cvObject co, GameObject parent = null) { //如果是隐藏那么就不显示了 //if (!co.isActive) //{ // return; //} GameObject go; if (co.type > 0 || !string.IsNullOrEmpty(co.prefabName))//如果它不是一个空物体 { GameObject pref = Resources.Load <GameObject>(co.prefabName); if (pref != null)//如果支持资源里面有这个物体 { go = GameObject.Instantiate(pref); } else { go = new GameObject(); } } else { go = new GameObject(); } go.name = co.name; if (parent != null) { go.transform.parent = parent.transform; } if (co.isLocal)//json里的坐标是否是本地坐标 { go.transform.localPosition = co.position; go.transform.localRotation = co.rotation; } else { go.transform.position = co.position; go.transform.rotation = co.rotation; } go.transform.localScale = co.localScale; if (co.components != null) { for (int i = 0; i < co.components.Count; i++) { this.AddComponentWithJsonObj(co.components[i], go); } } //设置好自己的坐标之后在安排自己的子物体们 if (co.children != null) { for (int i = 0; i < co.children.Count; i++) { AddCvObj(co.children[i], go);//递归一下 } } //当这个物体有模型的时候,尝试给颜色赋值,寻找子物体下面的组件 if ((!string.IsNullOrEmpty(co.prefabName) || co.type != 0) && co.isColor)//如果规定了不使用颜色,那么就不要进下面的处理 { Renderer rnd = go.GetComponentInChildren <Renderer>(); if (rnd != null) { if (!dictMat.ContainsKey(co.color)) { dictMat[co.color] = new Material(rnd.material); dictMat[co.color].color = co.color; //Debug.Log($"增加一个材质,当前材质个数{dictMat.Count}"); } rnd.material = dictMat[co.color]; } } go.SetActive(co.isActive); _listObj.Add(go);//记录这个添加的物体 }