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; } }
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; } }