This was my first fully scratch-built attempt at beating Going the Distance. I spent a few hours figuring out how to make Rotator-powered props really user-friendly by experimenting on another plane, and then tweaking this one to match.
Features:
- "Engines" turn on and off with Activate1 ('1' key)
 - "Engines" have low-RPM idle when activated.
 - "Engines" are throttle-able.
 - Max IAS is about 520 kph.
 - Infinite fuel! (Pretend it's solar powered or something).
 - A mysterious port roll tendency that I'm still trying to debug!
 
Take-off:
- Turn on engines by pressing '1'.
 - Max flaps (Trim slider to bottom.)
 - ~60% positive prop pitch (VTOL slider to just above the middle of the top half)
 - ~20-30% throttle until speed stops increasing, then smoothing increase throttle (if not careful, immense thrust will drive plane ass over teakettle).
 - Increase prop pitch to 100% (VTOL slider full up) and return flaps to 0 degrees (Trim slider to middle).
 - Trim nose pitch by adding a few degrees of flaps or dropping a few degrees of prop pitch.
 
Technical notes:
- I used the following formula for the RotatorJoint props with idle and throttle capability:
InputController: 
       "min" = "-1E+10"
       "min" = "1E+10"
       "input" = "sum( Activate1 ? ( clamp( Throttle, 0.03, 1 ) / ( 1.5 * 360 * 1000000 ) ) : 0 )"
    JointRotator:
        "range" = "180"
        "speed" = "3.5"
This took a while to figure out, but here's the breakdown:
- sum(: rotators don't work by rotating a certain number of degrees, they work by trying to rotate to a set degree as fast as they can, based on their "min", "max", and "speed" values.  If you just say "input": "Throttle", it tries to rotate to the "max" value * the Throttle value as fast as possible, limited by the Speed, and whatever Unity's internal maximum w value is.  So to make a rotator throttle-able, you need to add a small, but variable, amount to its input value every tick to give the rotator a new value to shoot for - think a greyhound chasing a mechanical rabbit.  The sum does that.
- Activate1 ? ... : ...: tell sum() to accumulate one value if Activate1 is on, and another if it's off.  Without this, even if you deactivate the rotator, its target value keeps increasing every tick - meaning if you turn the engine off, then on again, it'll then be stuck at max throttle forever.
- clamp( Throttle, 0.03, 1 ): I wanted a minimum idle rate when the engines are turned on, for looks.  This says "even if the user reduces the Throttle control to 0, never let it drop below 3%, and never let it exceed 100%".
- / ( 1.5 * 360 * 1000000 ))  Experimentally I found that, because the rotator speed is 3.5 and the max value is 1E+10, and presumably because of some max value in Unity, I needed to divide the Throttle input by this large number to prevent 100% Throttle input from causing the accumulated target rotation from exceeding the maximum possible rotation speed of the RotatorJoint, thus causing the engines to be stuck at 100% for an unpredictable amount of time.
- : 0 ): when the engine is deactivated, stop accumulating degrees - ignore the throttle input completely until reactivated.  This avoids another issue I've seen with using Throttle as a rotator's input: 0% Throttle sets the target rotation to 0 degrees, and the rotator starts running at full speed in reverse!
Specifications
Spotlights
- ThePeterGriffin 5.2 years ago
 
General Characteristics
- Predecessor Powered Sailplane 1b
 - Created On Android
 - Wingspan 72.1ft (22.0m)
 - Length 33.9ft (10.3m)
 - Height 15.5ft (4.7m)
 - Empty Weight 2,293lbs (1,040kg)
 - Loaded Weight 2,293lbs (1,040kg)
 
Performance
- Wing Loading 5.8lbs/ft2 (28.2kg/m2)
 - Wing Area 396.6ft2 (36.8m2)
 - Drag Points 1906
 
Parts
- Number of Parts 42
 - Control Surfaces 7
 - Performance Cost 369
 
          
              
                  
                  
                
@Sleet01 No problem!
@ILikeToMakeStuff Thanks!
Cool!