public void Reset() { CurrentScore = 0; trick = TrickMode.None; airtime = 0; wheelietime = 0; scoretime = 0; }
public void Trick(int trickMode, float minAngle, float maxAngle) { if (_state == WheelState.Trick) { return; } _state = WheelState.Trick; _trickMode = (TrickMode)trickMode; _trickMin = minAngle; _trickMax = maxAngle; _tricked = false; _trickIn = false; switch (_trickMode) { case TrickMode.Back: { float sign = _speed > 0 ? 1 : -1; float offset = 10; minAngle -= offset; maxAngle -= offset; _speed = Mathf.Max(150, Mathf.Abs(_speed)) * sign; float duration = Random.Range(0.15f, 0.8f); _accSpeed = (0 - _speed) / duration; _trickIn = true; //Debug.Log("Trick Back Begin AccSpeed = " + _accSpeed.ToString() + ", _speed = " + _speed.ToString()); break; } case TrickMode.Pass: { float sign = (_speed >= 0 ? 1 : -1); _accSpeed = 0; // 保证此刻速度足够 if (Mathf.Abs(_speed) <= 100) { _speed = 150 * sign; } //逆时针旋转 // 计算快速通过时间 float passDuration = 0.15f; //150ms _trickSpeed = sign * Mathf.Abs(_trickMax - _trickMin) / passDuration; _trickSpeed = sign * Mathf.Max(100, Mathf.Abs(_trickSpeed)); Debug.Log("Trick Pass Begin : Speed = " + _trickSpeed.ToString()); break; } } }
// Update is called once per frame void FixedUpdate() { if (_playerHealth.CurrentHealth <= 0) return; float scoreboost = 0; if (left != null && right != null) { bool leftgrounded = left.isGrounded; bool rightgrounded = right.isGrounded; trick = !rightgrounded ? (trick | TrickMode.FrontWheelUp) : (trick & ~TrickMode.FrontWheelUp); trick = !leftgrounded ? (trick | TrickMode.BackWheelUp) : (trick & ~TrickMode.BackWheelUp); if ( trick == TrickMode.AllWheelsUp ) { airtime += Time.deltaTime; if ( airtime > 0.5f ) { scoreboost += airtime * ( bikerflips._currflips + 1 ); } //RaycastHit hit = new RaycastHit(); //Physics.Raycast(new Ray(transform.position, transform.InverseTransformDirection(new Vector3(0, -1, 0))), out hit); if (airtime > 1.5f || sprite.spriteId == air_id) { sprite.spriteId = air_id; scoreboost += airtime * ( bikerflips._currflips + 1 ); } //sprite.spriteId = air_id; } else if ( trick == TrickMode.None ) { airtime = 0; wheelietime = 0; if (sprite.spriteId == air_id) { sprite.spriteId = ground_id; } } else { wheelietime += Time.deltaTime; if (wheelietime > 0.4f) { scoreboost += wheelietime; } if (sprite.spriteId == air_id) { sprite.spriteId = ground_id; } } } else { airtime = 0; wheelietime = 0; scoreboost = 0; trick = TrickMode.None; sprite.spriteId = ground_id; } if ( bodyisgrounded ) { airtime = 0; wheelietime = 0; scoreboost = 0; sprite.spriteId = ground_id; } else if (Player.rigidbody.velocity.magnitude < 0.1f) { airtime = 0; wheelietime = 0; scoreboost = 0; sprite.spriteId = ground_id; } scoretime += scoreboost != 0 ? Time.deltaTime : 0; CurrentScore += scoreboost; }