SceneKit
今回はクォータニオンについて。 確かこの Blog で SCNQuaternion もちゃんと紹介していないので、まずはクォータニオンについてのご説明。 クォータニオンのざっくり説明 クォータニオンは四元数と呼ばれ、スカラー(実数)部分と3つの虚数部分をまとめたベ…
今回は行列で用意されている関数について 用意されている関数 以下のものが用意されている。 simd_add() simd_sub() simd_mul() simd_equal() simd_almost_equal_elements() simd_almost_equal_elements_relative() simd_linear_combination() simd_determin…
今回は 行列型と初期化について。 ARKit や SceneKit で主に使用する float4x4 を説明する。 double4x4 は float4x4 と上限値以外は同じなので 割愛。 float4x4 と double4x4、クオータニオン以外では、以下の行列が用意されており、double や float、行列の…
今回は simd の演算用の関数についての説明。 simd のライブラリはベクトル内の各要素対して1つの命令で各要素に適応させることができる。 以前に紹介した通り、+演算子を使用すると、2つのベクトルの要素ごとに合計を簡単に計算することができる。 let f3_1…
前回に引き続き simd の説明で、今回は simd 型の初期化と演算子に付いて。 行列型に関して他の記事で紹介する。 今回は ARKit や SceneKit で主に使用する以下のものの説明。 double は float と上限値以外は同じなので割愛。 float3 float4 直接使用するこ…
ARKit や SceneKit で使用している Accelerate フレームワークの simd ライブラリについて書いてみる。 元々は Accelerate フレームワークで vImage、vDSP や BLAS、LAPACK などを使用する際に、ハードウェアに近い部分での計算を行うために追加されたものだ…
ARKit で仮想オブジェクト動かす際、タップ後スワイプして移動を行うことがあるが、 面倒なのでこういう UI / UX もありかなと試してみることにした。 あと過去の記事で書いたものが実現できるか試してみたかったので。 ARKit とは書いているが SceneKit の…
Xcode 9 の ARKit 用テンプレート、Augmented Reality App では ViewController の View に ARSCNView が設定されており フルスクリーン的な画面全体で表示されていたが、 Xcode 10 では ViewController の下に UIView が設定されており、 その下に ARSCNVie…
地味に UI が変更されたので、変更内容を見てゆく。 (Xcode 9 で追加されたものが混じっていたらすまない) Object Library 今まで右下のボタンや「Command + Option + Control + 3」で表示していたが、 該当部分とショートカットキーがなくなった。 ヘッダー…
今回の変更はない模様。 Xcode 10 Beta 6 の Scene Editor での ノード選択時のマニュピレーター、グリッドの表示エラーが解消されました。
ARKit の更新はないようで、SceneKit では Beta 4 で追加された2つのインスタンスプロパティの名称が変更された。 SCNPhysicsBody 物理ボディのインスタンスプロパティの名称が Sleeping から Resting に変更された。 Beta 4 var linearSleepingThreshold: C…
Beta 版から記事を起こしているため今後変更される可能性あり。 Apple のデベロッパーページのドキュメントの最初で SceneKit の仕様変更がなかったので気づかなかったが中身は変更されている模様。 Bata 4 の変更内容としてはいるが、自分の見落としで以前…
Beta 版から記事を起こしているため今後変更される可能性あり。 主に SCNSceneRenderer の delegate と、 SCNPhysicsContact の contactDelegate のプロパティ属性が「unowned(unsafe) 」から「weak」に変更された。 SCNSceneRendererDelegate 変更前 unowne…
Xcode 10 を触っていて気づいたのだが、Xcode 9 の Scene Editor、iOS 11 の Scene File では Procedual Sky で正しい表示がされないバグがある。 ちなみに Scene Editor での Procedual Sky の適応方法は、何らかのノードを選択後、Scene Inspector (Comman…
明日の WWDC 2018 で情報が古くなる可能性があるため、 昨年の技術書典 3 で配布いたしました「SceneKit Book fot Swift Playgrounds」を公開しました。 このページの SceneKit の情報を元に iOS 11 で追加された機能をまとめたものです。 GitHub のリポジト…
iOS 用のバーチャルパッドについて見てゆく。 今回は Swift ファイルの構成と振る舞いについて。 ファイルの構成 ファイル名 内容 ButtonOverlay.swift ControlOverlay.swift で使用するボタン用の ButtonOverlay クラス PadOverlay.swift ControlOverlay.sw…
2D の UI である Overlay クラスを見てゆく。 SceneKit の overlay の機能を使い SpriteKit を SKScene を表示している。 Overlay クラスの中身 表示される要素 右上のプレイヤーキャラクター Max のアイコン 宝石や鍵のアイコン クリア時の Congratulations…
引き続き GameController クラスの残りの関数を見てゆく。 今回はゲームコントローラーやゲーム操作部分の関数について。 その前にゲームコントローラーとは? 販売されている MFi のアクセサリのゲームコントローラーは 、上下左右の方向キー、ボタン4つ、…
引き続き GameController クラスの残りの関数を見てゆく。 今回はクリア時の演出、レンダリングのクオリティ、デバッグの関数について。 クリア時の演出 クリア時に Music_victory.mp3 の BGM を 鳴らし、 2D UI の overlay の showEndScreen() 呼び、ロゴと…
引き続き GameController クラスの残りの関数を見てゆく。 今回はフレーム毎に更新される関数について。 Fox2 で使用しているフレーム毎に更新される関数 GameController のプロトコルで設定している様に SCNSceneRenderer と SCNPhysicsContact の2つのデリ…
引き続き GameController クラスの残りの関数を見てゆく。 今回はプレイヤーキャラクター Max のコントロールについて。 コントロールについて キャラクターのコントロールはバーチャルパッド、ゲームコントローラー、キーボードからの入力から以下の関数が…
引き続き GameController クラスの残りの関数を見てゆく。 今回は鍵を開けるなどゲームでのアクションについて。 鍵を開ける unlockDoor 関数も長いので中身を別で見てゆく。 func unlockDoor() { ... } 扉が開いているか調べる friendsAreFree が true の場…
引き続き GameController クラスの残りの関数を見てゆく。 今回はプレイヤーキャラクター Max の色違いのレッサーパンダの仲間の初期設定と助け出した時の処理。 鍵を開けて助ける処理は次回。 助け出した仲間のフレーム毎の処理 friendsAreFree が true に…
今回は GameController クラスの残りの関数を見てゆく。 プレイヤーキャラクター Max の初期位置リセット Max がマップから落ちた時など、resetPlayerPosition() から Character クラスの queueResetCharacterPosition() を呼ぶ。 func resetPlayerPosition(…
今回は GameController クラスのイニシャライズ関数を見てゆく。 コードのほとんどがこれまで紹介した関数を呼ぶ形となっている。 init(scnView: SCNView) 各プラットフォームで SCNView を受け取り、それに変更を加えてゆく。 init(scnView: SCNView) { sup…
GameController クラスのセットアップ関数を見てゆく。 今回は音を設定しているオーディオ設定。 playSound(_ audioName: AudioSourceKind) AudioSourceKind の enum で指定されているオーディオソースの添字を playSound 関数に渡す。 指定した添字から音を…
GameController クラスのセットアップ関数を見てゆく。 今回は敵キャラとパーティクルの設定 setupEnemies() 敵の設定。 こちらは以前に紹介しているので割愛。 appleengine.hatenablog.com loadParticleSystems(atPath path: String) パーティクルセットア…
GameController クラスのセットアップ関数を見てゆく。 今回はカメラ設定 Fox2 では固定カメラの他に、プレイヤーキャラクターである Max を追尾するカメラがある。 追尾するカメラは、カメラ視点が変えられるものと、変えられないものの2つある。 紹介順の…
GameController クラスのセットアップ関数を見てゆく。 量が多いため何回かに分ける予定。 セットアップ GameController クラスのイニシャライズ時にいくつかの関数が呼ばれる。 setupGameController() ゲームコントローラー設定。 Bluetooth で接続や切断さ…
今回から何回かに分けて GameController クラスの中身をみてゆく。 クラスの宣言 NSObject としてクラスをつくり、先に設定した ExtraProtocols で各 delegate の宣言をしている。 class GameController: NSObject, ExtraProtocols { ... } 定数 / 変数 クラ…