// Select an objet prefab with provided object category. Return a list of objects which will be randomly spawned in the scene. There can be at most 3 objects with OnFloor category, // including the target object. private NavObj[] SelectNavObj(NavObj.ObjCategory m_objCat) { // Only call this random selection function when autosettarget is true if (envSetup.autoSetTarget || agentController.CompletedEpisodes == 0) { // Randomly select 1-2 OnFloor Objects, 1-9 OnFurnitureTop Objects, 1-9 OnWall Objects (except for the target objects) // int OFObjNum = Random.Range(1,2); // int OFTObjNum = Random.Range(1,9); // int OWObjNum = Random.Range(1,9); objNums[0] = Random.Range(1, 2); objNums[1] = Random.Range(1, 9); objNums[2] = Random.Range(1, 9); // Create new object array which with be returned and contains all the objects selectedNavObjs = new NavObj[objNums.Sum() + 1]; // Generate arrays with different categories NavObj[] OF_list = objList.Where(obj => obj.objCat == NavObj.ObjCategory.OnFloor).ToArray(); NavObj[] OFT_list = objList.Where(obj => obj.objCat == NavObj.ObjCategory.OnFurnitureTop).ToArray(); NavObj[] OW_list = objList.Where(obj => obj.objCat == NavObj.ObjCategory.OnWall).ToArray(); // Select the target objects switch (m_objCat) { case NavObj.ObjCategory.OnFloor: selectedNavObjs[0] = OF_list[Random.Range(0, OF_list.Length)]; break; case NavObj.ObjCategory.OnFurnitureTop: selectedNavObjs[0] = OFT_list[Random.Range(0, OFT_list.Length)]; break; case NavObj.ObjCategory.OnWall: selectedNavObjs[0] = OW_list[Random.Range(0, OW_list.Length)]; break; } // Set values for global object type and instance number variables objType = selectedNavObjs[0].objType; objInstanceNum = selectedNavObjs[0].objInstanceNum; for (int i = 1; i < objNums.Sum() + 1; i++) { if (i < objNums[0] + 1) // Select OnFloor Objects { selectedNavObjs[i] = OF_list[Random.Range(0, OF_list.Length)]; } else if (i < objNums[0] + objNums[1] + 1) { selectedNavObjs[i] = OFT_list[Random.Range(0, OFT_list.Length)]; } else { selectedNavObjs[i] = OW_list[Random.Range(0, OW_list.Length)]; } } // return selectedNavObjs; } return(selectedNavObjs); }
void LateUpdate() { if (envSetup.isTraining && agentCtrl.useBody) { kinectCtrl = kinectAnimator.runtimeAnimatorController as AnimatorController; leapCtrl = leapAnimator.runtimeAnimatorController as AnimatorController; NavObj.ObjType currentType = GameObject.FindObjectOfType <AgentController>().CurrentObjType; string objInfo = $"The object type is {currentType.ToString()}"; kinectClip = kinectCtrl.layers[0].stateMachine.defaultState.motion as AnimationClip; leapClip = leapCtrl.layers[0].stateMachine.defaultState.motion as AnimationClip; string kinectInfo = $"The Kinect clip is {kinectClip.name}"; string leapInfo = $"The Leap clip is {leapClip.name}"; displayArea.text = string.Join("\n", new string[] { objInfo, kinectInfo, leapInfo }); } }