はじめに
ARKitを使用して開発をする上で、ARSCNViewDelegateのイベントハンドリングでARAnchorを取得して
なにかしら処理をすることはあると思うが、いくつかあるイベントの実行順番が分からなかったので調べてみました。
結論としては
renderer(:nodeFor:)
↓
renderer(:didAdd:for:)
↓
renderer(:willUpdate:for:)
↓
renderer(:didUpdate:for:)
↓
renderer(:willUpdate:for:)
↓
renderer(:didUpdate:for:)
↓
renderer(:willUpdate:for:)
↓
renderer(:didUpdate:for:)
↓
以下繰り返し
ちょっとおもしろかった発見
カメラで撮った写真、またはライブラリから選択した写真をPlaneに貼り付ける処理をrenderer(:nodeFor:)に実装していたが、
カメラで写真を撮った場合は、その都度renderer(:nodeFor:)から順番に実行されるが、ライブラリから写真を選択した場合は、
renderer(_:willUpdate:for:)からしか呼ばれないため画像が更新されなかった。
恐らくカメラを起動した場合、シーンが初期化されるのが原因だと思われる。
まとめ
どのイベントに実装すべきか、シーンの状態にも影響されそうなので、
組み合わせて実装する機能の特性も知っておく必要がありそう。