Example #1
0
    protected override void _FixedUpdate()
    {
        base._FixedUpdate();

        _isNearWall  = isNearWall();
        _isSeePlayer = isSeePlayer();

        switch (currentState)
        {
        case monster_4_Ground_state.idle:
            //在水面浮动
            rig.velocity = (Mathf.Sin(Time.time * 1 / floatCycle) * Vector2.up * floatScale);

            if (_isSeePlayer)
            {
                if (!_isNearWall)
                {
                    currentState = monster_4_Ground_state.walk;
                    animator.SetTrigger("walk");
                    _time0 = 0;
                }
                else
                {
                    Dir = (Dir == dir.left ? dir.right : dir.left);
                    transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
                    currentState         = monster_4_Ground_state.walk;
                    animator.SetTrigger("walk");
                    _time0         = 0;
                    _Timer_inertia = 0;
                }
            }
            break;


        case monster_4_Ground_state.walk:
            _Timer_inertia += Time.deltaTime;
            float t = _Timer_inertia / speedUpTime;

            rig.velocity = (Dir == dir.left?Vector2.left:Vector2.right) * Mathf.Lerp(0, walkSpeed, t);
            //在水面浮动
            rig.velocity += (Mathf.Sin(Time.time * 1 / floatCycle) * Vector2.up * floatScale);
            _time0       += Time.deltaTime;

            if (_isNearWall)
            {
                Dir = (Dir == dir.left ? dir.right : dir.left);
                transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
                currentState         = monster_4_Ground_state.idle;
                animator.SetTrigger("idle");
                rig.velocity = Vector2.zero;
            }
            if (_time0 > motionDuration)
            {
                currentState = monster_4_Ground_state.idle;
                animator.SetTrigger("idle");
                rig.velocity = Vector2.zero;
            }
            break;
        }
    }
Example #2
0
    protected override void _FixedUpdate()
    {
        base._FixedUpdate();


        if (currentState != monster_4_Ground_state.back)
        {
            _isNearEdge  = isNearEdge();
            _isNearWall  = isNearWall();
            _isSeePlayer = isSeePlayer();
        }
        else
        {
            transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
            _isNearEdge          = isNearEdge();
            _isNearWall          = isNearWall();
            _isSeePlayer         = isSeePlayer();

            transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
        }

        switch (currentState)
        {
        case monster_4_Ground_state.idle:

            if (_isSeePlayer)
            {
                if (!_isNearEdge && !_isNearWall)
                {
                    currentState = monster_4_Ground_state.walk;
                    animator.SetTrigger("walk");
                    _time0       = 0;
                    _Timer_speed = 0;
                }
                else
                {
                    currentState = monster_4_Ground_state.back;
                    animator.SetTrigger("back");
                    _time0       = 0;
                    _Timer_speed = 0;
                }
            }
            break;


        case monster_4_Ground_state.back:
            //惯性
            _Timer_speed += Time.deltaTime;
            float t = _Timer_speed / speedUpTime;
            rig.velocity = Vector2.down * Mathf.Lerp(0, walkSpeed, t);

            _time0 += Time.deltaTime;

            if (_isNearEdge || _isNearWall)
            {
                currentState = monster_4_Ground_state.idle;
                animator.SetTrigger("idle");
                rig.velocity = Vector2.zero;
            }
            if (_time0 > motionDuration)
            {
                currentState = monster_4_Ground_state.idle;
                animator.SetTrigger("idle");
                rig.velocity = Vector2.zero;
            }
            break;



        case monster_4_Ground_state.walk:
            _Timer_speed += Time.deltaTime;
            float t1 = _Timer_speed / speedUpTime;

            rig.velocity = Vector2.up * Mathf.Lerp(0, walkSpeed, t1);
            _time0      += Time.deltaTime;

            if (_isNearEdge || _isNearWall)
            {
                currentState = monster_4_Ground_state.idle;
                animator.SetTrigger("idle");
                rig.velocity = Vector2.zero;
            }
            if (_time0 > motionDuration)
            {
                currentState = monster_4_Ground_state.idle;
                animator.SetTrigger("idle");
                rig.velocity = Vector2.zero;
            }
            break;
        }
    }