SCNSceneがどれだけロードしているかを示す進捗インジケータを作成するのに苦労しています。 私は、SCNSceneScourceクラスを使用して、Appleのドキュメントに記載されているようにステータスハンドラを取得しようとしました。しかし、これはシーンがロードされたときに私に教えてくれるだけのものです。しかし、これは私が望んでいた情報ではありません - ロード時間とSCNNodeが表示されるまでに必要な時間(ロードされたファイルをグラフィックアダプタのメモリにプッシュするのに必要な時間であると仮定します)シーンキットがシーンをロード中に進捗インジケータが表示される
私のアプローチは、2回のうちの最初のものしか示していません。私は次のようにしました:SCNViewコンセント(self.skView)を追加してシーンをロードし、UIProgressBarをビューにロードするボタンを追加しました。プログレスバーは、SCNSceneSourceのtotalProgressプロパティを反映しています。
- (void)viewDidLoad {
[super viewDidLoad];
// set up the SCNView
if (_skView.scene==nil) _skView.scene = [SCNScene new];
}
-(void) loadScene {
SCNSceneSource *s = [SCNSceneSource sceneSourceWithURL:[[NSBundle mainBundle] URLForResource:@"Muscles_V04" withExtension:@"dae"] options:nil];
SCNScene *scene = [s sceneWithOptions:nil statusHandler:^(float totalProgress, SCNSceneSourceStatus status, NSError * _Nullable error, BOOL * _Nonnull stop) {
self.proressBar.progress = totalProgress;
NSLog(@"Total progress %.3f",totalProgress);
// once finished remove the status indicator
if (totalProgress>=0.9999) {
[self.proressBar removeFromSuperview];
}
}];
// add the nodes of the loaded scene to the existing scene
for (SCNNode *n in scene.rootNode.childNodes) {
NSLog(@"node: %@", n.name);
[self.skView.scene.rootNode addChildNode:n];
}
}