Exemple #1
0
 private int overlooking_time = 0; //srachi時に使用する変数
 void Start()
 {
     //初期位置設定
     this.transform.position = new Vector3(Random.Range(-22, 22), 0, Random.Range(-22, 22));
     //初期状態設定
     move_mode              = move.loitering;
     move_mode_izimekko     = move_izimekko.loitering;
     move_mode_izimerarekko = move_izimerarekko.loitering;
     //最初の目標点を決める
     TargetPosition = GetPosition();
     //いじめ子リーダーのデータを取得
     m_izimekko_l = GameObject.FindGameObjectWithTag("izimekko_L");
     izimepower   = 30;
 }
Exemple #2
0
    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);
        }
    }