標記はSwiftで動作を確認しました。
UIViewRepresentableのupdateUIViewで
uiViewから
Node.eulerAngles
を変更すれば良いでしょうか?
原因は
UIViewRepresentableのupdateUIViewで角度を変更しても、再描画されない
からと考えています。
makeUIViewに角度の値は正しく渡せています。
再描画させるための命令文などが必要でしょうか?
角度を設定する
.eulerAnglesがよくないでしょうか?
func updateUIView(_ uiView: UIViewType, context: Context){ Node.eulerAngles = SCNVector3(x: Float(self.pitch), y: Float(self.azimuth), z: Float(self.roll)) print(self.pitch,self.azimuth,self.roll) }
以下、一部抜粋
struct WrappedSceneKitView: UIViewRepresentable { @Binding var pitch:Double @Binding var azimuth:Double @Binding var roll:Double var scene = SCNScene() var scnView = SCNView() var Node = SCNNode() init(pitch:Binding<Double>,azimuth:Binding<Double>,roll:Binding<Double>){ _roll = roll _pitch = pitch _azimuth = azimuth } func makeUIView(context: Context) -> SCNView { scnView.backgroundColor = UIColor.white scnView.allowsCameraControl = false scnView.showsStatistics = false scnView.scene = scene // Adding a camera to a scene let cameraNode = SCNNode() cameraNode.camera = SCNCamera() cameraNode.position = SCNVector3(x: 0, y: 1.5, z: 5) scene.rootNode.addChildNode(cameraNode) // Adding an omnidirectional light source to the scene let omniLight = SCNLight() omniLight.type = .omni let omniLightNode = SCNNode() omniLightNode.light = omniLight omniLightNode.position = SCNVector3(x: 0, y: 10, z: 10) scene.rootNode.addChildNode(omniLightNode) // Adding a light source to your scene that illuminates from all directions. let ambientLight = SCNLight() ambientLight.type = .ambient ambientLight.color = UIColor.darkGray let ambientLightNode = SCNNode() ambientLightNode.light = ambientLight scene.rootNode.addChildNode(ambientLightNode) // Adding a cube(face) to a scene let orign:SCNGeometry = SCNCylinder(radius: 0.75, height: 0.75) Node.geometry = orign Node.position = SCNVector3(x:0.0,y:0.0,z:0.0) Node.eulerAngles = SCNVector3(x: Float(pitch), y: Float(azimuth), z: Float(roll)) scene.rootNode.addChildNode(Node) return scnView } func makeUIView(context: Context) -> SCNView {func updateUIView(_ uiView: UIViewType, context: Context){ Node.eulerAngles = SCNVector3(x: Float(self.pitch), y: Float(self.azimuth), z: Float(self.roll)) }
import SwiftUI import SceneKit struct ContentView: View { @ObservedObject var sensor = MotionSensor() var body: some View { WrappedSceneKitView(pitch:$sensor.pitch,azimuth:$sensor.azimuth,roll: $senror.roll)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/18 04:25