///<smmary> ///指定したIDを持つオブジェクトのインデックスを返す ///</summary> public static int GetAnimalIndex(int search_id, GameObject[] animals) { for (int i = 0; i < animals.Length; i++) { animalMaster animal_script = animals[i].GetComponent <animalMaster>(); if (search_id == animal_script.id) { return(i); } } return(0); }
///<summary> ///指定したIDを持つオブジェクトが存在しているのか判定する関数 ///</summary> public static bool CheckTargetObject(int search_id, GameObject[] animals) { foreach (GameObject animal in animals) { animalMaster animal_script = animal.GetComponent <animalMaster>(); if (search_id == animal_script.id) { return(true); } } return(false); }
///<summary> ///すでに存在するオブジェクトと同じIDのマーカが検出されているか判定する関数 ///</summary> public static bool CheckSameID(GameObject animal, int[] search_ids) { foreach (int id in search_ids) { animalMaster animal_script = animal.GetComponent <animalMaster>(); if (animal_script.id == id) { return(true); } } return(false); }
///<summarry> /// 登録されたマーカが存在しているか調べる関数 /// True 存在している, False 存在していない ///</summarry> public static bool CheckLiveMarker(int id, GameObject[] animals) { foreach (GameObject animal in animals) { animalMaster animal_script = animal.GetComponent <animalMaster>(); if (id == animal_script.id) { return(true); } } return(false); }
void Update() { //Leapmotionのカメラの映像を取得 readLeftRightFrame(); Point2f[][] maker_corners; int[] maker_ids; Point2f[][] reject_points; //ARマーカの検出 CvAruco.DetectMarkers(leftRight_frame[0], ar_dict, out maker_corners, out maker_ids, detect_param, out reject_points); GameObject[] animals = GameObject.FindGameObjectsWithTag("animal"); //マーカが検出されない場合はすべてのanimalオブジェクトを削除 if (maker_ids.Length == 0) { foreach (GameObject animal in animals) { animalMaster animal_script = animal.GetComponent <animalMaster>(); animal_script.destoryThis(); Debug.Log("destroy"); } } //マーカが検出されなかったanimalオブジェクトを削除 else { foreach (GameObject animal in animals) { //検出されたIDと一致するゲームオブジェクトが存在しなかったら if (DetObj.CheckSameID(animal, maker_ids) == false) { animalMaster animal_script = animal.GetComponent <animalMaster>(); animal_script.destoryThis(); } } } if (maker_ids.Length > 0) { //検出されたマーカ情報の描画 CvAruco.DrawDetectedMarkers(leftRight_frame[0], maker_corners, maker_ids, new Scalar(0, 255, 0)); //マーカの姿勢推定 OutputArray tvec = new Mat(), rvec = new Mat(); CvAruco.EstimatePoseSingleMarkers(maker_corners, 0.6f, cameraMatrix, distCoefficients, rvec, tvec, null); //検出されたIDに対する操作 for (int i = 0; i < maker_ids.Length; i++) { //ID辞書と一致するマーカが検出されたら if (DetObj.CheckTargetMarker(maker_ids[i], id_dict) == true) { if (animals != null) { //すでにオブジェクトが存在していたら if (DetObj.CheckTargetObject(maker_ids[i], animals) == true) { int animal_index = DetObj.GetAnimalIndex(maker_ids[i], animals); animalMaster animal_script = animals[animal_index].GetComponent <animalMaster>(); animal_script.moveModel(i, tvec, rvec); } //オブジェクトが存在しない場合 else { GameObject newAnimal = Instantiate(animal); animalMaster animal_script = newAnimal.GetComponent <animalMaster>(); int animal_index = DetObj.GetAnimalIndex(maker_ids[i], animals); animal_script.setParam(maker_ids[i], i, tvec, rvec); } } else { GameObject newAnimal = Instantiate(animal); animalMaster animal_script = newAnimal.GetComponent <animalMaster>(); animal_script.setParam(maker_ids[i], 0, tvec, rvec); } } } } }