SwiftのSpriteKit/SceneKitにおける点群選択機能の動作改善

Swiftでは、SpriteKit/SceneKitを使用して、点をプロットすることができます。

今回数万個の点をプロットし、一つ一つをタップで選択できるような機能が必要でした。

発生した問題

  • 点の1つ1つをSCNNodeで表示させると、点が多すぎて動作が非常に重い。
  • 一方でSCNGeometryで1つのオブジェクトとして表示させると動作は軽いが、点1つ1つをタップで検出できない。

解決策

  • SCNGeometryを作成する手前でvertices: [simd_float3]として座標データリストを定義しておく。
  • SCNGeometryを表示する一方で、タップ検出はverticesの中で一番近いものとする。

これで動作速度の大幅に改善しました!ラグ等一切なくなりました!