namespace Unity.VisualScripting { [UnitOrder(404)] public abstract class DotProduct : Unit { /// /// The first vector. /// [DoNotSerialize] public ValueInput a { get; private set; } /// /// The second vector. /// [DoNotSerialize] public ValueInput b { get; private set; } /// /// The dot product of A and B. /// [DoNotSerialize] [PortLabel("A\u2219B")] public ValueOutput dotProduct { get; private set; } protected override void Definition() { a = ValueInput(nameof(a)); b = ValueInput(nameof(b)); dotProduct = ValueOutput(nameof(dotProduct), Operation).Predictable(); Requirement(a, dotProduct); Requirement(b, dotProduct); } private float Operation(Flow flow) { return Operation(flow.GetValue(a), flow.GetValue(b)); } public abstract float Operation(T a, T b); } }