Swift
SceneKitでscnファイルで設定していたSCNNodeのScale値が大きくなるバグについて。 意味不明のバグだったのですが、数時間の調査の結果原因が判明しました。 Nodeの方向をカメラに向くように設定していたSCNBillboardConstraintを使わないようにすることで解…
SCNノードのベクトルを常時カメラの方へ向かせるにはSCNBillboardConstraintを使います。 下記のソースでノードのconstraintsに指定してあげます。 let billboard = SCNBillboardConstraint() billboard.freeAxes = SCNBillboardAxis.Y //Y座標のみ追従させ…
ARの空間座標をスクリーン座標に変換する関数を紹介します。 ARSCNViewのprojectPointで取得できます。 下記ソースです。 func getScreenPointfromARPos(sceneView:ARSCNView , pos:SCNVector3) -> CGPoint { let screenPos = sceneView.projectPoint(pos) l…
ARSceneVIewでの基点は下記コードで変更できます。 let sceneView:ARSCNView self.sceneView.session.setWorldOrigin(relativeTransform: simd_float4x4( transfrom )) simd_float4x4は4x4の行列でトランスフォームの値になります。 simd_float4x4 - simd | …
JSONEncoderで文字列を出力する時に、Doubleで値を持つと小数点以下の桁数が正確に出力されない場合があります。こういった問題はDecimal型で出力すると解決できます。 下記のソースはDouble型で出力した例です。 struct SaveData{ save_number:Double } cla…
RxSwiftのbindを使えばテキストフィールドの値を変更したタイミングで変数を書き換える処理を簡単に実装することができます。 //TestViewController.swift側 @IBOutlet var testTextField : UITextField! let model = TestModel() let disposeBag = DisposeB…
RxとはReactive Extensionsの略で非同期処理やイベント処理などを宣言的に記述することができる便利なライブラリです。 RxのSwift実装なのでRxSwiftと言います。 インストール方法 pod 'RxSwift'をPodfileに記述しpod installでインストールできます。 Obser…
SceneKitの物理シミュレーションはSCNPhysicsBodyを使えば簡単に実装することができます。物理演算を正確に制御するためには重力や摩擦についてのプロパティを正確に知ることが重要です。 下記表でSCNPhysicsBodyのプロパティを一覧にしてまとめてみました。…
デザインパターンといえば、MVC・MVP・CleanArchitectureなど様々なアーキテクチャありますが、今回は基本の基本、であるMVCについて、Swiftにおける基本をまとめました。 MVCについて説明 まずMVCとはアプリケーションを実装するためのデザインパターンで、…
上画像のようにARKitでカメラ画像の明るさをライティングに反映する方法をご紹介します。 ①SceneKitのライティングを作成 まずはライティング用ノードを作成してrootNodeに追加します。 var sceneLight: SCNLight!//シーンのライト override func viewDidLoa…
テキストファイルを書き出してiTunesで取り出す手順を紹介します。 ①FileManager.default.urlsでドキュメントのパスを取得 let documentDirectoryFileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last { ②テキストファイ…
CoreLocationで位置情報を取得する方法を紹介します。 ①CoreLocation.frameworkを追加 「General>Linked Frameworks and Libraries」にCoreLocation.frameworkを追加しimportします。 import CoreLocation ②info.plistにKeyを設定 info.plistでPrivacy - Loc…
オプショナル型について簡略に説明している記事が少なかったので短くまとめて見ました。 オプショナル型とは? オプショナル型は変数にnilの代入を許容するデータ型です。nilはデータがない状態。 そして、オプショナル型の変数には「?」か「!」をつけます。…
Swiftで変数の変更を監視するには「willSet/didSet」を使います。 プロパティ監視はsetterやgetterなどのプロパティ代入とは違い、プロパティの変更時に呼ばれます。 プロパティ変更前に呼ばれるのは「willSet」、変更後に呼ばれるのが「didSet」になります…
SwiftのInterfaceBuilderを使えばタップやスワイプなどジェスチャーを簡単に取得できます。 【手順】 ①ライブラリからViewのストーリーボード へTapGestureRecognizerオブジェクトをドラッグドロップ ②ViewController.swiftに@IBActionでタップ関数を作成 @I…
ARKitでカメラの位置を取得する方法です。 ARSCNView.sessionのデリゲート(ARSessionDelegate)をViewController自身に設定します。 sceneView.session.delegate = self セッションのイベントにアクセスしてフレームからカメラを取得出来ます。 func sessio…
SceneKitではSceneKit Scene File(scn)を新規作成することでシーンを作成できる。 シーンでは3Dオブジェクトの配置などがエディタ上で可能。 作成したシーンファイルは下記ソースでARSCNViewに配置できます。 let scene = SCNScene(named: "ship.scn")! scen…
CoreML開発に特徴点もしくは座標軸を表示する方法を紹介します。 ARSCNDebugOptionsを設定します。 特徴点を表示するにはshowFeaturePoints、 座標軸を表示するにはshowWorldOrigins。 下記は両方表示するコードです。 self.sceneView.debugOptions = [ARSCN…