ぷらこあ

雑記/ゲームアイデア帳/成果物ぺろり

Unite2015Tokyo Day1メモ

Unite2015とは

  • 年に1度のUnityのお祭りです
  • 以下、自分の取ったメモ
    • スライドが全公演に対して公開されるので一時的なものである認識

基調講演

UnityProfessionalEdition

  • チームラインセンス
  • パフォーマンスの速報 (PreView)
  • UnityAssetsStore Level11 Deals
    • AssetsStoreをとても得に使える仕組み
  • ロイヤリティ無しで使える

UnityPersonalEdition

  • Unity5エンジンの全ての機能を使えるようになったよ
    • 従来のPro版で制限されてた機能含む
  • ロイヤリティ無しで使えるよ
  • 100万の利用者

IncredisbleGraphics

  • 物理ベースレンダリング
  • グローバルイルミネーション
  • サンプル動画(3人/短期間)

REPUBLIQUE

  • Unity5で物理ベースシェーダーによりリアルな質感を表現
  • これから作るゲームをもっと美しくなる
  • 感情を与えていい体験をしてもらう
  • 無料でプロダクト公開!

  • Lighting

  • Mechanim
    • Entry -> Exit が見える様になって判りやすいよね
  • AudioMixer
    • 3DサウンドかどうかはMixierでコントロールする様になった
    • MixerGroup (チャンネル) 単位で設定してよね
    • snapshotによって場面による音量設定など
    • ダッキング
      • 他の音を下げてね、等の調整が聞く

Unity5 feature

  • 64bit版のエディタ対応
  • PhysX 3.3 upgrade
  • animationシステムの刷新
  • AudioTools

マルチプラットフォーム対応

  • 6つのプラットフォーム対応大変だったよ、更にやってみよう
    • 21のプラットフォームを対応
    • 1からの作業だった
  • WebGLサポート
    • IL2CPP C# -> C++ -> WebGL
    • RaTraceBenchmark - iPhone6 MonoARMv7 -> IL2CPP (約8倍のパフォーマンス)
    • PATH FINDER 1023agent 14fps -> 40fps
  • IL2CPP
    • 全てのプラットフォームに対応させたい!!

Massive R&D

  • 300人あまりの開発者が関わってる
  • core / cloud / longer / R&D team
  • new ニンテンドー3DS 今年夏β : ブースでも触れるよ!!

VR (Oculus/パルマーさん)

  • GearVR で課金プラットフォームのリリース
  • VRはどんどん広がって行くよ!!
  • Unity 5.1 のインテグレーションデモ
    • 大前さん「こんなところに偶然DK2があったので」
    • VertualReality対応チェック入れるだけで視線追従
    • エディタとOculus側との表示が分かれる

クラウドサービス

  • パフォーマンスレポーティング
  • アナリティクス
  • CloudBuild
    • Buildに数分〜数10分掛かる
    • CloudBuild大絶賛 280,000builded 15万時間の節約
    • 無償版もある!! UnityProに内包されている Pro $25〜
  • UnityAds
    • 1500Game / TOPGames (iOS) 4/10
    • Work with CyberAgent && Gee

ここが変わる! Unity5のスマホ開発 〜アセットバンドル、ブルド、プラグイン

AssetBundle

  • 今までの問題点

    • 複雑
    • ビルド時間が長い -どれをビルドすればいいのか不明でフルビルド
    • 面倒な依存関係
    • バージョン毎の互換性が無い
  • 解決方針

    • シンプル (ビルド/ランタイム)
    • 追加ビルド (ビルドを最小限にとどめる)
    • 依存性はUnityが解決する (ビルドして使うだけ)
    • 互換性を保持する
    • [注意] 混ぜるな危険 (4と5)

新しいAssetBundleビルド

  • AssetとAssetBundle間を結びつける

    • インスペクタから各Assetsに対してnameを記載する
    • ビルドするスクリプトを呼ぶ
  • 命名規則

    • 小文字のみ/同盟禁止/パス構成持てる(/)
  • Buildスクリプト

    • BuildAssetBundles(出力パス, BuildAssetBundleOption, 出力ターゲット)
  • Options

    • IgnoreTypeTreeChanges (NEW!!)
      • タイプツリーが変わっても虫 = ソースコード変更しても変化したと見なされない
    • DisableWriteTypeTree
      • タイプツリー遺体をサイズ削減用とで消す
  • 互換性

    • 5.1以降の互換性は保持される (5.0はバグで互換性持たない)
  • Manifestファイル

    • (Single) Manifestファイル -> 親玉/依存関係を解決出来る/ランタイムに読んで依存関係を解消しようとする
    • .manifestファイル -> インクリメンタルビルドにだけ関係する
      • CRC / アセット名 / 依存関係 / Hash / ClassTypes
  • Variant

    • ランタイム時に読み込むアセットバンドルを変更出来る
    • フォルダ/シーンなどに適応出来る
    • AssetBundle名の隣に指定する
    • LoadVariantsでsd/hdのどちらを呼び出すか指定するような感じ

サンプル

  • サンプルプロジェクトを使おう

  • スクリプト

    • AssetBundleManager.cs (マネージャークラス)
      1. 基本ロードの仕組み : AB名を受け取ってLoadAssetBundleが走りWWW発行してキューがリクエストを返す -> GetAsset
      2. 依存性の干渉: LoadAssetBundle内部でAB名を貰ってinitでAssetBundleManifestを読み、依存ABをロード
      3. エディタシミュレーション: GetAssetPasssFromAssetBundleAndAssetName
      4. Variants を使った切り替え: Variantに関する名前を呼び出して、一致する名前を呼び、最後の名前を付け替える (sd->hd)
    • BaseLoader.cs (基本ローダー)
    • デモ

ビルド

  • マルチプロセスビルドHack

    • 複数のプロジェクトを用意してビルドすると早いのでは!?
    • シンボリックリンクを使うよ Library/ProjectSettingsをリンクする
    • Unity側はバッチを作れば良いよ
    • [注意] 未来永劫使えるとも限らない
    • [注意] UnityのAssetBundleビルドがマルチスレッド化すればいいのでは...
  • IL2CPP

    • Before: unity -> Xcode -> ArmV7iOS アプリ
    • Current: unity -> c++出力 -> Xcode -> ArmV7iOSアプリ / Arm64iOSアプリ
    • Future: unity -> c++出力 -> Xcode -> Arm64iOSアプリ (V7 iphone5 までのものはいずれ無くなる)
  • UnityEditor.iOS.Xcode

Plugin

  • Pluginの設定の変更

    • インスペクタで設定出来る様に         
    • 依存するフレームワークを選択可能 / コンパイルオプションを設定可能に
    • Xcodeプロジェクトを直接変更しなくてよい方向に
    • インポート時にPlugins/iOS/ に置けば自動認識される
  • NativeCodePlugin

    • Unityからネイティブの関数を呼び、CからObjCを呼び出し...
    • NativeCodePlugin: 直接ObjCを直接呼び出す
      • [注意] 引数が使えない...

Unityではじめる徹底企画講座!を考える

  • 大野功二さん
    • 3Dゲームを面白くする技術
    • unityではじめる3Dゲーム作り

こんな経験はありますか?

  1. 凄い企画思いついた
  2. Unityあるよ!作ろう
  3. あれ作れない、何か違う、思った様に操作出来ない
  4. ゲームが完成しない、諦める 「こんなはずじゃなかった!!」

企画を完成させられない問題

  • プランニングの問題

    • 「企画を完成させられるかどうか」「企画は完成させられているか」
      • 企画 ≠ アイデア
      • 企画 ≠ 思いつき
    • 企画はゲームを作る為の「出発点」と「ゴール地点」および開発の方向性を指し示すもの
  • 企画の出発点 = ハイコンセプト/コアアイデア

    • いつ/どこで/誰が
    • どんな遊び方で/どんな体験をさせて
    • どんな感情を抱かせて
    • どうおもしろがらせるのか
  • 企画のゴール地点

    • ルック & フィール (第一印象) が大事
    • そのゲームをプレイすることでプレイヤーの心や生活や人生にどのような影響を与えるか
  • 企画の方向性

    • おおまかなゲームデザイン (ルール/システム/操作性)
    • 1回のプレイ時間 / ボリューム
  • 時代とともに変わる企画手法 (答えはない...)

    • 新しいシステムを作れば売れる時代とか
    • ゲームを出せば売れるからとにかくはよな時代とか
    • ターゲットユーザがこまくて状況にあわせて企画の手法そのものがちがう
    • お笑いと同じ!!!!!!
  • ゲームの企画を料理に置き換えてみる

    • [ミッション] 彼女/彼氏を家に招待することが出来たので、料理でもてなそう!
    • 勝利条件(目的)を考える
      • 満腹に / 技術力を見せつける / 楽しい時間を演出して好感度上げる ... etc
      • 勝利条件の為に企画(プランニング)する!
      • 身近な人をイメージした勝利条件を (開発チームの4/5人を満足させる)
    • 方法は条件による
      • 相手の好きな者を作る (自分が嫌いな場合は自分が楽しくなれないので好きになる努力が必要)
      • 自分の好きな物を相手にも好きなってもらう (相手がそれを好きになれる要素があることが必要)
      • 自分も相手も、見たことの無い者を作る
    • 自分が好きなものは彼女も好きに違いない!!という発想だけじゃ弱い
    • おもてなし
      • 相手をイメージすることが大事
      • すなわちリサーチ… 「どんな食べ物が好きですか? いつ? 時間は? どんな時に心の距離を縮めてくれるか?
  • 調理とゲーム要素は似ている

  • 料理の失敗例

    • ゲーム機で実現出来ないほどの量の仕様を一度に並べようとしていませんか?
    • ちょうど良い量を出していますか?
    • ゲームが提供するアクションの順番は適切ですか?
    • ゲームで扱うネタは新s年ですか?
    • ゲームで表現したいことに対して、そのインターフェイスは適切ですか?
  • プレイヤーのどんな顔が見たいですか?

    • 人の顔を想像するには現実の経験値が必要
    • ゲーム以外の情報や引き出しを作ることが大事

仕様の問題点

  • 仕様: ゲームをXXXを実現する為にアイデアを設計やメカニクスレベルまで分解したもの
  • ゲームのおもしろさを引き出す要素は以下の組み合わせとバランス

    • アクション: 反射神経
    • パズル: 正しい順番や意味を見つける
    • リソース: 制限/時間
    • 官能性: 操作するだけで気持ちがいい
    • 運:プレイヤーが介入出来ない要素
  • 仕様作成

    • 新しい仕様を作る (センス/挑戦した回数)
    • まねる (知識の数/まねた数)
  • 仕様の基本

    • ゲームを数多く見てどう読み解くかを研究する
    • ゲームデザイナは実現したいゲームに対して、必要なパーツ(基礎仕様)をプログラマに渡して、一緒に最終仕様を作る

実装の問題

  • 挫折原因

  • ゲームエンジンには特性がある

    • Unityの特性を作ろう
    • 頑張ればどんなゲームでも作れます!!
    • けど作りやすいゲームや作るのに時間がかかるゲームは当然あるよ
  • 短時間で作りやすいゲーム

    • 複雑な辺り判定や物理演算が必要なゲーム
    • 単純なアニメーションのゲーム
  • 初めて作ると時間がかかるゲーム

    • 複雑な当たりや物理演算の結果が勝敗を決めるゲーム
    • 複雑なアニメーションのゲーム
    • 理由
      • Physicsを使いこなせていない
        • 高校レベルの数学と物理の知識が必要
        • 3D:PhysX / 2D:Box2Dと異なる
        • e.g) 四角いcoliderだと段差に引っかかるが、足下に丸いcolider入れておくと上れるよ
      • Mecanimを使いこなせていない
        • アニメーションの基礎知識
        • Unity5ではStateMachineBehaviors / AutoMachineAuthoring など
        • 企画をUnity (の特性) に寄せる / Unityを知り尽くして頑張って実装する
  • 作りやすいゲームの共通点

    • PhysicsやMecanimのこんポーメントやプロパティ編集だけで実装可能
    • ゲームのノウハウの公開の有無
  • まずはアセットストアのコンプリートプロジェクトのテンプレートを参考に仕様

    • CompletePhysicsPlatformKit
      • こういうことが出来るよ!出来ないよ!の説明
    • アドベンチャー: 宴
    • 2Dゲーム:ninja slasherX

調整の問題

  • ゲームの面白さは調整で決まる
  • 調整は一人では出来ないのでテストプレイヤーこそが重要な鍵
  • ちゃぶ台返し -> 何回できるかが鍵
  • 開発中は未来のプレイヤーの顔を想像しよう!

Unity5 グラフィクス使いこないガイド

  • 基礎以外はWorkshopで
  • Workshopの内容も後日配信するよ!

Lightingの新機能

  • AmbientLightの強化

    • 3つの方式から選択出来る様になったよ
    • Window -> Lighting
    • Skybox
      • Skyboxに該当している空が映り込む
    • Gradient
      • グラデーション/色を指定する
  • SkyBox

    • ProceduralSkyBox
      • パラメータから空を作れる!
        • SunSize: 太陽の大きさ変更
        • AtompsheteThicknes: 層の厚さ
      • 太陽の光源を設定すると連動する (光源の角度に合わせて太陽が現れる)
    • CubemapSkyBox
      • パノラマ画像から作れる!(hdri とかで検索するといっぱい出てくる)
      • .exr / .hdr という形式のファイルを読み込める様になる
        • cubemapに指定してapplyする
        • skybox -> cubemap に指定する
        • 物体の表面に影響
        • 光源が柔らかいのでDirectionalLight1個追加して太陽を追加すると良い
    • CAST SHADOWS OPTION
      • MwshRender -> CastShadows
        • 両面の影 (TwoSided)
        • Shadows Only (影のみが落ちて見た目は消える)
    • PCF SOFT SHADOW
      • 綺麗になっただけでなくパフォーマンスは上がっている
      • モバイルでは使えないので注意
    • BAKED SOFT SHADOW
      • 半影の開き具合を調整出来る様になった
    • SHADOW BIAS
      • NORMAL BIAS方式を光源で指定する
      • 縮めるようなバイアスを掛けてアーティファクト(ノイズ)を削除出来る
      • 複雑なモデルでは影に隙間が出来るのでBIASとの使い分けが大事

RealtimeGIの基礎 (グローバルイルミネーション)

  • 間接光の表現を使うことが可能なもの (IndirectLight)
  • Lighting -> GeneralGI

    • 物体を動かしたり / 光源が動いたりしても反映される
    • (Unity開けない) 「死ぬかと思った…」
    • (Defuse反射する) 固形物のものにstaticフラグを建てて当てる必要がある
      • staticオブジェクトに関しては自動で間接光が伝搬される
      • 間接照明の効果が現れる
    • 動き回るオブジェクトには勝手にGIは有効にならない
    • LightProbeGroupを指定してあげる必要がある
      • エリア内の動作を計算してくれる
    • Supecularの入ったオブジェクトに対しては ReflectionProbeを指定する必要がある
      • 意図せず発行していたらSkybox映り込んでいるな….
  • DirectionalMode

    • NonDirectional: 追加情報無し
    • Directional: どの方向から代表的な光が入り込んでくるかを近似で定める
    • DirectionalSpecular: 直接光/間接光の持つ情報を持たせる
    • [注意] 計算量やデータ量が増える / 代表的な光源一つだけを考慮しているので複数の光は危うい表現になりがち
      • RefrectionProbeを指定してあげると解決する
  • RefrecrionProbe

    • Probe同士のつなぎ
      • MeshRendererのblendOption
    • 反射の更に反射
      • 映しているものは黒く表示されてしまう
      • RefrectionBounces: 反射回数を指定出来る
      • Bakeするときの処理が重くなるのでまあ2くらいまでは...
    • リアルタイム反射
      • 動いている者に関してはRefrecrionProbeには映り込まない
      • EveryFrameにするとリアルタイムで映り込む
      • InvisibleFaces: フレームレートを落とす(1/10?)により処理を軽くする
      • リアルタイムだと画質も落ちるので注意
    • BoxProjection
      • ある決められた範囲に映り込ませるよ
      • 処理負荷も重くてモバイルでは使えないよx

Render Massive Amount of Objects in Unity

  • (ちょっとシェーダのこと全然知らない自分だったので以下用語に不備あるかも / スライド待ち)

  • @i_saint

    • 社内ゲームエンジンを作っていた
    • グラフィック周り(CandyRockStarの床とか担当)
    • CPU & GPU を全力でぶん回して美しいインタラクションを実現する
    • CPU使用率グラフ見て興奮する感じ

本公園の目指すところ

  • Unityでいろんなトリックを用いて1万以上のオブジェクトを効率的に描画 & 更新する
  • 検証はPC上 PS4/XBoxOne程度

レンダリング

  • 前提

    • 1つ1つGameObject化する: 現実的ではない
    • GameObjectなしにMeshを描く手段が必要
  • Graphics.DrawMesh

    • Meshを描画するリクエストをrender queueに詰むAPI
    • ただしbatchingは効かない
    • drawcallは比例して増える
    • drawcallを抑える手段が必要

疑似インスタンシング

  • 1つのMeshに多数のモデルを格納する手法
    • 元の頂点データを繰り返す
    • 何番目のモデル化という情報を付与
  • 65,000 / モデルの超点数を1回のdrawcallで描ける限界
  • Cubeは24両点なので 65,000 / 24 = 2708個
  • インスタンスの情報をGPUに送り、頂点シェーダモデル変更
    • TRS行列等
  • 必要なbatchの数だけMaterialを用意する
    • 各MaterialにインスタンスIDの開始番号を付与する
    • e.g) Cubeを10,000個か来たい場合、 10000 / 2708 = 4つ
  • 必要個数を超えたモデルは頂点シェーダで画面に出ない様に工夫
    • Materialに今Activeなのはいくつというものを保持する
    • 1個でも描きたい場合は格納されているモデルの数分の処理する
  • GPUインスタンス情報を送る
    • テクスチャにプラグインから書き込む
      • RenderTextureを使用する必要がある (texture2DはFloatのフォーマット使用不可)
      • データ書き込むプラグインを用意
        • texture.GetNativeTexturePtr() でテクスチャオブジェクトを取得
        • ネイティブAPIを用いてデータを書き込む
          • OpenGLのglllTexSubImage2D など
    • テクスチャにMesh経由で書き込む
      • データ転送用シェーダの用意
      • データ用 Rendertexture をレンダーターゲットに指定する
      • Meshにインスタンス情報を書き込む
      • Graphics.DrawMeshNow()
      • 遅いがとてもポータブル
    • ComputeBuffer
      • Direct3D11 / PS4 のみ対応
      • 任意のデータ構造を格納出来る
      • データの更新は ComputeBuffer/SetData() を呼ぶだけ
      • 環境を選ぶが速くて簡単

ハードウェアインスタンシング

  • 1回のdrawcallで1つのモデルを複数各機能
  • 頂点シェーダの入力にインスタンス別のデータが加わる (TRS行列等を輪sつ)
  • 環境を選ぶ e.g) OpenGL 3.1〜 / WebGL 2.0〜

  • Unity: Graphics.DrawProducedural()

    • Direct3D11 / PS4 のみ使用可能
    • Meshをそのまま掛けない
      • 頂点シェーダの入力は頂点IDとインスタンスIDのみ
      • [対応] ComputeBufferに頂点データを格納する
      • [対応] 頂点シェーダで頂点IDとインスタンスIDから実データを参照
    • Unityのrender queueに載せることができない
      • 読んだ辞典で即描画
      • [対応] 独自のRenderTexture
    • surface shaderが使えない
    • [対応] defettedであればG-Bufferさえ生成すればライティングは共通処理で使える
  • Unity5.1でCommandBuffer/DrawProcedure() が追加

    • render queueに載せることが出来る
    • G-Bufferの精製/ ライティングしないオブジェクトには必要十分
  • Graphics.DrawProcedureIndirect()

update

  • オブジェクトをUnity上でどう扱い/どう更新するか
  • オブジェクト群を管理するマネージャをGameObjectとしてもつ
    • Objectのデータはstructの配列として持つ
    • 原始的だけど高速
  • UnityのColliderとのインタラクション等は独自に実装

  • ネイティブコード (=プラグイン化)

    • 数値計算C#苦手
      • ネイティブコードので適切に実装すれば10倍以上速くなる
    • マルチスレッド化
    • SIMD化 (データ構造の最適化 SoA化)
    • C/C++ 以外のHPC向け言語
    • 描画用データをRenderTextureに格納する
      • Texture.GetNativeTexturePtr () でテクスチャオブジェクトを取得
      • glTexSubImage2D() などでテクスチャにデータ書き込む
    • MonoのAPI
    • C++ -> C# のUnityEngineのAPI呼ぶ
  • GPGOU / ComputeShader

    • PC / PS4 / CBoxOneでは有力
      • unity5.1でOpenGL系の環境も対応
    • ゲームロジックに影響しないエフェクトに最適
      • GPUで完結出来ればOK
    • ゲームロジックに盈虚する者は不向き
    • 何に当たったかCPUへのデータ転送がロス
    • リッチな表現
      • G-Buffer を利用したスクリーンスペース衝突判定
      • プロシージャル精製 trail
  • C#でがんばる

    • struct配列で持つしかない
    • class参照しない書き方にする
      • class参照は結構な負担
    • 大きなデータのコプーは避ける
    • ThreadGroup.QuueueUserWorkItem() による並列化
    • いわゆるタスク並列
    • [注意] Unityの機能の大部分はメインスレッドから触れない
    • IL2CPPにより数値計算の高速が見込める (将来的には...)
    • 最新の.NETでもある程度の改善が行われている

結論

  • 現状大量描画は疑似インスタンシングが有力
  • ハードウェアインスタンシングはUnity5.1以降にご期待ください
  • アップデート処理は可能な限りC#は避けて自力で頑張る

Unity For Newニンテンドー3DS

  • Newニンテンドー3DSをUnity5ベースでサポート
  • Newニンテンドー3DSの登録Developerであれば利用可能
  • サポートを求める声は貰っていた
  • 8ヶ月くらい調査した
  • 市場のiOS/Androidのアプリをいくつか選んで移植可能性を検討
    • 8割以上のゲームはそのまま移植して動作するのでは!

3DSは?

  • 議寿的サポートは可能
  • メモリ/CPUの両面から制限がある
  • 選んだタイトルのうち3割くらいが可能性あった

リリースは?

  • 2015年夏: 認定堂に提出可能なβ版をリリース

調査研究と考え方

  • 市場で現在出ているUnity利用のゲームを調査
  • ハードのパフォーマンスを比較検討
  • ユニティ・ゲームス・じゃお案で扱っているゲーム等は実際に移植してみてデータ取る
  • 画面にキューブ出す/テクスチャ出す/スクリプト/物理エンジン...
  • サンプルプロジェクトで検証する
  • 3タイトルくらいの移植のチャレンジ

Wind-upKnight2 ねじ巻きナイト2

https://play.google.com/store/apps/details?id=com.robotinvader.knightmare2&hl=ja

  • RobotInvaderの傑作アクションゲーム
  • WiiU版をユニティ・ゲームス・ジャパンで担当

ゲーム移植開発した話

  • 3Dへのゲーム移植時の課題

    • メモリ容量が他のプラットフォームより少ない
    • シェーダ制限
    • 画面が2つ / 立体視対応で3回の描写
  • 最初にやったこと

    • オリジナルのゲームはUnity4.3 -> 5.1にアップグレード
    • 問題なく動作した
  • テクスチャ最適化と調整

    • Retina用に高解像度のテクスチャを仕様 -> 3DSの解像度 (400x240では不要)
    • とりあえずテクスチャを64x64に下げる -> 汚いけど動く
    • 画面の見た目の悪い部分のテクスチャサイズを512x512まで上げて対応
  • スマホとのメモリの使用量比較

    • 大体50-60%くらいのメモリ使用量に、4割以下になるものも
  • Unityのスクリプト実行速度

  • エンジンの最適化/描画

  • エンジンの指摘か/Z-Buffer更新On/Offee

    • Z-Bufferの必要ないゲームでは更新をオフにする設定を追加
    • メモリ/GPUバンドに作用
  • ねじまきナイト2

    • 2画面対応
    • 3画面(上両目/下)を描画して60fps維持
  • シェーダーの実装

  • ピクセルシェーダー対応

    • ShaderLabを使った一般的な解決方法をチャレンジ中
    • 結構大変なので最初は別なやり方で対応するかも
  • スクリプト対応

    • il2cpp (=AOT) のみ対応
    • AndroidのようなJIT対応のプラッットフォームから移植する場合
      • テンプレート+動的コード精製を使用するようなコードで移植に問題になる
      • JSONのライブラリ等でよくぶつかる問題
    • Androidのビルドでは一部コードを変更
    • IOSのゲームセンター関連の参照を無くす
    • 動作!! (コード殆ど触ってない!)
  • オーディオサポート

    • iOS/AndroidではラインタイムではOggVorbisフォーマット
    • エディタ上でビルド時に3DS用のフォーマットに変換
    • 圧縮してメモリ内に配置
    • ストリーム再生に設定

実機デモ

  • カメラ: 上画面と下画面選択出来るような感じ
    • UpperLCD / LowerLCD
  • 任天堂のソフト開発Kitの一部の機能を使用出来る
  • buildの時間は長い
  • ジャイロもちゃんと動作しているよ

今後の改題

  • エンジンの最適化

    • ゲームは毎フレーム再描画が必要
    • UIは更新があるとき飲み描画したい
    • 3DSフレームバッファを再利用出来る
    • 書き直さないオプションの使用検討
  • 2Dモードの改善

    • 3Dボリュームはオフに出来る
    • 2画面になるとして、CPU/GPUともに出る空きをどう使うか

まとめ

  • Newニンテンドー3DSをサポートするUnityをリリースするよ
  • ミドルレンジのスマートフォンをターゲットにするようなゲームならサポートは一考の価値あり
  • 2015夏にβ版出すよ
  • UGJが選考してたいとリリースすることでエンジンの完成度を高めるよ

質疑応答

  • NativePluginのサポート予定ある?
  • ネットワークは繋がる?
    • uNETをベースに使用して繋がるようになる
    • ローカルの通信に関してはまだあんまり決めてない
    • NativePluginを通じてニンテンドーの提供している通信機能へのアクセス
    • 3DSが出来ることはUnityFor3DSでも出来る予定 / 専用のAPIを用意する保証は出来ない
    • マイルストーンとしては速度、メジャーな機能から順番に着手してβリリースを目指す
  • New3DSの開発ライセンス以外の枠で開発できる?
    • New3DS自体の開発が必要なので基本的にライセンスは必須
  • ねじまきナイト2でのbuild時間
    • ビルドから転送まで5分程度

Unity 5オーディオ新機能の真髄

AudioClip

  • データと分離したよ

    • AudioClip側にはメタデータを持つことでサウンドのスケジュールを組むことが出来る
    • メモリの削減
  • Loadの仕方も使用出来る

    • PreloadAudioDataのチェックを外すとオンデマンドで動的にロード出来る
    • AudioClip.LoadAuioData(); / AudioClip.UnLoadAudioData
    • Load in backgroundにチェックすることで非同期ロードも行ける
  • Audioのメモリの使用量の改善

  • Platform毎のoverrideな設定

    • コーデック/サンプルレート等の設定
  • 圧縮形式

    • PCM
    • Vorbis (mp3より優れた圧縮率)
    • ADPCM (CPU/メモリ/圧縮のいいバランス) : 呼ぶ回数の多いものが良い、SEなど
      • ノイズが加わることもある
      • ADPCMはマニュアルのサンプルレートも加わることもある
  • 複数選択/編集に対応

AudioSource

  • 3Dセッティングの設定を外した

    • SpatialBlend で2D/3Dのハイブリッドが可能
  • StereoPanの設定を良いにアクセス出来る様にした

  • ReverbZoneのパラメータを追加

    • 2Dのサウンドでも動作する
    • ナレーションボイスにリバーブを付けるなど
  • 距離に応じてパラメータの設定が出来る

  • pauseの機能

    • AudioSource.Pause() / UnPause()
  • Audioプロファイラ

    • どのAudioClipが再生されているか判る

AudioMixier

  • デモファイル

  • 階層的なmixierになっている

  • Player/Weapon/Amibience/Weather…etc などのAudipGroup
  • インスペクタでステータスを変更出来る

    • VU-meters: 音量
    • Solo/Mute
    • エフェクトの追加
    • サイドチェーンはダッキングに使用する
      • 特定の音がなっている場合、他の音を下げることが出来る
    • Wet/Dry Mixtureが可能
    • カスタムGUIに対応
    • スナップショット (設定の場面による出し分け)
      • 環境音をはっきり出す、武器の音だけを出す… 等のケース
  • リアルタイムでプレイ中に変更出来る

    • Edit in Play Mode をクリックするとゲーム中にステータス変更が出来る
  • snapshotの変更の仕方
    • AudipMixierSnapshot snapshot; snapshot.TrandformTo(1.0f); // sec
  • スクリプトからステータスの操作が可能
  • [DEMO] Unityでマスタリングしてる
  • [DEMO] sliderによるsnapshotの遷移 / pauseボタンによるlowpassの適応

Horizontal rescheduling

  • AudioSource.PlayScheduled();
  • 再生タイミングのスケジューリング
  • ピアノロールみたいなデモ

NativePlugin