So, can't edit or correct my own previous posts. Nice!
The above code of mine obviously doesn't work. Worse, it's bad code. Junk, really.
There are a couple of ways to handle creating an "aircraftScene" instance of SCNScene, @StateObject and doing a copy( ). I chose, after talking asking friends more experienced than me for their advice, to use @StateObject implementation of the "aircraftScene". But guess what?!? Apple didn't change SCNScene to conform to ObservedObject like it did for . So one needs to extend SCNScene to conform to ObservableObject in order to use the @StateObject property wrapper on an instance of SCNScene.
Unfortunately, this extension of SCNScene as an ObservableObject does not synthesize the objectWillChange publisher, which would emit a value change before any of its @Published properties changed.
Below is the simplified version of what I've done. This works. But not well. The performance never exceeds 53 fps and so can't be used for production sims or games.
If you find something amiss, which I'm sure you will, please post it here.
import SwiftUI
import SceneKit
extension SCNScene: ObservableObject {
}
struct SwiftUISceneKitUsingStateObjectVarsContentView: View {
		@State private var sunlightSwitch	 = true
		@State private var magnify					= CGFloat(1.0)
		@StateObject var aircraftScene			= SCNScene(named: "art.scnassets/ship.scn")!
		var body: some View {
				ZStack {
						Color.black.edgesIgnoringSafeArea(.all)
						SceneView (
								scene: aircraftScene,
								pointOfView: aircraftScene.rootNode.childNode(withName: "distantCameraNode", recursively: true)
						)
						.background(Color.black)
						.gesture(MagnificationGesture()
												.onChanged{ (value) in
														print("magnify = \(self.magnify)")
														self.magnify = value
														let camera = self.aircraftScene.rootNode.childNode(withName: "distantCameraNode", recursively: true)?.camera
														camera!.fieldOfView /= magnify
												}
												.onEnded{ _ in
														print("Ended pinch\n\n")
												}
						)
						VStack() {
								Text("Hello, SceneKit!").multilineTextAlignment(.leading).padding()
										.foregroundColor(Color.gray)
										.font(.largeTitle)
								Text("Pinch to zoom.")
										.foregroundColor(Color.gray)
										.font(.title)
								Text("Magnification: \(magnify, specifier: "%.2f")")
										.foregroundColor(Color.gray)
										.font(.title3)
										.padding()
								Text("FOV: \((self.aircraftScene.rootNode.childNode(withName: "distantCameraNode", recursively: true)?.camera!.fieldOfView)!, specifier: "%.2f")")
										.foregroundColor(Color.gray)
										.font(.title3)
								Spacer(minLength: 300)
								Button( action: {
										withAnimation{
												self.sunlightSwitch.toggle()
										}
										let sunlight = self.aircraftScene.rootNode.childNode(withName: "sunlightNode", recursively: true)?.light
										if self.sunlightSwitch == true {
												sunlight!.intensity = 2000.0
										} else {
												sunlight!.intensity = 0.0
										}
								}) {
										Image(systemName: sunlightSwitch ? "lightbulb.fill" : "lightbulb")
												.imageScale(.large)
												.accessibility(label: Text("Light Switch"))
												.padding()
								}
						}
				}
				.statusBar(hidden: true)
		}
}