HutongGames.PlayMaker; //需要引用这个命名空间
红色的字体是对变量的操作,其他的没啥关系.
#region 判断为 PlayMakerFSM 组件时
if (behaviour.GetType() == typeof(PlayMakerFSM))
{
PlayMakerFSM temp_PlayMakerFSM = behaviour as PlayMakerFSM;
compKey = temp_PlayMakerFSM.Fsm.Name;//拿到状态机的名字,如 FSM01 #region 操作 float 类型的变量(其他类型的变量也类似)
//拿到 PlayMakerFSM组件 的所有Float类型的变量值,存在数组里
NamedVariable[] floatArray = temp_PlayMakerFSM.FsmVariables.GetNamedVariables(VariableType.Float);
//Debug.Log("floatArray长度:" + floatArray.Length);
foreach (var variable in floatArray)
{
//判断变量是否是 inspector 的,是的话再判断是什么类型的,存入相应的字典里
if (variable.ShowInInspector == true)
{
//得到变量的要存到字典的Value (variable.RawValue 也可以拿到变量值,不过应该是FsmFloat类型的)
float variableValue = float.Parse(variable.ToString());//拿到变量的值(它是FsmFloat类型的,要先转换为string,再转为float)
//Vector3也是一样的,它是FsmVector3类型的,先转为string再转为Vector3(vector3与string转换方法,http://www.cnblogs.com/Peng18233754457/p/8653663.html)
//Quaternion也是一样的,网上有string与Quaternion的转换方法,http://www.cnblogs.com/Peng18233754457/p/8763137.html
//((FsmFloat)variable).Value = 1.23;//改变变量的值
//得到变量的要存到字典的Key (变量的名称)
string variableKey = variable.Name;//拿到变量的名称 //字典里不包含这个键,就直接加进去
if (!float_TempDic.ContainsKey(variableKey))
{
float_TempDic.Add(variableKey, variableValue);
}
//字典里包含这个键,就改掉这个键对应的值
else
{
float_TempDic[variableKey] = variableValue;
} //当这个字典里有东西的时候
if (float_TempDic.Keys.Count != )
{
//加到外层字典
if (!describePath.comp_FloatVar_Val.ContainsKey(compKey))
{
//describePath.comp_FloatVar_Val.Add(compKey, float_TempDic);
describePath.comp_FloatVar_Val.Add(compKey, JsonUtility.ToJson(new Serialization<string, float>(float_TempDic)));
}
else
{
describePath.comp_FloatVar_Val[compKey] = JsonUtility.ToJson(new Serialization<string, float>(float_TempDic));
} float_TempDic.Clear();
}
}
}