/// <summary> /// 创建一个属性,代表与目标对象的距离. 其中TValue必须支持距离运算符 /// </summary> public static PropertyAccesser <TObject, float> Distance <TObject, TValue>(TObject target, PropertyAccesser <TObject, TValue> property) { return(new PropertyAccesser <TObject, float>( setter: (source, value) => { var from = property.Get(source); var to = property.Get(target); var dis = ValueUtility.Distance(from, to); var resultValue = ValueUtility.Lerp(from, to, 1 - value / dis); property.Set(source, resultValue); }, getter: (source) => { var from = property.Get(source); var to = property.Get(target); return ValueUtility.Distance(from, to); } )); }
private static void OnUpdate(ActionState actionState, ref State state) { var targetDis = state.totalDis * actionState.interpolatedTime; while (targetDis > state.seqEndDis) { if (!state.NextSeq()) { break; } } while (targetDis < state.seqStartDis) { if (!state.PreSeq()) { break; } } var t = (targetDis - state.seqStartDis) / (state.seqEndDis - state.seqStartDis); var value = ValueUtility.Lerp(state.seqFrom, state.seqTo, t); state.property.UnsafeSet(state.target, value); }
private static void OnUpdate(ActionState actionState, ref State state) { var value = ValueUtility.Lerp(state.from, state.to, actionState.interpolatedTime); state.property.UnsafeSet(state.target, value); }