// initialize unsafe void Start() { // For Furniture Assembly Environment: record geom positions modifiedObjects = new Dictionary <string, Vector3>(); backgrounds = new List <GameObject>(); foreach (GameObject child in SceneManager.GetActiveScene().GetRootGameObjects()) { if (child.name.StartsWith("Background_")) { backgrounds.Add(child); child.SetActive(false); } } //material_random_parameters["Plastic (Instance)"] = new RandomColor(0.0f, 1.0f, 0.0f, 1.0f, 0.2f, 1.0f); // set selection color selcolor = new Color(0.5f, 0.5f, 0.5f, 1); // preallocate buffer with maximum possible message size buffersize = 2048; // Math.Max(4, Math.Max(4*nqpos, 28*nmocap)); buffer = new byte[buffersize]; // initialize plugin // MJP.Initialize(); // MJP.LoadModel(Application.streamingAssetsPath + "/" + modelFile); // get number of renderable objects, allocate map MJP.TSize size; MJP.GetSize(&size); nqpos = size.nqpos; nmocap = size.nmocap; ncamera = size.ncamera; nobject = size.nobject; objects = new GameObject[nobject]; // get root //root = GameObject.Find("MuJoCo"); if (root == null) { throw new System.Exception("MuJoCo root object not found"); } root.transform.localPosition = transform.localPosition; root.transform.localRotation = transform.localRotation; root.transform.localScale = transform.localScale; // get camera under root int nchild = root.transform.childCount; for (int i = 0; i < nchild; i++) { thecamera = root.transform.GetChild(i).gameObject.GetComponent <Camera>(); if (thecamera != null) { // thecamera.enabled = false; break; } } if (thecamera == null) { throw new System.Exception("No camera found under MuJoCo root object"); } // make map of renderable objects for (int i = 0; i < nobject; i++) { // get object name StringBuilder name = new StringBuilder(100); MJP.GetObjectName(i, name, 100); // find corresponding GameObject for (int j = 0; j < nchild; j++) { if (root.transform.GetChild(j).name == name.ToString()) { objects[i] = root.transform.GetChild(j).gameObject; break; } } // set initial state if (objects[i]) { MJP.TTransform transform; int visible; int selected; MJP.GetObjectState(i, &transform, &visible, &selected); SetTransform(objects[i], transform); objects[i].SetActive(visible > 0); } } // get camera fov and offscreen resolution camfov = new float[ncamera + 1]; int offwidth = 1280; int offheight = 720; for (int i = -1; i < ncamera; i++) { MJP.TCamera cam; MJP.GetCamera(i, &cam); camfov[i + 1] = cam.fov; // plugin returns offscreen width and height for all cameras offwidth = cam.width; offheight = cam.height; } //TODO: The dummy camera and camera added by mjonline import should be merged together GameObject camobj = GameObject.Find("DummyCamera"); if (camobj != null) { dummycamera = camobj.GetComponent <Camera>(); dummycamera.enabled = true; } // prepare offscreen rendering off_render = new OffscreenRenderer(offwidth, offheight); // synchronize time MJP.SetTime(Time.time); //randomizeAppearance(); Debug.Log("New simulation init'd " + offwidth + "x" + offheight); }
// initialize unsafe void Start() { // set selection color selcolor = new Color(0.5f, 0.5f, 0.5f, 1); // initialize plugin //// MJP.Initialize(); // MJP.LoadModel(Application.streamingAssetsPath + "/" + modelFile); // get number of renderable objects, allocate map MJP.TSize size; MJP.GetSize(&size); ncamera = size.ncamera; nobject = size.nobject; objects = new GameObject[nobject]; // get root // root = GameObject.Find("MuJoCo"); if (root == null) { throw new System.Exception("MuJoCo root object not found"); } // get camera under root int nchild = root.transform.childCount; for (int i = 0; i < nchild; i++) { thecamera = root.transform.GetChild(i).gameObject.GetComponent <Camera>(); if (thecamera != null) { break; } } if (thecamera == null) { throw new System.Exception("No camera found under MuJoCo root object"); } // make map of renderable objects for (int i = 0; i < nobject; i++) { // get object name StringBuilder name = new StringBuilder(100); MJP.GetObjectName(i, name, 100); // find corresponding GameObject for (int j = 0; j < nchild; j++) { if (root.transform.GetChild(j).name == name.ToString()) { objects[i] = root.transform.GetChild(j).gameObject; break; } } // set initial state if (objects[i]) { MJP.TTransform transform; int visible; int selected; MJP.GetObjectState(i, &transform, &visible, &selected); SetTransform(objects[i], transform); objects[i].SetActive(visible > 0); } } int offwidth = 1280; int offheight = 720; // get camera fov and offscreen resolution camfov = new float[ncamera + 1]; for (int i = -1; i < ncamera; i++) { MJP.TCamera cam; MJP.GetCamera(i, &cam); camfov[i + 1] = cam.fov; // plugin returns offscreen width and height for all cameras offwidth = cam.width; offheight = cam.height; } off_render = new OffscreenRenderer(offwidth, offheight); // synchronize time MJP.SetTime(Time.time); videotime = Time.time; }