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; } } } //////////////////////////////////////////////////////////////////////////////// }