character customization animation sync problem in network

hello,
i’m trying to use character customization example in my project, all seems to work well but i can’t see animation changeing between idle and walk when the server was started, I have tryed with RPC but no luck.
This is my modified fpsinputcontroller, it essentially set the character when the character was generated and play the animations when you move

private var motor : CharacterMotor;
var Character : GameObject;
var NetV : NetworkView;


// Use this for initialization
function Awake () {
	motor = GetComponent(CharacterMotor);
}

// Update is called once per frame
function Update () {
	// Get the input vector from kayboard or analog stick
	var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
	
	if (directionVector != Vector3.zero) {
		// Get the length of the directon vector and then normalize it
		// Dividing by the length is cheaper than normalizing when we already have the length anyway
		var directionLength = directionVector.magnitude;
		directionVector = directionVector / directionLength;
		
		// Make sure the length is no bigger than 1
		directionLength = Mathf.Min(1, directionLength);
	
		// Make the input vector more sensitive towards the extremes and less sensitive in the middle
		// This makes it easier to control slow speeds when using analog sticks
		directionLength = directionLength * directionLength;
		
		// Multiply the normalized direction vector by the modified length
		directionVector = directionVector * directionLength;
	}
	
	// Apply the direction to the CharacterMotor
	motor.inputMoveDirection = transform.rotation * directionVector;
	motor.inputJump = Input.GetButton("Jump");
	
	SetCharacter();
	networkView.RPC("AnimateCharacter", RPCMode.All);
//Add the character animation component to observed 
	NetV.observed = Character.animation;
}

// Require a character controller to be attached to the same game object
@script RequireComponent (CharacterMotor)
@script AddComponentMenu ("Character/FPS Input Controller")


 function SetCharacter(){
//yield WaitForSeconds (4);

	if (Character == null){
	Character = gameObject.Find("female");
	
}
	if (!gameObject.Find("female")){
	Character = gameObject.Find("male");
	
}else{
	return;
}
}

@RPC
function AnimateCharacter(info : NetworkMessageInfo){
	if (Input.GetAxis("Vertical") && Input.GetAxis("Horizontal")){
	Character.animation.CrossFade("walk");
	
}else{
	Character.animation.CrossFade("idle1");
	
	}
}

any suggestion will be very, very appreciated & sorry for my english

Michael,
It doesn’t look like you’re actually sending any information with the RPC call. I think what you want to do is detect Input on your local copy, send this information over the network, and animate on the remote copy. What currently happens is that the remote copy receives the RPC call and checks its own Input - so it will only animate if it receives an RPC call AND gets input on the same frame. What you want to do is something like this:

bool gotInput = (Input.GetAxis("Vertical") || Input.GetAxis("Horizontal"))

networkView.RPC("AnimateCharacter", RPCMode.Others, gotInput);

//note that I changed RPCMode to others - setting to All will call us as well, which we clearly don’t need to do since we already have the input information. I also changed the input to || from &&, since I’m assuming you don’t want the user to have to press both simultaneously

then on the other side,

function AnimateCharacter(bool gotInput)
{
  if (gotInput) { start the animation }
}

//I removed the NetworkMessageInfo (you’re not using it, so you don’t need it) and added the bool that you’re passing on the other side.

Check out the Unity reference on RPC calls for more info.