private void UpdateUnitRotate( Vector3 direction ) { if ( State != PounceStates.Rotating ) return; // Reset on all but yaw axis transform.eulerAngles = new Vector3( 0, transform.eulerAngles.y, 0 ); // Rotate towards the victim player if ( GetComponent<Rigidbody>().angularVelocity.magnitude < 0.001f ) { GetComponent<Rigidbody>().isKinematic = true; Vector3 lookdirection = Vector3.RotateTowards( transform.forward, direction, Time.deltaTime * LerpSpeed / 2.0f, 0.0F ); transform.rotation = Quaternion.LookRotation( lookdirection ); float distance = Vector3.Distance( transform.forward, direction ); if ( distance < 0.1f ) { State = PounceStates.ChargingUp; StartPouncePosition = transform.localPosition; } } }
private void UpdateUnitChargeUp( Vector3 direction ) { if ( State != PounceStates.ChargingUp ) return; bool close = false; // Eyes widen for ( int eye = 0; eye < 2; eye++ ) { Eyes[eye].transform.localScale = Vector3.Lerp( Eyes[eye].transform.localScale, DefaultEyeScale * EyeChargeAffect, Time.deltaTime * ChargeUpRate ); if ( Vector3.Distance( Eyes[eye].transform.localScale, DefaultEyeScale * EyeChargeAffect ) < 0.1f ) { close = true; } } // Mouth widen int multiplier = 1; for ( int jaw = 0; jaw < 2; jaw++ ) { Jaws[jaw].transform.rotation = Quaternion.Lerp( Jaws[jaw].transform.rotation, DefaultJawOffset[jaw] * Quaternion.Euler( Jaws[jaw].transform.forward * JawChargeAffect * multiplier ), Time.deltaTime * ChargeUpRate ); multiplier = 1; } // Shake violently transform.localPosition += new Vector3( Random.Range( -0.01f, 0.01f ), 0, Random.Range( -0.01f, 0.01f ) ); // Move to attacking if ( close ) { State = PounceStates.Attacking; // Reset position after shaking transform.localPosition = StartPouncePosition; } }