void Update() { this.transform.position = new Vector3(this.transform.position.x, 0.5f, this.transform.position.z); float DistanceToTarget = 0.0f; //目標点との距離 Quaternion TargetRotation; //目標点への方向 DistanceToTarget = Vector3.Distance(this.transform.position, TargetPosition); //いじめられっ子への距離を計算 //いじめられっ子のデータを取得 izimerarekko = GameObject.FindGameObjectsWithTag("izimerarekko"); //いじめ子リーダーのデータを取得 izimekko_l = GameObject.FindGameObjectWithTag("izimekko_L"); //普通の子のデータを取得 hutuunoko = GameObject.FindGameObjectsWithTag("hutuunoko"); if (izimepower >= 30) { switch (move_mode) { case move.loitering: //徘徊 //いじめっ子と目標点との距離を求める DistanceToTarget = Vector3.SqrMagnitude(transform.position - TargetPosition); //目標点との距離が近ければ、その場でキョロキョロする動きをする if (DistanceToTarget < CangeTargetDistance) { change_move_time = 0; move_mode = move.sarchi; break; } //目標点の方を向く TargetRotation = Quaternion.LookRotation(TargetPosition - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, TargetRotation, Time.deltaTime * 2); //前に進む object_move(this.transform.position, Speed); change_move_time--; //いじめられっ子が視界内にいるか if (srachizimerarekko() == true && change_move_time <= 0) { change_move_time = 0; move_mode = move.izimerarekko; break; } float izimekko_Ldis = 0.0f; //いじめっ子リーダーとの距離 izimekko_Ldis = Vector3.Distance(this.transform.position, izimekko_l.transform.position); if (izimekko_Ldis < 3.0f) { //change_move_time = 0; //move_mode = move.izimekko_L; //break; } break; case move.sarchi: //動かずにキョロキョロする overlooking_time++; if (overlooking_time >= 50) { overlooking_time = 0; srach_angle *= -1.0f; } transform.Rotate(new Vector3(0.0f, srach_angle, 0.0f)); change_move_time++; if (change_move_time >= 600) { //10秒経過したら探索に遷移 TargetPosition = GetPosition(); move_mode = move.loitering; break; } //いじめられっ子が視界内にいるか if (srachizimerarekko() == true && change_move_time <= 0) { change_move_time = 0; move_mode = move.izimerarekko; break; } break; case move.izimerarekko: //いじめられっ子へ向かう //目標点(いじめられっ子)の方を向く TargetRotation = Quaternion.LookRotation(targetizimerarekko.transform.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, TargetRotation, Time.deltaTime * 10); //前に進む object_move(this.transform.position, Speed * 1.5f); //視界からいじめられっ子がいなくなると立ち止まる if (srachizimerarekko() == false) { change_move_time = 0; move_mode = move.stop; break; } //いじめられっ子に近づくとその場でいじめる if (Vector3.Distance(targetizimerarekko.transform.position, transform.position) <= 2.0f) { switch (targetizimerarekko.gameObject.name) { case (string)"izimerarekko": //ずっといじめられっ子の場合 izimerarekko m_izimerarekko1 = targetizimerarekko.GetComponent <izimerarekko>(); m_izimerarekko1.izimekko_count(); break; case (string)"hutuunoko": //元が普通の子のいじめられっ子場合 hutuunoko m_izimerarekko2 = targetizimerarekko.GetComponent <hutuunoko>(); m_izimerarekko2.izimekko_count(); break; } change_move_time = 0; move_mode = move.izime; } change_move_time++; if (change_move_time >= 300) { change_move_time = 300; TargetPosition = GetPosition(); move_mode = move.loitering;//徘徊 break; } break; case move.izimekko_L: //いじめっ子リーダーに付きまとう //目標点(いじめっ子リーダー)の方を向く TargetRotation = Quaternion.LookRotation(izimekko_l.transform.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, TargetRotation, Time.deltaTime * 2); //目標点(いじめっ子リーダー)に進む object_move(this.transform.position, Speed); change_move_time++; if (change_move_time >= 600) { move_mode = move.loitering; break; } break; case move.izime: change_move_time++; if (change_move_time >= 150) { change_move_time = 0; move_mode = move.loitering; break; } break; case move.stop: change_move_time++; if (change_move_time > 120) { change_move_time = 0; move_mode = move.loitering; break; } //いじめられっ子が視界内にいるか if (srachizimerarekko() == true) { change_move_time = 0; move_mode = move.izimerarekko; break; } break; default: break; } } else { Destroy(this); } Objectcollision(); }
private void mode_izimekko() { this.transform.position = new Vector3(this.transform.position.x, 0.5f, this.transform.position.z); float DistanceToTarget = 0.0f; //目標点との距離 Quaternion TargetRotation; //目標点への方向 DistanceToTarget = Vector3.Distance(this.transform.position, TargetPosition); //いじめられっ子への距離を計算 if (izimepower >= 30) { switch (move_mode_izimekko) { case move_izimekko.loitering: //徘徊 //いじめっ子と目標点との距離を求める DistanceToTarget = Vector3.SqrMagnitude(transform.position - TargetPosition); //目標点との距離が近ければ、その場でキョロキョロする動きをする if (DistanceToTarget < CangeTargetDistance) { change_move_time = 0; move_mode_izimekko = move_izimekko.sarchi; break; } //目標点の方を向く TargetRotation = Quaternion.LookRotation(TargetPosition - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, TargetRotation, Time.deltaTime * 2); //前に進む object_move(this.transform.position, Speed); change_move_time--; //いじめられっ子が視界内にいるか if (srachizimerarekko() == true && change_move_time <= 0) { change_move_time = 0; move_mode = move.izimerarekko; break; } float izimekko_Ldis = 0.0f; if (izimekko_Ldis < 20.0f) { //move_mode = move.izimekko_L; break; } break; case move_izimekko.sarchi: //動かずにキョロキョロする overlooking_time++; if (overlooking_time >= 50) { overlooking_time = 0; srach_angle *= -1.0f; } transform.Rotate(new Vector3(0.0f, srach_angle, 0.0f)); change_move_time++; if (change_move_time >= 600) { TargetPosition = GetPosition(); srach_angle = 0; move_mode = move.loitering; break; } //いじめられっ子が視界内にいるか if (srachizimerarekko() == true && change_move_time <= 0) { change_move_time = 0; move_mode = move.izimerarekko; break; } break; case move_izimekko.izimerarekko: //いじめられっ子へ向かう //目標点(いじめられっ子)の方を向く TargetRotation = Quaternion.LookRotation(targetizimerarekko.transform.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, TargetRotation, Time.deltaTime * 10); //目標点(いじめられっ子)に進む object_move(this.transform.position, Speed); //視界からいじめられっ子がいなくなると立ち止まる if (srachizimerarekko() == false) { change_move_time = 0; move_mode_izimekko = move_izimekko.stop; break; } //いじめられっ子に近づくとその場でいじめる if (Vector3.Distance(targetizimerarekko.transform.position, transform.position) <= 2.0f) { izimerarekko m_izimerarekko = targetizimerarekko.GetComponent <izimerarekko>(); m_izimerarekko.izimekko_count(); move_mode_izimekko = move_izimekko.izime; } change_move_time++; if (change_move_time >= 300) { change_move_time = 300; TargetPosition = GetPosition(); move_mode_izimekko = move_izimekko.loitering; //徘徊 break; } break; case move_izimekko.izimekko_L: //いじめっ子リーダーに付きまとう //目標点(いじめっ子リーダー)の方を向く TargetRotation = Quaternion.LookRotation(m_izimekko_l.transform.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, TargetRotation, Time.deltaTime * 2); //目標点(いじめっ子リーダー)に進む object_move(this.transform.position, Speed); break; case move_izimekko.izime: break; case move_izimekko.stop: change_move_time++; if (change_move_time > 120) { change_move_time = 0; move_mode_izimekko = move_izimekko.loitering; break; } //いじめられっ子が視界内にいるか if (srachizimerarekko() == true) { change_move_time = 0; move_mode_izimekko = move_izimekko.izimerarekko; break; } break; default: break; } } else { Destroy(this); } }