ObjectNet provides the facility to create custom behavior and apply it to NetworkObjects ( see Network Behaviour ).


To implement your own Behavior you can check the API document on NetworkEntity class.


The following piece of code example of how to implement your behavior :



    public struct DataToSync {       
        public Vector3 positionValue;
        public Color color;
    }


    public class BehaviourExample : NetworkEntity<DataToSync, IDataStream> {


        private DataToSync currentValue;
       
        public BehaviourExample() : base() {
           
        }


        public BehaviourExample(INetworkElement networkObject) : base(networkObject) {
        }


        public override void ComputeActive() {
            this.currentValue.positionValue = this.GetNetworkObject().GetGameObject().transform.position;
            this.currentValue.color         = this.GetNetworkObject().GetGameObject().GetComponent<Renderer>().materials[0].color;
        }


        public override void ComputePassive() {
            this.GetNetworkObject().GetGameObject().transform.position = this.currentValue.positionValue;
            this.GetNetworkObject().GetGameObject().GetComponent<Renderer>().materials[0].color = this.currentValue.color;
        }


        public override DataToSync GetPassiveArguments() {
            return this.currentValue;
        }


        public override void SynchonizePassive(DataToSync data) {
            this.currentValue.color         = data.color;
            this.currentValue.positionValue = data.positionValue;
        }


        public override void SynchonizeActive(IDataStream writer) {
            writer.Write(this.currentValue.positionValue);
            writer.Write(this.currentValue.color);           
        }


        public override void Extract(IDataStream reader) {
            this.currentValue.positionValue = reader.Read<Vector3>();
            this.currentValue.color         = reader.Read<Color>();
        }
    }



After your behavior is created you need to register it on all objects that you need to synchronize information.



    public void Awake() {
       this.GetNetworkElement().RegisterBehavior(new BehaviourExample());
    }



This code tells ObjectNet to include this behavior during the network synchronization procedure.