public void OpenObj(string path) { var obj = Instantiate(Resources.Load("GenericMesh")) as GameObject; string objString = File.ReadAllText(path); var mesh = ObjImporter.ImportMeshFromString(objString); obj.GetComponent <MeshFilter>().mesh = mesh; obj.GetComponent <MeshCollider>().sharedMesh = mesh; obj.GetComponent <MeshRenderer>().material = Resources.Load <Material>("ModelMaterial"); obj.transform.position = new Vector3(0, mesh.bounds.extents.y, 0); float max = -1; for (int i = 0; i < 3; i++) { if (mesh.bounds.extents[i] > max) { max = mesh.bounds.extents[i]; } } obj.transform.localScale *= (max / 20); var editor = obj.AddComponent <MeshEditor>(); editor.StartGroupGeneration(); editor.UpdateFaces(); ObjectManager.instance.AddObject(obj); }
public void OpenScene() { //TrackerScript.AddAction("I"); Transform ObjectContainer = GameObject.Find("TestScene").transform; int numGroups = 0; for (int i = 0; i < MyScene.OBJStrings.Length; i++) { if (MyScene.Groups[i] + 1 > numGroups) { numGroups = MyScene.Groups[i] + 1; } } GameObject[] Parents = new GameObject[numGroups]; for (int i = 0; i < numGroups; i++) { Parents[i] = new GameObject(); Parents[i].AddComponent <Rigidbody>(); Parents[i].transform.SetParent(ObjectContainer); ObjectManager.instance.AddObject(Parents[i]); } for (int i = 0; i < MyScene.OBJStrings.Length; i++) { GameObject obj = GameObject.Instantiate(Resources.Load("GenericMesh")) as GameObject; ObjectManager.instance.AddObject(obj); if (MyScene.Groups[i] != -1) { obj.transform.parent = Parents[MyScene.Groups[i]].transform; obj.GetComponent <ObjectID>().HasParent = true; var joint = obj.AddComponent <FixedJoint>(); joint.connectedBody = Parents[MyScene.Groups[i]].GetComponent <Rigidbody>(); } else { obj.transform.parent = ObjectContainer; } obj.GetComponent <MeshFilter>().mesh = ObjImporter.ImportMeshFromString(MyScene.OBJStrings[i]); obj.GetComponent <MeshCollider>().sharedMesh = obj.GetComponent <MeshFilter>().mesh; obj.GetComponent <MeshRenderer>().sharedMaterial = Resources.Load <Material>("ModelMaterial"); Color c = new Color(MyScene.Colors[i, 0], MyScene.Colors[i, 1], MyScene.Colors[i, 2]); obj.GetComponent <MeshRenderer>().material.color = c; obj.transform.position = MyScene.Positions[i].GetVector3(); obj.transform.eulerAngles = MyScene.Rotations[i].GetVector3(); obj.transform.localScale = MyScene.Scales[i].GetVector3(); } }
public void GenerateModel(Transform parent) { Transform ModelParent = new GameObject().GetComponent <Transform>(); ModelParent.parent = parent; ModelParent.transform.position = parent.transform.position; List <MeshRenderer> Renderers = new List <MeshRenderer>(); for (int i = 0; i < MyScene.OBJStrings.Length; i++) { GameObject obj = new GameObject(); obj.transform.parent = ModelParent; obj.transform.position = ModelParent.position; obj.AddComponent <MeshFilter>().mesh = ObjImporter.ImportMeshFromString(MyScene.OBJStrings[i]); obj.AddComponent <MeshRenderer>().sharedMaterial = Resources.Load <Material>("ModelMaterial"); Color c = new Color(MyScene.Colors[i, 0], MyScene.Colors[i, 1], MyScene.Colors[i, 2]); obj.GetComponent <MeshRenderer>().material.color = c; Renderers.Add(obj.GetComponent <MeshRenderer>()); obj.transform.localPosition = (MyScene.Positions[i].GetVector3()); obj.transform.localEulerAngles = MyScene.Rotations[i].GetVector3(); obj.transform.parent = null; obj.transform.localScale = MyScene.Scales[i].GetVector3(); obj.transform.parent = ModelParent; } Bounds ModelAreaBounds = parent.GetComponent <Collider>().bounds; Bounds ModelBounds = new Bounds(ModelParent.transform.position, Vector3.zero); foreach (var r in Renderers) { ModelBounds.Encapsulate(r.bounds); } float MaxRatio = -1f; if (ModelBounds.extents.x / ModelAreaBounds.extents.x > MaxRatio) { MaxRatio = ModelBounds.extents.x / ModelAreaBounds.extents.x; } if (ModelBounds.extents.y / ModelAreaBounds.extents.y > MaxRatio) { MaxRatio = ModelBounds.extents.y / ModelAreaBounds.extents.y; } if (ModelBounds.extents.z / ModelAreaBounds.extents.z > MaxRatio) { MaxRatio = ModelBounds.extents.z / ModelAreaBounds.extents.z; } ModelParent.localScale /= MaxRatio; }