S&box Wiki

Revision Difference

Player_Animator#529668

<cat>Dev.Intro</cat> <cat>Code.Player</cat> <title>Player Animator</title> # What is a Player Animator The Animator is responsible for maintaining your AnimGraph with up to date information. You can also set the position and rotation of your player in the Animator. # Example ``` public class StandardPlayerAnimator : PlayerAnimator { public override void Tick() { DoRotation(); DoWalk(); // // Let the animation graph know some shit // SetParam( "b_grounded", GroundEntity != null ); // // Look in the direction what the player's input is facing // SetLookAt( "lookat_pos", Player.EyePos + Input.Rot.Forward * 1000 ); } public virtual void DoRotation() { // // Our ideal player model rotation is the way we're facing // var idealRotation = Rotation.LookAt( Input.Rot.Forward.WithZ( 0 ), Vector3.Up ); // // If we're moving, rotate to our ideal rotation // Rot = Rotation.Slerp( Rot, idealRotation, WishVelocity.Length * Time.Delta * 0.01f ); // // Clamp the foot rotation to within 120 degrees of the ideal rotation // Rot = Rot.Clamp( idealRotation, 120 ); } void DoWalk() { // // These tweak the animation speeds to something we feel is right, // so the foot speed matches the floor speed. Your art should probably // do this - but that ain't how we roll // SetParam( "walkspeed_scale", 2.0f / 190.0f ); SetParam( "runspeed_scale", 2.0f / 320.0f ); // // Work out our movement relative to our body rotation // var moveDir = WishVelocity.Normal; var forward = Rot.Forward.Dot( moveDir ); var sideward = Rot.Right.Dot( moveDir ); // // Set our speeds on the animgraph // SetParam( "forward", forward ); SetParam( "sideward", sideward ); SetParam( "wishspeed", WishVelocity.Length ); } } ``` # Setting Setting the Animator is the same as setting a <page>Player Controller</page>. ``` public override void Respawn() { base.Respawn(); Animator = new StandardPlayerAnimator(); } ``` Like the <page>Player Controller</page>, this property can be changed at any time and is replicated to the client. Setting to null will mean your player isn't animated.