Apple Engine

Apple, iPhone, iOS, その周辺のことについて

SceneKit の検索結果:

iOS 12 SDK Bata 4 の SceneKit 変更内容

…キュメントの最初で SceneKit の仕様変更がなかったので気づかなかったが中身は変更されている模様。 Bata 4 の変更内容としてはいるが、自分の見落としで以前から変わっていたものかもしれない。 変更の概要 主には tvOS でジオメトリテッセレーションが使用できるようになったり、物理シミュレーションの物理ボディの設定変更など。 物理ボディの設定変更は多分 ARKit 2 の Sling Shot のサンプル制作の際に問題になったものだと思われる。 ちなみにジオメトリテ…

iOS 12 SDK Bata 3 の SceneKit、Scene Editor 変更内容

…されるようになった Scene Inspector の Environment の Look with background が消滅 Node Inspector でアニメーションがない状態で書き出せなくなった。以前は書きだせ必ず Xcode がクラッシュした ジオメトリの初期のマテリアルが Blinn から Physically Based に変更された まとめ SceneKit 自体の機能追加はないが、Beta なのでバグはあるものの Xcode での便利さが増している。

Xcode 9 の Scene Editor、iOS 11 の Scene File の Procedual Sky のバグについて

…Editor 自体、SceneKit で作成されているため、Scene Editor で出ているバグはビルドした実際のアプリでも同様のバグが発生する。 ちなみに、Adjustments のパラメーターはトーンマップ用のパラメーター。 原因 Scene Editor で設定する Procedual Sky は Model I/O の MDLSkyCubeTexture を使用しており、MDLTexture のサブクラスとなっている。 テクスチャとして空をキューブマップとして描画…

ARKit 2 の環境マッピング AREnvironmentProbeAnchor を試してみる

…ャを作成するのだが、SceneKit の場合は設定をするとデフォルトでオンになるため、1行書くだけで実装できる。 Xcode 10 Beta で Xcode 9 と同様に「Augmented Reality App」でプロジェクトを作成。 viewWillAppear の ARWorldTrackingConfiguration に設定を追加するだけ。 let configuration = ARWorldTrackingConfiguration() configurati…

ARKit 2.0 の更新内容 (iOS 12 Bata 2)

…テンツを表示すると、SceneKit はAREnvironmentProbeAnchor テクスチャマップを自動的に取得しシーンを照らす。 ARWorldTrackingConfiguration.EnvironmentTexturing ワールドトラッキングARセッションで環境テクスチャを生成するオプション。 追加 オプション名 説明 none 環境マップテクスチャを生成しない manual セッションで追加するプローブアンカーに対してのみ環境マップテクスチャを生成する a…

ARKit で使用されている USDZ とは何か

…del I/O や SceneKit で使用できるようになっている。 また、macOS の QuickLook でも対応しているためファイルを選択してスペースキーでプレビューできる。 USD ファイルをつくってみる 本来は Alenbic ファイルや Maya、Houdini などから変換するプラグインを使用するのだが、自分の環境では Python 関連のツール類が上手くビルドできなかったので、アスキーの USD を作成してみる。 お好みのテキストエディタで以下を書いて保存。…

技術書典 3 で配布いたしました「SceneKit Book fot Swift Playgrounds」を公開しました

…で配布いたしました「SceneKit Book fot Swift Playgrounds」を公開しました。 このページの SceneKit の情報を元に iOS 11 で追加された機能をまとめたものです。 GitHub のリポジトリからダウンロードしてください。 github.com ちなみに誤字脱字、その他修正していません。 また、Swift Playgrounds(for iPad)で書いていますが 修正すると macOS や iOS でも動きます。 書き忘れていたか覚…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる まとめ

概要 appleengine.hatenablog.com リソース解説 リソース:概要 appleengine.hatenablog.com リソース:プレイキャラクター appleengine.hatenablog.com リソース:敵キャラクター appleengine.hatenablog.com リソース:パーティクル appleengine.hatenablog.com リソース:背景、その他 appleengine.hatenablog.com appleeng…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その37

iOS 用のバーチャルパッドについて見てゆく。 今回は Swift ファイルの構成と振る舞いについて。 ファイルの構成 ファイル名 内容 ButtonOverlay.swift ControlOverlay.swift で使用するボタン用の ButtonOverlay クラス PadOverlay.swift ControlOverlay.swift で使用するヴァーチャルパッド用の PadOverlay クラス ControlOverlay.swift ボタンとヴァーチャル…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その36

…クラスを見てゆく。 SceneKit の overlay の機能を使い SpriteKit を SKScene を表示している。 Overlay クラスの中身 表示される要素 右上のプレイヤーキャラクター Max のアイコン 宝石や鍵のアイコン クリア時の Congratulations の表示部分 iOS 用のヴァーチャルパッド デモ用のメニュー 以下、コードを見てゆく。 import SpriteKit が追加でインポートされている。 import Foundation …

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その35

引き続き GameController クラスの残りの関数を見てゆく。 今回はゲームコントローラーやゲーム操作部分の関数について。 その前にゲームコントローラーとは? 販売されている MFi のアクセサリのゲームコントローラーは 、上下左右の方向キー、ボタン4つ、アナログスティック2本とその押し込みの入力、LRボンタン各2つの計4つ、ポーズ(ホーム)ボタンの入力となっているが、 Apple はゲームコントローラーの種類は以下のプロファイルで定義されている。 Extended …

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その34

引き続き GameController クラスの残りの関数を見てゆく。 今回はクリア時の演出、レンダリングのクオリティ、デバッグの関数について。 クリア時の演出 クリア時に Music_victory.mp3 の BGM を 鳴らし、 2D UI の overlay の showEndScreen() 呼び、ロゴと Congratulation の画像を出す。 func showEndScreen() { guard let victoryMusic = SCNAudioSo…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その33

引き続き GameController クラスの残りの関数を見てゆく。 今回はフレーム毎に更新される関数について。 Fox2 で使用しているフレーム毎に更新される関数 GameController のプロトコルで設定している様に SCNSceneRenderer と SCNPhysicsContact の2つのデリゲートが行なっている。 SCNSceneRendererDelegate フレーム毎の描画更新で呼ばれる関数。 以下、行われる内容。 deltaTime で現在の経…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その32

引き続き GameController クラスの残りの関数を見てゆく。 今回はプレイヤーキャラクター Max のコントロールについて。 コントロールについて キャラクターのコントロールはバーチャルパッド、ゲームコントローラー、キーボードからの入力から以下の関数が呼ばれる。 ジャンプ バーチャルパッドの A ボタンが押された時の処理で Max がジャンプする。 Bool 値が設定されているのは、ジャンプ中にもう一度ジャンプしないため。 func controllerJump(_…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その31

引き続き GameController クラスの残りの関数を見てゆく。 今回は鍵を開けるなどゲームでのアクションについて。 鍵を開ける unlockDoor 関数も長いので中身を別で見てゆく。 func unlockDoor() { ... } 扉が開いているか調べる friendsAreFree が true の場合はこの関数を実行しない。 開いても プレイヤーキャラクター Max が少し操作でき、この関数を呼ぶトリガーを弾いてしまうため。 if friendsAreFre…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その30

引き続き GameController クラスの残りの関数を見てゆく。 今回はプレイヤーキャラクター Max の色違いのレッサーパンダの仲間の初期設定と助け出した時の処理。 鍵を開けて助ける処理は次回。 助け出した仲間のフレーム毎の処理 friendsAreFree が true になり仲間を助けた際に、SCNSceneRenderer のデリゲートで毎フレーム呼ばれる処理。 全ての仲間に対して、pathCurve と Z 座標を元に X 方向のオフセットを作成。 addFr…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その29

今回は GameController クラスの残りの関数を見てゆく。 プレイヤーキャラクター Max の初期位置リセット Max がマップから落ちた時など、resetPlayerPosition() から Character クラスの queueResetCharacterPosition() を呼ぶ。 func resetPlayerPosition() { character!.queueResetCharacterPosition() } カメラ処理 宝石のアイテム取得…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その28

今回は GameController クラスのイニシャライズ関数を見てゆく。 コードのほとんどがこれまで紹介した関数を呼ぶ形となっている。 init(scnView: SCNView) 各プラットフォームで SCNView を受け取り、それに変更を加えてゆく。 init(scnView: SCNView) { super.init() ... } 中身を見てゆく sceneRenderer sceneRenderer に scnView を渡し、SCNSceneRendere…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その27

GameController クラスのセットアップ関数を見てゆく。 今回は音を設定しているオーディオ設定。 playSound(_ audioName: AudioSourceKind) AudioSourceKind の enum で指定されているオーディオソースの添字を playSound 関数に渡す。 指定した添字から音を audioSources の配列から探し、 SCNAudioPlayer をシーンに addAudioPlayer で追加するし音を再生する。 fu…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その26

GameController クラスのセットアップ関数を見てゆく。 今回は敵キャラとパーティクルの設定 setupEnemies() 敵の設定。 こちらは以前に紹介しているので割愛。 appleengine.hatenablog.com loadParticleSystems(atPath path: String) パーティクルセットアップの際に .scn(シーンファイル) や .scnp(パーティクルシステムファイル) から読み込みを容易にするための関数。ファイルパスを指…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その25

GameController クラスのセットアップ関数を見てゆく。 今回はカメラ設定 Fox2 では固定カメラの他に、プレイヤーキャラクターである Max を追尾するカメラがある。 追尾するカメラは、カメラ視点が変えられるものと、変えられないものの2つある。 紹介順の変更 GameController.swift で書かれている内容が前後するが、setupCamera、setupCameraNode、setActiveCamera 関数を先に見てゆく。 setupCamera…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その24

GameController クラスのセットアップ関数を見てゆく。 量が多いため何回かに分ける予定。 セットアップ GameController クラスのイニシャライズ時にいくつかの関数が呼ばれる。 setupGameController() ゲームコントローラー設定。 Bluetooth で接続や切断されるため、NotificationCenter の addObserver で接続状態と切断状態を監視する。 接続されれば、GameController で設定している ha…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その23

今回から何回かに分けて GameController クラスの中身をみてゆく。 クラスの宣言 NSObject としてクラスをつくり、先に設定した ExtraProtocols で各 delegate の宣言をしている。 class GameController: NSObject, ExtraProtocols { ... } 定数 / 変数 クラス内で使い回せるように宣言されている 全体設定 定数,変数名 説明 DefaultCameraTransitionDuratio…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その22

…設定 import SceneKit、GameController クラスで GKComponent が呼び出されているため GameplayKit、ゲームコントローラーの対応のため GameController がインポートされている。 import GameController import GameplayKit import SceneKit struct Bitmask 物理判定用のコリジョンのビットマスクが設定された構造体。すでに紹介しているプレイヤーキャラクター…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その21

今回は、ScaredComponent.swift を見てゆく。 中身的には ChaserComponent.swift とほぼ同じ。 主な変更は GKGoal がプレイヤーキャラの Max を追いかけるのではなく、逃げる(遠ざかる)振る舞いをする。 ScaredComponent の中身 import こちらは SIMD の計算が行われない。 import GameplayKit 遠ざかる敵キャラの状態 遠ざかる敵キャラの状態を以下の enum で設定している。 周りをぶら…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その20

今回は、ChaserComponent.swift を見てゆく。 この GKComponent はプレイヤーキャラ Max を追いかける設定が行われている。 ChaserComponent の中身 import 中で移動座標の処理をしているため simd をインポートしている。 import GameplayKit import simd 追いかける敵キャラの状態 追いかける敵キャラの状態を以下の enum で設定している。 周りをぶらつく状態 Max を追いかけている状態 …

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その19

今回は、PlayerComponent.swift を見てゆく。 中身は Character クラスを取得する変数と update の変数があるだけ。 PlayerComponent クラスの中身 import GameplayKit class PlayerComponent: BaseComponent { public var character: Character! override func update(deltaTime seconds: TimeInterv…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その18

…it import SceneKit import simd GameplayKit は標準のフレームワークではないので、リンクとしても追加する。 extension GKAgent2D 今回のクラス内部で GKAgent2D 使用しているのでファイル最後らへんに書かれている extension から紹介。 GKAgent2D を使用しているが Fox2 は 3次元の座標を使用しているため、4x4 の行列 transform の実装を設定している。 キャラクターの位置と回転の…

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その18

…ンプルつくってみる SceneKit のテンプレートの宇宙船を半径 20 で回転。 球(SCNShpere)に GKGoal の toSeekAgent を設定し宇宙船を追いかける。 初期設定 新規で SceneKit テンプレート のプロジェクトを作成。 前回の方法で GamaplayKit をインポートする。 ship.scn の修正 ship と shipMesh の間の階層に空のノードを追加し、X座標を -20 にする。 GameViewController の修正 …

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その17

…playKit と SceneKit をインポートし、GKComponent を継承する。 コンポーネントに delete 関数を設定する 名前はなんでもよいのだが、ひとまず外部か呼び出せるように delete という関数をつくってみる。 この関数では自身の親となる entity が設定した GKSCNNodeComponent を探し、自前で設定した変数 nodeComponent へ渡している。 GKSCNNodeComponent の中身は設定したと想定される SCNN…