暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

MoveTowards.cs 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using UnityEngine;
  2. namespace Unity.VisualScripting
  3. {
  4. [UnitOrder(502)]
  5. public abstract class MoveTowards<T> : Unit
  6. {
  7. /// <summary>
  8. /// The current value.
  9. /// </summary>
  10. [DoNotSerialize]
  11. public ValueInput current { get; private set; }
  12. /// <summary>
  13. /// The target value.
  14. /// </summary>
  15. [DoNotSerialize]
  16. public ValueInput target { get; private set; }
  17. /// <summary>
  18. /// The maximum scalar increment between values.
  19. /// </summary>
  20. [DoNotSerialize]
  21. public ValueInput maxDelta { get; private set; }
  22. /// <summary>
  23. /// The incremented value.
  24. /// </summary>
  25. [DoNotSerialize]
  26. [PortLabelHidden]
  27. public ValueOutput result { get; private set; }
  28. [Serialize, Inspectable, UnitHeaderInspectable("Per Second"), InspectorToggleLeft]
  29. public bool perSecond { get; set; }
  30. [DoNotSerialize]
  31. protected virtual T defaultCurrent => default(T);
  32. [DoNotSerialize]
  33. protected virtual T defaultTarget => default(T);
  34. protected override void Definition()
  35. {
  36. current = ValueInput(nameof(current), defaultCurrent);
  37. target = ValueInput(nameof(target), defaultTarget);
  38. maxDelta = ValueInput<float>(nameof(maxDelta), 0);
  39. result = ValueOutput(nameof(result), Operation);
  40. Requirement(current, result);
  41. Requirement(target, result);
  42. Requirement(maxDelta, result);
  43. }
  44. private T Operation(Flow flow)
  45. {
  46. return Operation(flow.GetValue<T>(current), flow.GetValue<T>(target), flow.GetValue<float>(maxDelta) * (perSecond ? Time.deltaTime : 1));
  47. }
  48. public abstract T Operation(T current, T target, float maxDelta);
  49. }
  50. }