Exemple #1
0
    private IEnumerator delayToResetFlag()
    {
        yield return(new WaitForSeconds(0.3f));

        isAttack = false;
        seaAtker = null;
    }
Exemple #2
0
    // Update is called once per frame
    void Update()
    {
        switch (state)              //狀態切換
        {
        case States.Stop:           //停止
            break;

        case States.Normal:         //正常
            transform.Translate(Vector3.forward * .06f);
            if (!isAttack)          //若沒攻擊,則攻擊,轉為攻擊狀態
            {
                isAttack   = true;
                this.state = States.Attack;
            }
            break;

        case States.Attack:         //攻擊
            if (!atkflag)
            {
                ani.SetTrigger("atk");                  //撥放攻擊動畫
                atkflag  = true;
                seaAtker = this;
                resetAttackFlag();
            }

            float     step     = speed * Time.deltaTime;
            Transform camTrans = Camera.main.transform;
            target             = camTrans.position + camTrans.forward * 1.5f;
            transform.position = Vector3.MoveTowards(transform.position, target, step);

            this.transform.rotation = Quaternion.Euler(0f, 0f, -81f);
            var dis = (target - transform.position).magnitude;

            if (dis < 0.1f)
            {
                GameController.hit();
                this.stay += Time.deltaTime;
                this.transform.SetParent(Camera.main.transform);

                if (stay > stayTime)
                {
                    this.state = States.KeepMove;
                }
            }

            break;

        case States.KeepMove:                                                 //持續行動
            if (!toFall)                                                      //若沒掉落
            {
                Rigidbody body = this.gameObject.AddComponent <Rigidbody> (); //加入剛體
                body.AddForce(Vector3.down);
                resetAttackFlag();
                toFall = true;
            }
            break;

        case States.KeepToGone:         //持續到消失
            disappearTime += Time.deltaTime;
            if (disappearTime > 5f)     //持續的時間
            {
                this.gameObject.SetActive(false);
            }
            break;

        case States.Die:            //死亡
            ani.SetTrigger("dead");
            this.GetComponentInChildren <CapsuleCollider> ().enabled = false;
            this.state = States.KeepToGone;
            break;
        }
    }