質問編集履歴

1

コードのエラーによる問題は解決しましたが、アプリが動作中に落ちるという問題が発生しました。

2019/03/27 11:40

投稿

k373
k373

スコア17

test CHANGED
File without changes
test CHANGED
@@ -14,9 +14,9 @@
14
14
 
15
15
  下記コードにより、トラッキングが外れた際に動画の一時停止を実現しようと試みました。
16
16
 
17
- しかし、Cannot convert value of type 'SKVideoNode?' to expected argument type 'SCNNode'というエラーにより実現できず。
18
-
19
- 上記エーの問題点を教えしいす。
17
+ しかし、画像をトッキングした瞬間にアプリが落ちてしす。
18
+
19
+ 原因がわかりません。
20
20
 
21
21
 
22
22
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  func session(_ session: ARSession, didUpdate frame: ARFrame) {
26
26
 
27
- if !sceneView.isNode(videoPlayerNode, insideFrustumOf: sceneView!.pointOfView) {
27
+ if !sceneView.isNode(videoHolder!, insideFrustumOf: sceneView!.pointOfView!) {
28
28
 
29
29
  videoPlayerNode?.pause()
30
30
 
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- class ViewController: UIViewController, ARSCNViewDelegate {
57
+ class ViewController: UIViewController, ARSCNViewDelegate, ARSessionDelegate {
58
58
 
59
59
  @IBOutlet var sceneView: ARSCNView!
60
60
 
@@ -64,21 +64,23 @@
64
64
 
65
65
 
66
66
 
67
+
68
+
67
69
  override func viewDidLoad() {
68
70
 
69
71
  super.viewDidLoad()
70
72
 
71
73
 
72
74
 
73
- sceneView.delegate = self
74
-
75
75
  let scene = SCNScene()
76
76
 
77
77
  sceneView.scene = scene
78
78
 
79
79
  }
80
80
 
81
-
81
+
82
+
83
+
82
84
 
83
85
  override func viewWillAppear(_ animated: Bool) {
84
86
 
@@ -86,21 +88,31 @@
86
88
 
87
89
 
88
90
 
89
- let configuration = ARImageTrackingConfiguration()
91
+ let configuration = ARImageTrackingConfiguration()
92
+
93
+
90
94
 
91
95
  configuration.trackingImages = referenceImages!
92
96
 
97
+
98
+
93
99
  sceneView.session.run(configuration)
94
100
 
101
+
102
+
95
- }
103
+ }
104
+
105
+
106
+
96
-
107
+ var videoHolder: SCNNode?
97
-
98
-
99
-
108
+
109
+
110
+
111
+
100
112
 
101
113
  func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
102
114
 
103
-
115
+
104
116
 
105
117
  guard let imageAnchor = anchor as? ARImageAnchor else { return }
106
118
 
@@ -116,27 +128,33 @@
116
128
 
117
129
 
118
130
 
119
- let videoHolder = SCNNode()
120
-
121
131
  let videoHolderGeometry = SCNPlane(width: width, height: height)
122
132
 
133
+
134
+
123
- videoHolder.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
135
+ videoHolder!.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
124
-
136
+
137
+
138
+
125
- videoHolder.geometry = videoHolderGeometry
139
+ videoHolder!.geometry = videoHolderGeometry
126
140
 
127
141
 
128
142
 
129
143
  if let videoURL = Bundle.main.url(forResource: "img.scnassets/route", withExtension: "MOV"){
130
144
 
131
- setupVideoOnNode(videoHolder, fromURL: videoURL)
145
+ setupVideoOnNode(videoHolder!, fromURL: videoURL)
132
-
146
+
133
- }
147
+ }
134
-
135
-
136
-
148
+
149
+
150
+
151
+
152
+
137
- node.addChildNode(videoHolder)
153
+ node.addChildNode(videoHolder!)
138
-
154
+
155
+
156
+
139
- videoHolder.name = "route"
157
+ videoHolder!.name = "route"
140
158
 
141
159
  }
142
160
 
@@ -166,6 +184,8 @@
166
184
 
167
185
 
168
186
 
187
+
188
+
169
189
  let spriteKitScene = SKScene(size: CGSize(width: 1000, height: 1000))
170
190
 
171
191
  spriteKitScene.scaleMode = .aspectFit
@@ -178,10 +198,14 @@
178
198
 
179
199
 
180
200
 
201
+
202
+
181
203
  node.geometry?.firstMaterial?.diffuse.contents = spriteKitScene
182
204
 
183
205
 
184
206
 
207
+
208
+
185
209
  videoPlayerNode?.play()
186
210
 
187
211
  videoPlayer.volume = 100
@@ -216,13 +240,13 @@
216
240
 
217
241
  }
218
242
 
219
-
243
+
220
244
 
221
245
 
222
246
 
223
247
  func session(_ session: ARSession, didUpdate frame: ARFrame) {
224
248
 
225
- if !sceneView.isNode(videoPlayerNode, insideFrustumOf: sceneView!.pointOfView) {
249
+ if !sceneView.isNode(videoHolder!, insideFrustumOf: sceneView!.pointOfView!) {
226
250
 
227
251
  videoPlayerNode?.pause()
228
252
 
@@ -232,7 +256,7 @@
232
256
 
233
257
 
234
258
 
235
-
259
+ // 画面に表示された直後に呼ばれる。
236
260
 
237
261
  override func viewWillDisappear(_ animated: Bool) {
238
262
 
@@ -246,6 +270,8 @@
246
270
 
247
271
 
248
272
 
273
+
274
+
249
275
  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
250
276
 
251
277
  guard let location = touches.first?.location(in: sceneView),