SceneKit の検索結果:
…キュメントの最初で SceneKit の仕様変更がなかったので気づかなかったが中身は変更されている模様。 Bata 4 の変更内容としてはいるが、自分の見落としで以前から変わっていたものかもしれない。 変更の概要 主には tvOS でジオメトリテッセレーションが使用できるようになったり、物理シミュレーションの物理ボディの設定変更など。 物理ボディの設定変更は多分 ARKit 2 の Sling Shot のサンプル制作の際に問題になったものだと思われる。 ちなみにジオメトリテ…
…されるようになった Scene Inspector の Environment の Look with background が消滅 Node Inspector でアニメーションがない状態で書き出せなくなった。以前は書きだせ必ず Xcode がクラッシュした ジオメトリの初期のマテリアルが Blinn から Physically Based に変更された まとめ SceneKit 自体の機能追加はないが、Beta なのでバグはあるものの Xcode での便利さが増している。
…Editor 自体、SceneKit で作成されているため、Scene Editor で出ているバグはビルドした実際のアプリでも同様のバグが発生する。 ちなみに、Adjustments のパラメーターはトーンマップ用のパラメーター。 原因 Scene Editor で設定する Procedual Sky は Model I/O の MDLSkyCubeTexture を使用しており、MDLTexture のサブクラスとなっている。 テクスチャとして空をキューブマップとして描画…
…ャを作成するのだが、SceneKit の場合は設定をするとデフォルトでオンになるため、1行書くだけで実装できる。 Xcode 10 Beta で Xcode 9 と同様に「Augmented Reality App」でプロジェクトを作成。 viewWillAppear の ARWorldTrackingConfiguration に設定を追加するだけ。 let configuration = ARWorldTrackingConfiguration() configurati…
…テンツを表示すると、SceneKit はAREnvironmentProbeAnchor テクスチャマップを自動的に取得しシーンを照らす。 ARWorldTrackingConfiguration.EnvironmentTexturing ワールドトラッキングARセッションで環境テクスチャを生成するオプション。 追加 オプション名 説明 none 環境マップテクスチャを生成しない manual セッションで追加するプローブアンカーに対してのみ環境マップテクスチャを生成する a…
…del I/O や SceneKit で使用できるようになっている。 また、macOS の QuickLook でも対応しているためファイルを選択してスペースキーでプレビューできる。 USD ファイルをつくってみる 本来は Alenbic ファイルや Maya、Houdini などから変換するプラグインを使用するのだが、自分の環境では Python 関連のツール類が上手くビルドできなかったので、アスキーの USD を作成してみる。 お好みのテキストエディタで以下を書いて保存。…
…で配布いたしました「SceneKit Book fot Swift Playgrounds」を公開しました。 このページの SceneKit の情報を元に iOS 11 で追加された機能をまとめたものです。 GitHub のリポジトリからダウンロードしてください。 github.com ちなみに誤字脱字、その他修正していません。 また、Swift Playgrounds(for iPad)で書いていますが 修正すると macOS や iOS でも動きます。 書き忘れていたか覚…
概要 appleengine.hatenablog.com リソース解説 リソース:概要 appleengine.hatenablog.com リソース:プレイキャラクター appleengine.hatenablog.com リソース:敵キャラクター appleengine.hatenablog.com リソース:パーティクル appleengine.hatenablog.com リソース:背景、その他 appleengine.hatenablog.com appleeng…
iOS 用のバーチャルパッドについて見てゆく。 今回は Swift ファイルの構成と振る舞いについて。 ファイルの構成 ファイル名 内容 ButtonOverlay.swift ControlOverlay.swift で使用するボタン用の ButtonOverlay クラス PadOverlay.swift ControlOverlay.swift で使用するヴァーチャルパッド用の PadOverlay クラス ControlOverlay.swift ボタンとヴァーチャル…
…クラスを見てゆく。 SceneKit の overlay の機能を使い SpriteKit を SKScene を表示している。 Overlay クラスの中身 表示される要素 右上のプレイヤーキャラクター Max のアイコン 宝石や鍵のアイコン クリア時の Congratulations の表示部分 iOS 用のヴァーチャルパッド デモ用のメニュー 以下、コードを見てゆく。 import SpriteKit が追加でインポートされている。 import Foundation …
引き続き GameController クラスの残りの関数を見てゆく。 今回はゲームコントローラーやゲーム操作部分の関数について。 その前にゲームコントローラーとは? 販売されている MFi のアクセサリのゲームコントローラーは 、上下左右の方向キー、ボタン4つ、アナログスティック2本とその押し込みの入力、LRボンタン各2つの計4つ、ポーズ(ホーム)ボタンの入力となっているが、 Apple はゲームコントローラーの種類は以下のプロファイルで定義されている。 Extended …
引き続き GameController クラスの残りの関数を見てゆく。 今回はクリア時の演出、レンダリングのクオリティ、デバッグの関数について。 クリア時の演出 クリア時に Music_victory.mp3 の BGM を 鳴らし、 2D UI の overlay の showEndScreen() 呼び、ロゴと Congratulation の画像を出す。 func showEndScreen() { guard let victoryMusic = SCNAudioSo…
引き続き GameController クラスの残りの関数を見てゆく。 今回はフレーム毎に更新される関数について。 Fox2 で使用しているフレーム毎に更新される関数 GameController のプロトコルで設定している様に SCNSceneRenderer と SCNPhysicsContact の2つのデリゲートが行なっている。 SCNSceneRendererDelegate フレーム毎の描画更新で呼ばれる関数。 以下、行われる内容。 deltaTime で現在の経…
引き続き GameController クラスの残りの関数を見てゆく。 今回はプレイヤーキャラクター Max のコントロールについて。 コントロールについて キャラクターのコントロールはバーチャルパッド、ゲームコントローラー、キーボードからの入力から以下の関数が呼ばれる。 ジャンプ バーチャルパッドの A ボタンが押された時の処理で Max がジャンプする。 Bool 値が設定されているのは、ジャンプ中にもう一度ジャンプしないため。 func controllerJump(_…
引き続き GameController クラスの残りの関数を見てゆく。 今回は鍵を開けるなどゲームでのアクションについて。 鍵を開ける unlockDoor 関数も長いので中身を別で見てゆく。 func unlockDoor() { ... } 扉が開いているか調べる friendsAreFree が true の場合はこの関数を実行しない。 開いても プレイヤーキャラクター Max が少し操作でき、この関数を呼ぶトリガーを弾いてしまうため。 if friendsAreFre…
引き続き GameController クラスの残りの関数を見てゆく。 今回はプレイヤーキャラクター Max の色違いのレッサーパンダの仲間の初期設定と助け出した時の処理。 鍵を開けて助ける処理は次回。 助け出した仲間のフレーム毎の処理 friendsAreFree が true になり仲間を助けた際に、SCNSceneRenderer のデリゲートで毎フレーム呼ばれる処理。 全ての仲間に対して、pathCurve と Z 座標を元に X 方向のオフセットを作成。 addFr…
今回は GameController クラスの残りの関数を見てゆく。 プレイヤーキャラクター Max の初期位置リセット Max がマップから落ちた時など、resetPlayerPosition() から Character クラスの queueResetCharacterPosition() を呼ぶ。 func resetPlayerPosition() { character!.queueResetCharacterPosition() } カメラ処理 宝石のアイテム取得…
今回は GameController クラスのイニシャライズ関数を見てゆく。 コードのほとんどがこれまで紹介した関数を呼ぶ形となっている。 init(scnView: SCNView) 各プラットフォームで SCNView を受け取り、それに変更を加えてゆく。 init(scnView: SCNView) { super.init() ... } 中身を見てゆく sceneRenderer sceneRenderer に scnView を渡し、SCNSceneRendere…
GameController クラスのセットアップ関数を見てゆく。 今回は音を設定しているオーディオ設定。 playSound(_ audioName: AudioSourceKind) AudioSourceKind の enum で指定されているオーディオソースの添字を playSound 関数に渡す。 指定した添字から音を audioSources の配列から探し、 SCNAudioPlayer をシーンに addAudioPlayer で追加するし音を再生する。 fu…
GameController クラスのセットアップ関数を見てゆく。 今回は敵キャラとパーティクルの設定 setupEnemies() 敵の設定。 こちらは以前に紹介しているので割愛。 appleengine.hatenablog.com loadParticleSystems(atPath path: String) パーティクルセットアップの際に .scn(シーンファイル) や .scnp(パーティクルシステムファイル) から読み込みを容易にするための関数。ファイルパスを指…
GameController クラスのセットアップ関数を見てゆく。 今回はカメラ設定 Fox2 では固定カメラの他に、プレイヤーキャラクターである Max を追尾するカメラがある。 追尾するカメラは、カメラ視点が変えられるものと、変えられないものの2つある。 紹介順の変更 GameController.swift で書かれている内容が前後するが、setupCamera、setupCameraNode、setActiveCamera 関数を先に見てゆく。 setupCamera…
GameController クラスのセットアップ関数を見てゆく。 量が多いため何回かに分ける予定。 セットアップ GameController クラスのイニシャライズ時にいくつかの関数が呼ばれる。 setupGameController() ゲームコントローラー設定。 Bluetooth で接続や切断されるため、NotificationCenter の addObserver で接続状態と切断状態を監視する。 接続されれば、GameController で設定している ha…
今回から何回かに分けて GameController クラスの中身をみてゆく。 クラスの宣言 NSObject としてクラスをつくり、先に設定した ExtraProtocols で各 delegate の宣言をしている。 class GameController: NSObject, ExtraProtocols { ... } 定数 / 変数 クラス内で使い回せるように宣言されている 全体設定 定数,変数名 説明 DefaultCameraTransitionDuratio…
…設定 import SceneKit、GameController クラスで GKComponent が呼び出されているため GameplayKit、ゲームコントローラーの対応のため GameController がインポートされている。 import GameController import GameplayKit import SceneKit struct Bitmask 物理判定用のコリジョンのビットマスクが設定された構造体。すでに紹介しているプレイヤーキャラクター…
今回は、ScaredComponent.swift を見てゆく。 中身的には ChaserComponent.swift とほぼ同じ。 主な変更は GKGoal がプレイヤーキャラの Max を追いかけるのではなく、逃げる(遠ざかる)振る舞いをする。 ScaredComponent の中身 import こちらは SIMD の計算が行われない。 import GameplayKit 遠ざかる敵キャラの状態 遠ざかる敵キャラの状態を以下の enum で設定している。 周りをぶら…
今回は、ChaserComponent.swift を見てゆく。 この GKComponent はプレイヤーキャラ Max を追いかける設定が行われている。 ChaserComponent の中身 import 中で移動座標の処理をしているため simd をインポートしている。 import GameplayKit import simd 追いかける敵キャラの状態 追いかける敵キャラの状態を以下の enum で設定している。 周りをぶらつく状態 Max を追いかけている状態 …
今回は、PlayerComponent.swift を見てゆく。 中身は Character クラスを取得する変数と update の変数があるだけ。 PlayerComponent クラスの中身 import GameplayKit class PlayerComponent: BaseComponent { public var character: Character! override func update(deltaTime seconds: TimeInterv…
…it import SceneKit import simd GameplayKit は標準のフレームワークではないので、リンクとしても追加する。 extension GKAgent2D 今回のクラス内部で GKAgent2D 使用しているのでファイル最後らへんに書かれている extension から紹介。 GKAgent2D を使用しているが Fox2 は 3次元の座標を使用しているため、4x4 の行列 transform の実装を設定している。 キャラクターの位置と回転の…
…ンプルつくってみる SceneKit のテンプレートの宇宙船を半径 20 で回転。 球(SCNShpere)に GKGoal の toSeekAgent を設定し宇宙船を追いかける。 初期設定 新規で SceneKit テンプレート のプロジェクトを作成。 前回の方法で GamaplayKit をインポートする。 ship.scn の修正 ship と shipMesh の間の階層に空のノードを追加し、X座標を -20 にする。 GameViewController の修正 …
…playKit と SceneKit をインポートし、GKComponent を継承する。 コンポーネントに delete 関数を設定する 名前はなんでもよいのだが、ひとまず外部か呼び出せるように delete という関数をつくってみる。 この関数では自身の親となる entity が設定した GKSCNNodeComponent を探し、自前で設定した変数 nodeComponent へ渡している。 GKSCNNodeComponent の中身は設定したと想定される SCNN…