/// <summary> /// Monitors SyncVars for change. /// </summary> private void monitorSyncVars() { //Find SyncVars that changed foreach (KeyValuePair <Type, Dictionary <string, SyncVarData> > typeSyncVars in syncVars) { foreach (KeyValuePair <string, SyncVarData> fieldSyncVarData in typeSyncVars.Value) { SyncVarData syncVarData = fieldSyncVarData.Value; object value = syncVarData.field.GetValue(syncVarData.networkObj); //Value of SyncVar changed if (!value.Equals(syncVarData.value)) { syncVarData.value = value; if (networkIdentity.networkAuthority == NetworkAuthority.CLIENT) { networkIdentity.sendMessage(SyncVarMessageFactory.createSyncVarMessage(this, typeSyncVars.Key, value.GetType(), syncVarData.field.Name, value, true), true); } else if (networkIdentity.networkAuthority == NetworkAuthority.SERVER) { networkIdentity.sendMessage(SyncVarMessageFactory.createSyncVarMessage(this, typeSyncVars.Key, value.GetType(), syncVarData.field.Name, value, false), true); } } } } }
/// <summary> /// Sets the value of a SyncVar with the name, fieldName on a NetworkBehaviour object of Type, objType. /// </summary> /// <typeparam name="T">Type of the SyncVar field.</typeparam> /// <param name="objType">Type of the object with the SyncVar.</param> /// <param name="fieldName">Name of the SyncVar field.</param> /// <param name="value">Value of the SyncVar.</param> internal bool setSyncVar <T>(Type objType, string fieldName, T value) { //There is at least one SyncVar on an object of Type, objType if (syncVars.ContainsKey(objType)) { //Found the SyncVar if (syncVars[objType].ContainsKey(fieldName)) { SyncVarData syncVarData = syncVars[objType][fieldName]; syncVarData.field.SetValue(syncVarData.networkObj, value); return(true); } else { Debug.Log("Could not find a SyncVar with field name: " + fieldName); } } else { Debug.Log("Could not find a SyncVar on an object of Type: " + objType); } return(false); }