/// <summary> /// 获取内部变量的值 /// </summary> /// <param name="name"></param> /// <returns></returns> public static object GetInternalValue(string name) { BaseValue bv = data.GetBaseValue(name); if (bv != null) { return(bv.GetValue()); } else { Debug.LogError("不存在内部变量:" + name); return(null); } }
/// <summary> /// 设置内部变量的值 /// </summary> /// <param name="name"></param> /// <param name="value"></param> public void SetInternalValue(string name, object value) { BaseValue bv = data.GetBaseValue(name); if (bv != null) { if (!bv.GetValue().Equals(value)) { if (inValueEventDic[name] != null) { inValueEventDic[name](name, value); } } bv.SetValue(value); } }
protected override bool Compare(params object[] objs) { object value = logicObject.logicManager.GetInternalValue(internalValueName); object value1 = null; if (useInternalValue) { value1 = logicObject.logicManager.GetInternalValue(compareInternalValueName); } else { value1 = compareBaseValue.GetValue(); } return(CompareValue.Compare(value, value1, compareType)); }
/// <summary> /// 获取储存的实例(赋值) /// </summary> /// <param name="getInstanceCallBackR">自定义实例生成,用于GameObject组件赋值</param> /// <returns></returns> public object GetValue(object classObj = null) { if (string.IsNullOrEmpty(ScriptName)) { return(null); } Type type = null; if (classObj == null) { type = ReflectionUtils.GetTypeByTypeFullName(ScriptName); classObj = ReflectionUtils.CreateDefultInstance(type); } else { type = classObj.GetType(); if (type.FullName != ScriptName) { Debug.LogError("类型不同=》ScriptName:" + ScriptName + " classObj:" + classObj.GetType()); } } BindingFlags flags = BindingFlags.Instance | BindingFlags.Public; for (int i = 0; i < fieldValues.Count; i++) { BaseValue fInfo = fieldValues[i]; FieldInfo f = type.GetField(fInfo.name, flags); if (f != null && f.Name == fInfo.name) { try { f.SetValue(classObj, fInfo.GetValue()); } catch (Exception e) { Debug.LogError(e); } } } PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var pinfo in propertyValues) { if (string.IsNullOrEmpty(pinfo.name)) { continue; } PropertyInfo property = type.GetProperty(pinfo.name, BindingFlags.Public | BindingFlags.Instance); if (property.CanWrite) { try { property.SetValue(classObj, pinfo.GetValue(), null); }catch (Exception e) { Debug.LogError(e); } } } return(classObj); }