Photon OnPhotonSerializeView won't run?

hello, I’m working on a multiplayer game that has characters running around in a scene. I’ve gotten multiple characters to spawn in one area mostly with a lot of help from the marco polo tutorial. I am running into an issue, though, where their animations and movement are very jagged. NetworkCharacter seems to have code in it to smooth out the character’s motion (I will post this code below) however OnPhotonSerializeView is never running.

Ive looked through the documentation and online and what I’ve been able to find suggests all I need to do to get that function to be called is to assign the component with the OnPhotonSerializeView function (in this case the NetworkCharacter class) to the observed component variable of the PhotonView of the same object. I have taken care to drag the component and not just the script into this field.

Having done this, OnPhotonSerializeView doesn’t run and I’m not sure what else to try. Has anyone else encountered this?

using UnityEngine;

public class NetworkCharacter : Photon.MonoBehaviour
{
    private Vector3 correctPlayerPos = Vector3.zero; // We lerp towards this
    private Quaternion correctPlayerRot = Quaternion.identity; // We lerp towards this
    // Update is called once per frame
    void Update()
    {
        if (!photonView.isMine)
        {
            transform.position = Vector3.Lerp(transform.position, this.correctPlayerPos, Time.deltaTime * 5);
            transform.rotation = Quaternion.Lerp(transform.rotation, this.correctPlayerRot, Time.deltaTime * 5);
        }
    }

	void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
	{
		Debug.Log ("this is getting called");
		if (stream.isWriting)
		{
			// We own this player: send the others our data
			stream.SendNext(transform.position);
			stream.SendNext(transform.rotation);
			
			myThirdPersonController myC = GetComponent<myThirdPersonController>();
			stream.SendNext((int)myC._characterState);
		}
		else
		{
			// Network player, receive data
			this.correctPlayerPos = (Vector3)stream.ReceiveNext();
			this.correctPlayerRot = (Quaternion)stream.ReceiveNext();
			
			myThirdPersonController myC = GetComponent<myThirdPersonController>();
			myC._characterState = (CharacterState)stream.ReceiveNext();
		}
	}
}

41389-screen-shot-2015-02-25-at-21816-pm.png

You have to inherit IPunObservable to make it work correctly. And it also works only if there are more than 1 player in the room.