PlayMaker 对 PlayMakerFSM 里变量的操作
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 != 0) { //加到外层字典 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(); } } }