public void RecoveryState(IState state)
        {
            GameObject go = state.GetTarget();
            Transform tfm = go.transform;
            var dic = state.ToDic();

            Converter<System.Object,float> doubleTofloat = i =>{
                double temp = (double)i;
                return (float)temp;
            };

            /// dic to value
            ////////////////////////////////////////////////////////////////////////////////
            foreach (var item in dic) {
                PropertyInfo property = tfm.GetType().GetProperty(item.Key);
                List<System.Object> temp= item.Value as List<System.Object>;
                List<float> value = temp.ConvertAll(doubleTofloat);

                switch (item.Key) {
                    case "position": {
                            Vector3 pos = new Vector3(value[0], value[1], value[2]);
                            property.SetValue(tfm, pos, null);
                            break;
                    }
                    case "rotation": {
                            Quaternion rotation = new Quaternion(value[0], value[1], value[2], value[3]);
                            property.SetValue(tfm, rotation, null);
                            break;
                    }
                    case "localScale": {
                            Vector3 scale = new Vector3(value[0], value[1], value[2]);
                            property.SetValue(tfm, scale, null);
                            break;
                    }
                }
            }
            ////////////////////////////////////////////////////////////////////////////////
        }