クラウドソリューション開発部の今野です!
学校では夏休みがスタートした頃だと思います!
「宿題と自由研究は早めにやらなきゃねー…」なんて思っていたら、3日後は始業式…なんてことを経験された方もいらっしゃるのではないでしょうか。
自由研究、何を題材にしよう…そんなことを思っている人に参考になればと思います。
夏といえば、夜空に見える星空。地球から見えない星だって、地球から遠い場所にあるから見えないのであって、遥か遠くで今も輝いているのでしょう。
今回は、大陸(部屋の床)に月面着陸させたいと思います!
作成方法
1.Xcodeでプロジェクトを作成します。(MacでXcodeをインストールしていることが前提になります)
この際に、テンプレートを聞かれるので、「Augmented Reality App」を選択します。
2.言語は「SwiftUI」を選択します。
3.これでプロジェクトが開始されます。
ARアプリはカメラを使用するため、予めカメラの使用を許可しておく必要があります。
Info.plistファイルを開きます。画面左上の青いマーク「プロジェクト名」をクリックして、画面中央のInfoをクリックします。
Privacy -Camera Usage Descriptionという項目があるので、右側に「表示のためにカメラを使用します」と記述しておきます。
4.で、コードを書いていくのですが、ARアプリの場合、動かす元となるものを作成する必要があります。
自分で作成しても良いのですが、かなり高度なものを作る場合は大変なので、今回はAppleから配布されているものを使用しましょう。
こちらですね。
https://developer.apple.com/jp/augmented-reality/quick-look/
今回は、月面着陸させたいので、ハブ(火星居住ユニット)・宇宙飛行士・月面車の3つを用意します。
リンクに入ったら、それぞれの項目をクリックしてください。「〜.usdz」というファイルがダウンロードされると思います。
5.ダウンロードしたファイルをXcodeの左側のプロジェクトの直下に追加します。(ContentViewの下ですね)
ちなみにですが、CosmonautSuit_en.realityをクリックすると、宇宙飛行士が宇宙服を着用するアニメーションが再生されます。(これを見てるだけでも面白いです)
このように宇宙服を着用。
コード記述
さてさて、コードを書いていきましょう!ゴールはもう少し!
ContentViewにSwiftUIで記述していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import SwiftUI import RealityKit import ARKit struct ContentView: View { var body: some View { ARViewContainer() .edgesIgnoringSafeArea(.all) } } // UIViewRepresentable で RealityKit の ARView をラップ struct ARViewContainer: UIViewRepresentable { func makeUIView(context: Context) -> ARView { let arView = ARView(frame: .zero) // ワールドトラッキング構成 let config = ARWorldTrackingConfiguration() config.planeDetection = [.horizontal, .vertical] arView.session.run(config) // タップで銀河を配置 let tapGesture = UITapGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.handleTap)) arView.addGestureRecognizer(tapGesture) return arView } func updateUIView(_ uiView: ARView, context: Context) {} func makeCoordinator() -> Coordinator { Coordinator(self) } // Coordinator クラスでジェスチャー処理 class Coordinator: NSObject { var parent: ARViewContainer init(_ parent: ARViewContainer) { self.parent = parent } @objc func handleTap(recognizer: UITapGestureRecognizer) { guard let arView = recognizer.view as? ARView, let result = arView.raycast(from: recognizer.location(in: arView), allowing: .estimatedPlane, alignment: .any).first else { return } let baseMatrix = result.worldTransform // 1) 宇宙飛行士シーン(センターに配置) let cosmoAnchor = try! Entity.loadAnchor(named: "CosmonautSuit_en") cosmoAnchor.transform = Transform(matrix: baseMatrix) arView.scene.addAnchor(cosmoAnchor) // 2) Hab_en シーン(左側へ 0.5m オフセット) let habAnchor = try! Entity.loadAnchor(named: "hab_en") var habTransform = Transform(matrix: baseMatrix) habTransform.translation += SIMD3<Float>(-0.5, 0, 0) // X=-0.5m habAnchor.transform = habTransform arView.scene.addAnchor(habAnchor) // 3) Lunar Rover シーン(右側へ 0.5m、少し奥へ 0.3m) let roverAnchor = try! Entity.loadAnchor(named: "LunarRover_English") var roverTransform = Transform(matrix: baseMatrix) roverTransform.translation += SIMD3<Float>(0.5, 0, -0.3) // X=+0.5m, Z=-0.3m roverAnchor.transform = roverTransform arView.scene.addAnchor(roverAnchor) } } } |
このようにコードを記述したら、iPhoneをMacに繋いで、command+Rを叩いてビルドしてみましょう!
このように月面着陸させることができます!
終わりに
宇宙旅行を楽しめましたでしょうか?
ARを使えば、他にもいろんなものを表示させたり、アニメーションをつけたりできるようになります!
ちなみに、弊社開発の配筋検査ARシステム「BAIAS®」は今回のようなARを応用しています。
建築現場で、鉄筋の位置が正しい位置に配置されているかを確認する際に、
iPadのカメラ越しにマーカーを引いたり、数値を測定したりなど活用されています。
かなり高度なAR技術を使用しているため、気になった方はぜひご覧になってください!
弊社ではIoT関連の様々な案件にチャレンジすることができます。
ぜひ一緒にこれからの未来を作っていきませんか?
最後までご覧いただき、ありがとうございました!