RealityKit(iOS) - プレーンメッシュに円を描く
RealityKitとRealityKit向けのMetalシェーダを使って、プレーンメッシュ(板ポリゴン)に円を描きます. サンプルコード Xcodeプロジェクト(Xcode) TryRealityKit_DrawToPlane_Circle.zip
RealityKitとRealityKit向けのMetalシェーダを使って、プレーンメッシュ(板ポリゴン)に円を描きます. サンプルコード Xcodeプロジェクト(Xcode) TryRealityKit_DrawToPlane_Circle.zip
RealityKitとRealityKit向けのMetalシェーダを使って、プレーンメッシュ(板ポリゴン)に矩形を描きます. サンプルコード Xcodeプロジェクト(Xcode) TryRealityKit_DrawToPlane_Rect.zip
RealityKitとRealityKit向けのMetalシェーダを使って、プレーンメッシュ(板ポリゴン)に三角を描きます. サンプルコード Xcodeプロジェクト(Xcode) TryRealityKit_DrawToPlane_Texture.zip
RealityKitとRealityKit向けのMetalシェーダを使ったプレーンメッシュ(板ポリゴン)を複数描きます. サンプルコード Xcodeプロジェクト(Xcode) TryRealityKit_ManyPlanes.zip
SwiftでのAppサンプルを紹介していきます. RealityKit(iOS/iPadOS) iOSでRealityKitを動作させるサンプルです. swiftpmのサンプルはiPadのPlayground Appでも実行可能です. 1. 物理ベースマテリアル (Physically Based Material) 1-1. Physically Based Material: Box 1-2. Physically Based Material: Sphere 2. ライティングをしないマテリアル (Unlit Material) 2-1. Unlit Material: Box 2-2. Unlit Material: Sphere 3. シンプルマテリアルのカスタマイズ 3-1. テクスチャを適用したBox 3-2. テクスチャを適用したSphere 4. シェーダを使ったマテリアル [※Xcodeのみ] 4-1. プレーンメッシュに円を描く 4-2. プレーンメッシュにボヤけた円を描く 4-3. プレーンメッシュに矩形を描く 4-4. プレーンメッシュに三角を描く 4-5. プレーンメッシュにテクスチャをあてる 4-6. プレーンメッシュを複数描く
前節で, リストのデータをJSONファイルに書き出す・読み込む・削除することができるようになりました. またファイルがない場合の初期化処理も取り扱いました. 一方, 昨今のAppではデータをストレージに保存する以外のパターンが多くなりました。つまりネットワークを介してサーバにアクセスし, JSONといったデータを受け取るという方法です. 今回はJSONを返してくれるサーバにデータをリクエストする例を紹介します. SFSwiftUI03-4.swiftpm を開く (サンプルコード) 3-2-5を完了したコードと同様 photos配列は空っぽ Resources/photos.json も存在しない また簡単のため,3-3で作成した追加や削除の機能も省いている コード1 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 import SwiftUI struct ContentView: View { @State var photos:[PhotoData] = [] var body: some View { List { Section { ForEach( $photos ) { bind_photo in NavigationLink( destination:{ SceneryDetail( data:bind_photo ) }, label: { SceneryRow( data:bind_photo....
前回, サーバにJSONデータをリクエストしてAppで活用する方法を紹介しました. 今回は仕上げとして作成したAPIAccessorのブラッシュアップを行います. 前回のコードに続けて書く APIAccessor.requestPhotos()のエラー処理を行う do { … } catch { … } をつかう. try! を try に置き換えて例外を拾う JSONDecoder().decode に guard letをつかう try! は try? に変更する try? は異常時に例外の代わりにnilを返す. guardなどで判定できるようになる コード1 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 import Foundation class APIAccessor { static func requestPhotos() async -> [PhotoData] { let api_photos = "https://archive....
前回で外部のJSONファイルを読み込んでリストに表示することができました. 今後はJSONを書き換えるだけでリストのデータを変えることができます. 今回は3-2-1で作ったプログラムをつかいJSONファイルのみ変更してみます. photos.jsonに情報を追加する (※注1) カンマは値の区切りにつける. 最後の要素の後にはつかないので注意(つけるとエラーになる) (※注2) iPadではphotos.jsonが編集できないので, photos2.jsonを読み込んで試してみてください コード1 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 [ { "id": "0", "type": "景色", "imageName": "CC0_01", "title": "景色1", "message": "森と山です" }, { "id": "1", "type": "景色", "imageName": "CC0_04", "title": "景色2", "message": "きれいな湖です" }, { "id": "2", "type": "景色", "imageName": "CC0_06", "title": "景色3", "message": "フィレンツェです" }, { "id": "3", "type": "景色", "imageName": "CC0_07", "title": "景色4", "message": "ひまわりです" }, { "id": "4", "type": "景色", "imageName": "CC0_10", "title": "景色5", "message": "海に日が沈みます" } ] 結果 Swiftのコードには何も加えていませんが、リストにデータが増えたことがわかると思います....
前々回, 前回で外部のJSONファイルをデータとし, SwiftUIは表示の役割に集中するコードを作ることができました. しかし3-2-1で作成したJSONの読み込みコードは少し作りかたに不安があります. 今回は3-2-1のコードをより良いものにするのが目的です.具体的には以下のことです. 例外処理をきちんと処理する 例外が発生した時にエラーをコンソールに出す Optional(!や?)をきちんと処理する まずは読み込みの関数の改善です. Resource.swiftの load( name: ext: ) の例外処理を行う 処理を do { ~~ } で包む (doの中で発生した例外を拾うようになる) try!は例外を潰してしまう ので, !を外した try に置き換える tryで例外が起きた時の処理を catch { ~~ } に書く catch内ではエラーをコンソールに出すprintを書く データ取得に失敗したので, 空のData()をreturnする コード1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import Foundation class Resource { static func load( name:String, ext:String ) -> Data { do { let url = Bundle....
前節で, App内にあらかじめバンドルさせておいたJSONファイルからPhotoDataを作り, リストに表示することができました. しかしバンドルしたJSONはあくまで読み込み専用で,編集したデータを保持できません. そこで今節ではバンドルではなく自由に読み書きできるストレージを使ってJSONを扱う方法を紹介します. まず準備です. SFSwiftUI03-3.swiftpm を開く (サンプルコード) 03-2を完了したコードと同様 photos配列を空っぽにしている 後で読み込むためのJSONファイルが入っている データがないため, プレビューも何もない状態から始まることを確認 実行結果 コード1 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 import SwiftUI struct ContentView: View { @State var photos:[PhotoData] = [] var body: some View { List { Section { ForEach( $photos ) { bind_photo in NavigationLink( destination:{ SceneryDetail( data:bind_photo ) }, label: { SceneryRow( data:bind_photo....