/// <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> /// Loads all SyncVars in networkObj. /// </summary> /// <param name="networkObj">The object that the SyncVars are loaded from.</param> private void loadSyncVars <T>(T networkObj) where T : NetworkBehaviour { Type objType = typeof(T); FieldInfo[] objectFields = objType.GetFields(); foreach (FieldInfo field in objectFields) { SyncVar syncVar = (SyncVar)Attribute.GetCustomAttribute(field, typeof(SyncVar)); //Found a SyncVar if (syncVar != null) { //Add a new Dictionary for object type if it doesn't exist if (!syncVars.ContainsKey(objType)) { syncVars.Add(objType, new Dictionary <string, SyncVarData>()); } object value = field.GetValue(networkObj); //Can only use SyncVars supported by the SyncVarMessageFactory if (SyncVarMessageFactory.isTypeSupported(field.GetType())) { syncVars[objType].Add(field.Name, new SyncVarData(networkObj, field, value)); //Debug.Log("[SyncVar Loaded] ObjectType: " + objType + " | Field: " + field.Name + " | Value: " + value); } else { Debug.LogWarning("The type, " + field.GetType() + ", is not a supported SyncVar type."); } } } }