This should work with the SDK to duplicate the Pegasus motion.
When attaching the Pegasus model (or other vehicle) to VZPlayer, position so that the seat is at the origin of the VZPlayer. The NeckHeight parameter below presumes your eyes are 0.9 above that origin, so will remain vertical above the seat as the vehicle pitches up and down hills or when flying.
Another thing I left in the code is how the Pegasus dives, when you lean forward and not holding down A button (which in our SDK is Controller.RightButton). Diving is just a matter of letting you fall faster, as opposed to pushing down more.
Note to translate from Controller.InputSpeed to rpm, at the default difficulty of 5, divide by 6.462. That's the distance our initial prototype bike with 27" wheels traveled in one pedal revolution with a gear ratio of 3.
When attaching the Pegasus model (or other vehicle) to VZPlayer, position so that the seat is at the origin of the VZPlayer. The NeckHeight parameter below presumes your eyes are 0.9 above that origin, so will remain vertical above the seat as the vehicle pitches up and down hills or when flying.
Another thing I left in the code is how the Pegasus dives, when you lean forward and not holding down A button (which in our SDK is Controller.RightButton). Diving is just a matter of letting you fall faster, as opposed to pushing down more.
Note to translate from Controller.InputSpeed to rpm, at the default difficulty of 5, divide by 6.462. That's the distance our initial prototype bike with 27" wheels traveled in one pedal revolution with a gear ratio of 3.
Code:
using UnityEngine;
public class VZSimplePegasus : VZPlayer
{
/* VZPlayer settings
NearClipPlane: 0.1
FarClipPlane: 3000
DraftSpeed: 0
DraftFactor: 0
SpeedFudge: 1
DownhillFactor: 0.5
UphillFactor: 1.414
MaxVertSpeed: 4
MaxTurn: 0.6 // for Gold Pegasus this becomes 0.7
MaxSpeed: 12
LeanFudge: 2.5 // for Gold Pegasus this becomes 3
LeanIn: 0.5
LandingHardness: 1.5 // for Gold Pegasus this becomes 2
LandingRadius: 0.25
NeckHeight: 0.9 // for pivot point at seat
AllowRotate: 1
AllowPitch: 1
AllowRoll: 0
AllowDrift: 1 // so she drifts rather than brakes in air when not pedaling
RotateAtStop: 0
SlowRotateLimit: 0
AllowReverse: 0
ForceReverse: 0
ResistanceAdjust: 0
*/
public float LiftSpeed = 7.0f;
public float MaxHeight = 130.0f; // for Gold Pegasus this becomes 195
protected override void FixedUpdate()
{
base.FixedUpdate();
// Starts lifting at LiftSpeed
Vector3 force = Vector3.zero;
if (Controller.RightButton.Down)
force.y = 9.81f * Controller.InputSpeed / LiftSpeed;
// Lean forward to dive when coasting
float bend = Controller.RightButton.Down ? 0 : Mathf.Clamp01(Controller.HeadBend / 0.2f);
MaxVertSpeed = Mathf.Lerp(4, 7, bend);
// Lift peters out at MaxHeight
if (!Colliding() && Altitude() > 0)
force.y -= 9.81f * Altitude() / MaxHeight;
// Apply lift force
GetRigidbody().AddForce(force);
}
}