1 Unity サービス実装ワークショップ 2 アジェンダ・準備・プロジェクト紹介 3 事前準備 • Unityインストール ➡ USBの Unite2016Tokyo_TrainingDay_CourseA/Installer/Unity/ にWin(32bit/64bit)とMac用が入っています • Unityアクティベーション ➡ Unityアカウント作っていない人は、今作ってください(サービスに必要です) • GitHub のアカウント作成 ➡ http://bit.ly/1ULL6LM を参考にアカウント作成してください • 準備が終わったら、配布したUSBメモリから 「Unite2016Tokyo_TrainingDay_CourseA」フォルダごと自分のPCにコピ ーしておいてください 4 アジェンダ 1) Unity Cloud Build を登録してみよう 2) Unity Analytics を組み込んでみよう 3) Unity InAppPurchase を組み込んでみよう 4) Unity Ads を組み込んでみよう 5) Unity Cloud Build の結果を見てみよう 6) その他サービスいろいろの紹介 7) One Step Effects の紹介 8) 自分のプロジェクトでUnityサービスを始めてみよう 5 本ワークショップで得られる知見 • 各種Unityサービスの使い方 ➡ Cloud Build/Analytics/IAP/Ads・ • 次世代サービスの紹介 ➡ Heatmap/Coraborate・ • アプリ内課金やAdsを使ったマネタイズの実践 • サンプルアセットを使ったレベルデザイン 6 本ワークショップで得られない知見 • Unityの初歩的な使い方 • バージョン管理ソフトの使用法 • アプリ内課金のサーバー側の実装方法 7 ご注意 • 途中ついていけない場合は、挙手して近くのスタッフにお気軽にお声か けください • 本ワークショップではより深い実装を理解していただくため、iOS/ Android開発に特有の機能も含みます(右上のマーク) ➡ iOS/Androidの開発に興味無い人はそれぞれの時間が多少退屈になるかもしれません • どうしてもデバイス特有の問題や各ストアで生じる不具合などに対応で きない場合があります ➡ 最後に時間を取っておりますので、そこでできる限り対応します 8 準備(してきましたか?) • Unityのインストール • Unityのアクティベーション • GitHub のアカウント作成 9 準備を忘れてしまった人のために • Unityインストール ➡ USBの Installer/Unity/ にWin(32bit/64bit)とMac用が入っています • Unityアクティベーション ➡ Unityアカウント作っていない人は、今作ってください(サービスに 必要です) • GitHub のアカウント作成 ➡ http://bit.ly/1ULL6LM を参考にアカウント作成してください 10 Unityでプロジェクトを開く 1) USBに入っているフォルダごとデスクト ップ等にコピー 2) Unite2016Tokyo_TrainingDay_CourseA.zi p を解凍 3) Unity起動 4) 「OPEN」→解凍後フォルダの中にある、 Unite2016TokyoWS01の中の Unite2016TokyoWS01プロジェクトを開 く 11 Unity Services設定 ①メニューから Window→Services・ でServiceウィンドウを 開く ②上記画面が出たら、 Sign in でサインイン 画面に行く 出なかったら④に進む ③メールアドレスとパスワードを 入れてSign Inをクリック 12 Unity Services設定 ④上記画面が出たら New link…をクリック (上記画面が出ない場合は 右上の▼をクリックして Reloadを押してください) ⑤Select organization を押して 自分のアカウントを選択。 Createをクリック ⑥In-App Purchasingを クリック 13 Unity Services設定 ⑦↑の画面が出るので Enable をクリック ⑧米COPPA法に基づいて適切な方を選択 今回は13歳以下の子供もプレイする 可能性があるから 上の「This game is directed」を選択 ⑨Import をクリックして Pluginをインポート 14 Unity Services設定 ⑩Welcome になっていればOK 「Back to services」 を選択 しばらく経つと、自然にAnalyticsもONになる。 Console にエラーがなくなっていれば成功 15 プロジェクト”UnityChanBallRoll”の解説 • Roll Ball の改良版 https://unity3d.com/jp/learn/tutorials/projects/ roll-ball-tutorial • 地形タイルが各種パターンがあり、拡張性が高い • スマホでもWebGLでも動く • Assets/Example/Scripts/CompleteProject • 完成版ソースコード • Assets/Example/Scripts/Workshop • ワークショップ用ソースコード • これを改変していく 16 GitHubアカウント登録①(既にある人はスキップ) • ユーザー名: 唯一無二のID ➡ 例:makoto-unity, warapuri • メールアドレス: なんでも良い • パスワード: 忘れない • 「Sign up for GitHub」クリック 17 GitHubアカウント登録②(既にある人はスキップ) • Freeのまま、「Finish sign up」クリック • メールを受けてとって、メールの中のリン ク先(Verify email address)にジャンプ 18 マスタープロジェクトをFork ①github.com にSign in ②https://github.com/unity3d-jp/ Unite2016TokyoWS01 を開く ③「Fork」 をクリックしてFork ④「Where should we fork this repository?」 と出た場合は、自分のアカウントを指定 → Fork先に移る 19 Unity Cloud Build を登録してみよう 20 アジェンダ 1) Unity Cloud Build を登録してみよう 2) Unity Analytics を組み込んでみよう 3) Unity InAppPurchase を組み込んでみよう 4) Unity Ads を組み込んでみよう 5) Unity Cloud Build の結果を見てみよう 6) その他サービスいろいろの紹介 7) One Step Effects の紹介 8) 自分のプロジェクトでUnityサービスを始めてみよう 21 Unity Cloud Buildとは • クラウド上で自動でビルドしてくれるサービス • 無料でも使える(制限あり) • https://checkout.unity.com/products/cloud-build • Unity Professional版はCloud Proが12ヶ月無料! • マルチプラットフォームビルド • iOS/Android/WebPlayer/WebGL/Mac/Windows/ Linux 22 Unity Cloud Buildとは • WebPlayer、WebGLはシェア可能 • MacじゃなくてもWindowsでもiOS開発が可能(要: iOS developer program登録) • GitHub等のリポジトリを更新すれば、即ビルドが始 まる • AssetBundle のビルドができる • Unit Test の実行ができる 23 Let’s try Cloud Build ! ①メニューからWindow→Services を選択 ②Go to Dashboard をクリック 24 Let’s try Cloud Build ! ④ 「Enable Unity Cloud Build」をクリック ⑤ 「First, let's add some SCM information」で 「Do it!」をクリック ⑥ GitHubのリポジトリURL(先ほどフォークし た)を「サーバーURL」に代入(コピペ可) ⑦ 「ソース管理タイプ」を「Git」を選択して、 「Next:Access→」をクリック 25 Let’s try Cloud Build ! ⑦ビルドさせる出力形式でWebPlayer を選択 ⑧「Select Branch」をクリックして、 「master」 を選択(Unity Versionは なんでもいいが、Unity5.3.4p1とか) ⑨「Next: Build→」をクリックして、 ビルド開始! 26 Unity Cloud Build iOSビルド(要iOS開発者登録) • 以降は既にiOS開発者登録しており、一度でもiOS端末でビルドした経験がある方向けです 27 iTunesでiOSのUDIDを確認 ①iTunesを立ち上げる ②iOS端末をつなげる ③iOS端末マークをクリック ④何回かクリックするとUDIDが表示されるの で、右クリックメニューで「コピー」を選択 28 iOS Developer Center で Device登録 ①iOS Developer program ページをSafariで 開く ②「メンバーセンター」をクリック ③開発者登録したApple IDでサインイン ④「Certificates, Identifiers & Profiles」をク リック 29 iOS Developer Center で Device登録 ⑤ Devices → ALL ⑥ 「+」ボタンをクリック(既に端末の登録が あれば必要ない) ⑦ Register Device のName にはわかりやすい iOS端末名(例:Makoto’s iPhone6) ⑧ UDID にはiTunes で確認したUDIDを入れる 30 Xcodeで iOS Distribution のCertificate発行 ①Xcode を立ち上げて、メニューの Xcode → Preference ②Account → 該当のAppleID → View Details… ③iOS Distribution の右がCreateがあったらクリ ックして生成 31 iOS App IDの生成 ① Identifiers → ・App IDs ② 「+」ボタンをクリック ③ App ID Descriptionにわかりやすい名前(英語) ④ App ID Suffix は Explicit App ID を選ぶ(この後 IAPも使うので) ⑤ Bundle ID は適当な逆ドメイン名風に(例: com.warapuri.rollball) ⑥ Continue で、In-App Purchase がonになってる ことを確認し、Register 32 Provisioning Profileの生成 ① Provisioning Profiles の All を選択 ② +を選択 ③ Distribution の Ad Hoc を選択して、一番下のContinueボタンを クリック ④ Select App ID で先ほど作った App IDを選択して、Continue ⑤ Certificatesを選択して Continue ⑥ 出力先デバイスを選択して Continue ⑦ Profile Nameに適当な名前をつけて Continue (例: UnityChan Roll Ball Adhoc distribution) ⑧ Download ボタンを押して、ダウンロードする 33 p12 Fileを取得する ① Xcode → Preference ② Accounts → Apple IDs → View Details… ③ iOS Distributionを選択して右クリックからExport…を 選択 ④ パスワードを決めてSave。ファイル名はなんでもいい (例:Cert) → p12ファイルとして保存される 34 iOSでCloud Build設定 ① 再度Cloud Buildページに行って、Config タブで、 Setup New Target ボタンをクリック ② ビルドさせる出力形式でiOSを選択 ③ 先ほどと同様、Select Branch をmaster にして、 「Next: Build →」クリック 35 iOSでCloud Build設定 ④ BundleID は先ほど決めた逆ドメイン名風のID ⑤ Add new provisioning credentials を選択 ⑥ Cert名を適当に(例:My devices) ⑦ provisioning ファイルを指定 ⑧ p12 ファイルを指定 ⑨ パスワードは先ほどp12を作ったときのもの ⑩ Next: Buildをクリック 36 出来上がりまでしばしお待ちください 37 【注意】ハマリポイント! • メールに貼られているリンクは必ずSafariで開くこと • インストールしようとすると、"Your device is not provisioned for this build.” と表示されてインストールできない場合がある • でもUDIDもprovisioningもp12も間違っていない(何度もやって確認して いる) • 調べてみると、どうやら利用可能DeviceのUDIDグループを作り直したこ とに起因しているらしい(該当のUDIDは変更していなくても) • 解決法は iOSで https://build.cloud.unity3d.com/device/ をアクセスして、 Install 横の▼から「Reset provisioned device」を選択 • 以降は Install 可能になるはず 38 Unity Cloud Build Androidビルド • 以降は一度でもAndroid端末でビルドした経験がある方向けです 39 Unityで署名済み証明書とAPKを作る ①Unityのメニューから、 ②Android のタブで、 ③Aliasは適当な名前(後で使うので覚えておく) Keystore passwordにパスワード Create New Keystoreに✔ Browse Keystoreを押してKeystoreの保存先を指定。 Confirm passwordにも同じパスワードを Keystore passwordとConfirm passwordに 以降は↑を参考に適当に代入 同じパスワード。 Create KeyボタンでKeystoreファイルを保存 Edit→Project Settings→Player、 Publishing Settings の項目で を選択して、 PlayerSettingsを表示 最後にAliasのCreate a new keyを選択。 40 Unityで署名済み証明書とAPKを作る ④Use Existing Keystoreに✔ Browse Keystoreに 保存したKeystoreファイルを選択。 Aliasは③で付けた名前を選択 Password は③の同じパスワード ⑤同じくPlayer Settingsの Other Settings を選択して Bundle Identifier に先ほどの iOSと同じものを入れる (混乱をさけるため) ⑥Unityのメニューから、 ⑦Buildボタンでビルド。 File→Build Settingsで (生成されたapkファイルは 後のIAPで使う) Build Settingsを表示 41 AndroidでCloud Build設定 ①Cloud Buildページに行って Config → Setup New Target ②ビルドさせる出力形式で Androidを選択 ③Select Branchでmasterを選択。 Next Credentials で次のページへ 42 AndroidでCloud Build設定 ④ • Bundle IDはiOSと同じ(が混乱しない) • Choose Credentials は「Add new provisioning credentials」 を選択する。 • Nameは適当に(例:Release Keystore) • Keystore Fileは先ほどのUnityで作った署名済み証明書ファイ ルを指定 • Key Alias は先ほどUnityで作ったとき指定したAlias名 • Keystore Password は先ほどUnityで作ったときのパスワード • Key Password は同じ(が混乱しない) • 最後にNext Build→でビルドスタート 43 出来上がりまでしばしお待ちください 44 Unity Analytics を組み込んでみよう アジェンダ 1) Unity Cloud Build を登録してみよう 2) Unity Analytics を組み込んでみよう 3) Unity InAppPurchase を組み込んでみよう 4) Unity Ads を組み込んでみよう 5) Unity Cloud Build の結果を見てみよう 6) その他サービスいろいろの紹介 7) One Step Effects の紹介 8) 自分のプロジェクトでUnityサービスを始めてみよう Unity Analytics とは • アプリのユーザー動向分析サービス • ≒Google Analytics (オイ • Unity に組み込んである(5.2以降) • 無料(Unity Personal で利用できる) • 1プロジェクト、1000 pointまで 拙アプリ「VR Jump Tour」のAnalyticsを見る • iOS/Android用 実写VR アプリ • 無料 • 総ダウンロード数約 30,000 • もちろん Made with Unity 「VR Jump Tour」のAnalytics • 日本人は軍艦島が人気 • ロシアには何故かHiyoshiが人気 • DAU徐々に下がってる Let’s try Unity Analytics! Analyticsをセットアップする ①Analytics をOFFから ONにする ②ダッシュボード(Web)に行く ③INTEGRATION→Unity5.2 onward Analyticsをセットアップする ③Play To Validate まで行って… ④Unityでプレイしてみると ⑤たった今更新された カスタムイベント • カスタムイベントとは、ユーザーが任意のタイミングで知りたい 情報をスクリプトで仕込むもの。 • 例:レベルの達成、シーンの変更、ストア入店、ゲームオブジェクトとのイ ンタラクションなど • Unityが集める基本情報(端末、場所、ユニークユーザーか等)以 外は全てカスタムイベントを作る必要がある • リミットはあるが、あまり気にしなくてもいい カスタムイベント詳細 • customEventName:カスタムイベント名。名前にプ レフィックス「unity」を含むことは不可。予約語 • eventData: Dictionary型。パラメータ名のKey+値 の組。値は以下のパターン • Boolean (true/false) • 文字列 (character) • 数字 (int、float など) • 数字は平均、総数、合計。文字列とBooleanは総数 • VR Jump Tourの円グラフはシーン名(文字列)だ からできた。シーンIDではできない // Reference the Collections Generic namespace using System.Collections.Generic; int totalPotions = 5; int totalCoins = 100; string weaponID = "Weapon_102"; Analytics.CustomEvent("gameOver", new Dictionary<string, object> { { "potions", totalPotions }, { "coins", totalCoins }, { "activeWeapon", weaponID } }); Analytics Point の計算について • 1000point までOK • Analytics Point の計算法 • パラメータ無し→1ポイント • 数値パラメータだけ→(数値個数)×1ポイント • 非数値パラメータだけ→(取りうる値の個数)×1ポイント • 例:キャラ選択した総数を知りたいのなら、「0(=男性)」「1(=女性)」にするべきではなく、「MALE」 「FEMALE」にするべき。また任意の文字列(名前等)は避けた方がいい • 非数値&数値パラメータ→上記二つの合算 • とはいえ、あまり気にしなくても大丈夫 カスタムイベントを仕込んでみよう • シーン Example/Scenes/Workshop01 を開く • Example/Scripts/Workshop/GoalChecker.cs を 開く • Example/Scripts/CompleteProject/ GoalChecker.cs を参考に • 最初の// TODO:のところに 以下を仕込む 「using UnityEngine.Analytics;」 • 次の// TODO: のところに 以下を仕込む 「Analytics.CustomEvent( ∼」 仕込んだカスタムイベントを確認してみよう ③Advanced Integration→ CUSTOM EVENTS ④Unityでプレイしてみると ⑤たった今更新された オリジナルのカスタムイベントを仕込んで みよう • キャラ選択(CharaSelectController.cs) 【注意】数値型ではなく文字列に • 死んだ (GameOverController.cs) • リトライ (GameOverController.cs) • ちゃんとDashboard で更新されています か? Unity Analyticsの主要機能をみてみよう METRIC MONITOR メトリックモニター 概要把握画面 • Unityが基本情報を元に集計した一般情報 • DAU(日ごとのアクティブユーザー) • MAU(月ごとのアクティブユーザー) • REVENUE(利益) • Sticky Factor • DAU÷MAU=継続率 DATA EXPLORER データエクスプローラー ユーザーが独自に作ったカスタムイベント集計画面 • Add Custom Event で追加 • Custom Event でカスタムイベント名を指定 • Segment で対象とするユーザーを指定 • Parameter でグラフ化したいパラメータを指定 • Calculation で集計方法を指定 • 円グラフアイコンで円グラフ表示(ただし非数 値パラメータのみ) FUNNEL ANALYZER ファネルアナライザー • 継続率を集計する画面 • 「チュートリアルのどこでゲームやめたか?」 • 「何がきっかけでやめてしまったのか?」 • 1ヶ月の継続率の20%ぐらいが目標 • http://www.slideshare.net/hiromasaiwasaki/ f2p-54671169 SEGMENT BUILDER セグメントビルダー • 自分独自のセグメント作成 • 「日本の」「iOS」ユーザー • 「一万円以上課金した」ユーザー • 「チュートリアル突破した」ユーザー • 「レベル>30」ユーザー • 「前回1分以上プレイした」ユーザー よくある質問 • Q. 集計にどのぐらいかかる? • A. 4時間ほどかかります • Q. カスタムイベントはどこにおけばいい? • A. レベルアップや課金等の重要なタイミングがベストです • Q. 集計前のRAWデータを取得したい • A. 限定機能です。http://info.unity3d.com/2015-10-9HeatmapsSign-Up.html に登録を • Q. Analytics Point が1000を超えたらどうなる? • A. それ以降のカスタムポイントを取得できません。ただし各カスタムイベントをオン/オフはWeb から随時変更できます Tips • Event名には一貫性を持とう(LevelStart,LevelCompleted) • Event名には「起こったこと」をしよう(⭕ LevelCompleted ❌ Level) • Event名は大文字を認識できるが、パラメータ名は小文字のみ(⭕ ️ level_id ❌ LevelID) • カテゴリーで分けるなら、数字を最初にしない( ⭕ Level0 ❌ 0Level) • ガベコレを気をつけるならDictionary型のメンバ変数を持とう • Analyticsに関するコードはゲーム部分と切り離しておこう Unity InAppPurchase を組み込んでみよう アジェンダ 1) Unity Cloud Build を登録してみよう 2) Unity Analytics を組み込んでみよう 3) Unity InAppPurchase を組み込んでみよう 4) Unity Ads を組み込んでみよう 5) Unity Cloud Build の結果を見てみよう 6) その他サービスいろいろの紹介 7) One Step Effects の紹介 8) 自分のプロジェクトでUnityサービスを始めてみよう Unity In-App Purchase (IAP) とは • Unity Analytics に付属する機能 • アプリ内課金を簡単に組み込める • マルチプラットフォーム • Google Play / iOS App Store / Mac App Store / Windows Store / その他 • コード共通 • ネイティブプラグインを書かなくてOK IAPをサンプルプロジェクトに組み込んでみよう • 仕様 • クマは購入したら利用できるようにする • 一度購入したらそれ以降は利用できる(非消費型) • 購入するまでは利用不可 • コインは購入可能 • 買うとプレイが終わっても存続する(消費型) • 実装方法 • クマ利用権やコインはPlayerPrefs で記録しておく Let’s try Unity IAP! IAPをセットアップする ①In-App Purchase を有効にする ②オンにして、Importする ③Plugins/UnityPurchasingが あればOK 購入ボタンと購入APIを紐づける ①Systemを選択→右クリック→ ②IAPManager に Create Emptyで空オブジェクト。 Example/Scripts/Workshop/Purchaser.cs 名前を「IAPManager」に変更 (Example/Scripts/Complete/Purchaser.csではない) をD&D ③シーンの中で”border_shop”を検索して アクティブにして見えるようにする 購入ボタンと購入APIを紐づける ④シーンの中で”Item1buy_Button”を検索 ⑤検索ウィンドウの×で検索解除 Buttonコンポーネントにある ④で作った項目に①で作った OnClickの+を押して項目追加。 IAPManager をD&D ⑥No Function をクリックして Purchase ▶︎ BuyConsumable() を選択 購入ボタンと購入APIを紐づける ⑦シーンの中で”Item2buy_Button”を検索 ⑧検索ウィンドウの×で検索解除 Buttonコンポーネントにある ⑦で作った項目に①で作った OnClickの+を押して項目追加。 IAPManager をD&D ⑨No Function をクリックして Purchase ▶︎ BuyNonConsumable() を選択 購入ボタンと購入APIを紐づける ⑩シーンの中で”border_shop”を検索して 非アクティブに戻す Purchase.csの購入部分に効果を組み込もう • Example/Scripts/Workshop/Purchase.cs を開く • Example/Scripts/CompleteProject/Purchase.csを参考 に • 最初の// TODO:のところに 以下を入れる(コピペ可) PlayerPrefs.SetInt("CoinNum", PlayerPrefs.GetInt("CoinNum") + 100); GameObject.Find(“CoinNumUI"). GetComponent<ScoreManager>().UpdateCoin(); • 次の// TODO: のところに 以下を入れる(コピペ可) PlayerPrefs.SetInt("NewCharaUnlocked", 1); CharaSelector.csに効果を反映させよう • 購入したキャラを利用可能・不可を設定する • Example/Scripts/Workshop/CharaSelector.cs を開く • Example/Scripts/CompleteProject/CharaSelector.csを 参考に • 最初の// TODO:のところに 以下を入れる(コピペ可) if (PlayerPrefs.GetInt("NewCharaUnlocked") == 0) { newOneButton.interactable = false; } else { newOneButton.interactable = true; } Unity IAPの課金プロセスを紐解く 課金部分Purchase.cs を紐解く • InitializePurchasing • Awakeで自動で行われ、各ストアでの商品IDと共通商品IDを紐付けを行っている。 • ストアが違ってもゲーム内商品が同じであれば、同じIDの方が混乱がなくていい。 • BuyConsumable、BuyNonConsumable、BuySubscription • ストア別に購入アイテムを別にしたりしていないことに注目 • BuyProductID • try~catch で購入シーケンスでの例外をキャッチ • m_StoreController.InitiatePurchase で、デバイスの購入ダイアログに飛ぶ 課金部分Purchase.cs を紐解く • RestorePurchases • アプリを再インストールした際に、昔買った商品をリストアする処理 • AppStore は明示的にアプリ側で復活させる必要がある • OnInitialized • 初期化がうまくいけば勝手に呼び出される関数 • 全体の購入システム(m_StoreController) と、ストア特有のサブシステム (m_StoreExtensionProvider) のインスタンス化 • ProcessPurchase • ストアで課金が完了した段階で、課金によるゲームへの効果を処理するところ AppStore の課金アイテムを 実際に追加してみよう AppStore に課金アイテムを登録 ①iTunes Connect へ行って ②Bundle IDはCloud Buildの ③今作った新しいアプリを選択し、 新しいAppを作る 際に、作ったものを代入。 機能→App 内課金→+を選択。 その他の項目は適当に AppStore に課金アイテムを登録 com.warapuri.unitychanrollball.coin100 ④消費型を選択 ⑤参照名は公開されないので適当に 製品IDは逆ドメイン名でユニークID。 (例:com.warapuri.unitychanrollball.coin100) ⑥ 価格も設定 AppStore に課金アイテムを登録 ⑦言語を追加を設定。課金ポップアップで ⑧スクリーンショットを選択。 ⑨Saveを押して保存すると、 表示される内容なので、慎重に。 配布USBに「Shop.png」が 登録される あるので、利用してください Sandboxで試してみる ①ユーザーと役割→Sandboxテスター ②テスターとして登録 ③テストするiOS端末で →テスター+ボタンでテスターを追加 [email protected] という感じで「+」を使うと無駄に 設定→iTunes & App Store メールアカウント作らなくて便利 一旦サインアウトする →Apple IDを選択し、 Sandboxで試してみる “com.warapuri.unitychanrollball.coin100”; ④Purchase.cs の kProductNameAppleConsumable の文字列部分を ⑤アプリを立ち上げて、 先ほどの製品IDに変更する iOS端末で購入しようとすると、 [Environment: Sandbox] と表示されていれば成功 Google Play の課金アイテムを 実際に追加してみよう Google Play で新しいアプリを登録 APK ①Google Play で ②タイトルを適当に入れて ③アルファ版テストを選択 アイコン→ APKをアップロードを選択 APKファイルをアップロードを選択 新しいアプリを追加 (Cloud Buildの際に作ったAPK) Google Play で新しいアプリを登録 APK ④「クローズドアルファテスト」を ⑤Create List でテスターリストの作成 ⑥作ったテスターリストに 選択 リスト名は適当に。 有効に✔を入れる メールアドレスは自分の Google アカウントを入れてください Google Play で新しいアプリを登録 ストアの掲載情報 ①ストアの掲載情報を選択 ②簡単な説明と詳細な説明をそこそこちゃんと記載する。 (適当に書いたらなりすましに誤認されました) Google Play で新しいアプリを登録 ストアの掲載情報 ③配布したUSBの中に「IAP」フォルダの中に画像を利用 ④アプリのタイプをゲーム。 スナップショットに2枚以上、 カテゴリをアーケード。 高解像度アイコン、宣伝用画像をそれぞれ上記のようにD&D コンテンツレーティングを全ユーザー対象 アップロード プライバシーポリシーは「今回は∼」に✔ Google Play で新しいアプリを登録 コンテンツのレーティング ①コンテンツのレーティングを選択 ②画面に従ってレーティングを設定 Google Play で新しいアプリを登録 価格と販売/配布地域 ①価格と販売/配布地域を選択 ②アプリの価格は無料。 ③同意事項に全て✔ 全ての国を選択。 一番上の「ドラフトを保存」をクリック Google Play で新しいアプリを登録 アプリ内アイテム com.warapuri.unitychanrollball.coin100 ①アプリ内アイテムを選択 ②管理対象のアイテムを選択 ③タイトル、説明は公開される情報なので +新しいアイテムを追加を選択 アイテムIDには逆ドメイン ちゃんと記入。 (アイテムIDは後ほど使うので忘れずに) デフォルトの価格を記入後、価格を 次へを選択 自動換算ボタンで各国の値段を算出。 最後に右上の「無効」を「有効」に Google Play で新しいアプリを登録 アプリ内アイテム “com.warapuri.unitychanrollball.coin100”; ④Purchase.cs の kProductNameGooglePlayConsumable の文字列部分を ⑤アプリを立ち上げて、 先ほどのアイテムIDに変更する Android端末で購入しようとすると、 「これはテスト用の注文です」 と表示されていれば成功 トラブルシューティング 右のようなエラーが出ている場合の考 えられる原因 1) アイテム内アイテムを「有効」にしていない 2) アイテムIDが違う 3) テスターとGoogle Playアカウントが違う 対処法:設定→アプリ→Google Playストア→ ストレージ→データ消去 4) 反映されるまで時間がまだ立っていない トラブルシューティング それでもエラーが治らない場合 1) アプリのステータスが「公開中」まで待つ 2) USBからインストールではなく、APKアップロ ード→Google Playからダウンロードで試して みる 3) Androidデバイスを再起動してみる 4) 一回寝て、翌日もう一回チャレンジする 注意 • PlayerPrefsで商品の反映をさせていたが、本来はNG • 簡単に改造されてしまう • サーバー側で管理しローカル側では一切情報を保持しない IAP、もう少し深く。 レシート検証 • http://docs.unity3d.com/ja/current/Manual/ UnityIAPValidatingReceipts.html • 購入時にストアからくるレシートデータをローカルで確認する • Google Play 公開キー(要設定) • Apple のルート証明書(自動設定) • 購入後のシーケンスなので、アプリケーション側でUIでユーザー に知らせる必要がある レシート検証 ①Window→Unity IAP→ ②Google Play Developer Consoleで ③「IAP Obfuscator」の項目に Receipt Validation Obfuscatorを サービスとAPIを選択し、 ペーストして、Generate IAP∼を 選択して、「IAP Obfuscator」を 「このアプリのライセンス キー」の クリックして、コード生成する。 表示 部分を丸々コピーする レシート検証 public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e) { // Unity IAP's validation logic is only included on these platforms. #if UNITY_ANDROID || UNITY_IOS || UNITY_STANDALONE_OSX // Prepare the validator with the secrets we prepared in the Editor // obfuscation window. var validator = new CrossPlatformValidator(GooglePlayTangle.Data(), AppleTangle.Data(), Application.bundleIdentifier); try { // On Google Play, result will have a single product Id. // On Apple stores receipts contain multiple products. var result = validator.Validate(e.purchasedProduct.receipt); Debug.Log("Receipt is valid. Contents:"); foreach (IPurchaseReceipt productReceipt in result) { Debug.Log(productReceipt.productID); Debug.Log(productReceipt.purchaseDate); Debug.Log(productReceipt.transactionID); } // Unlock the appropriate content here. } catch (IAPSecurityException) { Debug.Log("Invalid receipt, not unlocking content"); } #endif return PurchaseProcessingResult.Complete; } マルチプラットフォーム用 確認クラス レシート確認 問題なければ、ここで 購入したことに 問題があればここで、 買えないことをユーザーに 知らせる必要がある Unity Ads Unity Ads Overview • 動画アドネットワーク • プラットフォーム:iOS / Android • 15~30秒程度の全画面動画 • Unity 5.2 からエディタに完全統合、SDK不要 • ゲームのデザインを邪魔しない • 日本でも一日に数百ドル稼ぐデベロッパーが複数 開発支援から成功支援へ 開発者にとっての「成功」とは 2 : 98 The Swrve Monetization Report 2016 https://www.swrve.com/landing/swrve-monetization-report-2016 課金ユーザー 1.9% 無課金ユーザー 98.1% The Swrve Monetization Report 2016 https://www.swrve.com/landing/swrve-monetization-report-2016 マネタイズできているユーザー 1.9% マネタイズできていないユーザー 98.1% The Swrve Monetization Report 2016 https://www.swrve.com/landing/swrve-monetization-report-2016 100% マネタイズできているユーザー すべてのプレイヤーをマネタイズする 次の開発へつなげる ゲームへの集客へつなげる Unity Ads をゲームに導入してみる Unity Ads の機能をオンにする • Services ウィンドウから Unity Ads の機能 をオンにする • UnityEngine.Advertisements が使えるよう になります • [Advanced] の中にiOS, Androidそれぞれの Game IDが表示されます UnityAdsController をDLしてインポート • http://bit.ly/unityadscontroller • 今日は USB の中に入ってます • Unity Ads をさらに簡単に導入するための スクリプトと Prefab プレハブ(UnityAdsController.prefab)を シーンにドラッグ&ドロップ • /UnityAdsController/Prefab/ UnityAdsController.prefab プレハブ(UnityAdsController.prefab)の Game ID と Zone ID を設定する Game ID ってなに? • Unity Ads内でゲームアプリを識別するた めの固有のID • プラットフォームごとに発行される Zone ID(Placement)ってなに? • いわゆる広告枠 • デフォルトで2つ作成されている • video • rewardedVideo • 自分で増やせる AD_Button に広告表示の関数を割り当てる • Canvas > border_gameover > AD_Button のOnClickから、UnityAdsControllerの中の ShowUnityAds()を呼ぶように設定する 広告表示完了時のコールバックを設定する • UnityAdsController の中の OnFinished Callback から、GameOverController の中 の RetryWithEasyMode() を呼ぶように設 定する • ここはゲームの内容によって変更できる余 地がある • たとえば • その場からコンティニュー • ボーナスコイン など 広告表示完了時にボーナスコインを付与する • サンプルコード RewardCoin.cs • bit.ly/rewardcoinsample • Zip をダウンロードして Unity へ インポート • GameOverController にアタッチ • UnityAdsController の OnFinished Callback で呼び出す関数を変更する UnityAdsController(Script)の解説 Unity Ads のダッシュボードを見てみる ダッシュボードへアクセス Services ウィンドウ右上の 「Go to Dashboard」 あるいは https://dashboard.unityads.unity3d.com/ へアクセス Organizationの切り替え Project 一覧の表示 テスト端末の一覧表示・登録 API Key の取得・再生成 連絡先情報 請求関連 請求関連 デベロッパーID ダッシュボード:プロジェクト設定 Platform 一覧 レポート プロジェクトID, COPPAの設定 導入方法のヘルプ (Game IDの表示) ダッシュボード:プラットフォーム設定 広告枠の設定 広告フィルタリング(除外)の設定 動画の向き、テストモードの設定 プラットフォーム設定の表示 (Game ID, Store ID) アジェンダ 1) Unity Cloud Build を登録してみよう 2) Unity Analytics を組み込んでみよう 3) Unity InAppPurchase を組み込んでみよう 4) Unity Ads を組み込んでみよう 5) Unity Cloud Build の結果を見てみよう 6) その他サービスいろいろの紹介 7) One Step Effects の紹介 8) 自分のプロジェクトでUnityサービスを始めてみよう Unity Cloud Build の結果を見てみよう • WebPlayerビルド結果の「Play」ボタンを クリック • 「Share」ボタンで一般公開され、誰でも 遊べるようになる Unity Cloud Buildの ちょっと進んだ使い方 Advanced Settings 高度な設定 • Scripting Define Synbols ➡ 「#IF MY_DEFINE_DEBUG」とか • Pre-Export Method Name ➡ ビルド前に呼び出すstatic関数 ➡ ライトマップのベイクとか • Post-Export Method Name ➡ ビルド後に呼び出すstatic関数 • Scene List ➡ BuildSettings とは違うシーン群をビルドしたい場 合設定 Cloud BuildでAssetBundleビルド • AssetBundle をビルドが可能 • StreamingAssets 以下にコピーして利用ができる • ローカルに持ってくるのはダウンロードして、IPAを解 凍して、 StreamingAssets以下にある Cloud BuildでAssetBundleビルド ①UnityエディタでAssetBundle名を 設定しておく ②Cloud Buildページに行って Configタブを選択 ターゲット(例:Defaul iOS)の →Show Asset Bundle Options →Edit Asset Bundle Options ③Build Asset Bundleに✔ Next Save→を選択して 再度ビルドすれば AssetBundle が生成される Cloud BuildでUnitTest • 実は UnityはUnitTest ができる • UnitTest とはテストフレームワークで、自動で不具合をチェック してくれる仕組み • 作っておいたテストをCloud Buildで実行が可能 • テストログも取得可能 Cloud BuildでUnitTest ①こんな↑感じのテストを Editorスクリプトで作っておく ②Cloud Buildページに行って Configタブを選択 ターゲット(例:Defaul iOS)の →Show Test Options →Edit Test Options ③Enabledに✔ Next Save→を選択して 再度ビルドすれば ビルド後にテストが走る UnityCloudBuildManifest.json • ビルド時にResources以下に出力され、ランタイムで JSONファイルとして読むことができる • Assets/Scripts/CompleteProject/CloudBuildVersion.cs • 得られる情報 • ビルドターゲット(Android/iOS等) • BuildNumber • ビルド完了の時間(UTC) • Unityのバージョン その他Unityサービスの紹介 アジェンダ 1) Unity Cloud Build を登録してみよう 2) Unity Analytics を組み込んでみよう 3) Unity InAppPurchase を組み込んでみよう 4) Unity Ads を組み込んでみよう 5) Unity Cloud Build の結果を見てみよう 6) その他サービスいろいろの紹介 7) One Step Effects の紹介 8) 自分のプロジェクトでUnityサービスを始めてみよう Unity Heatmaps Unity Heatmaps • Analytics の1機能 • プレイヤーの位置情報等のビッグデータを 集積してビジュアライズしてくれる • 利点 • ユーザー動向分析 • どこでよく死ぬのか? • どういうパターンが好まれるのか? Heatmap事例 3Dゲーム Heatmap事例 2Dゲーム Heatmap事例 VRゲーム demo Unity Game Performance(alpha) Unity Game Performance • クラッシュレポート • クラッシュ時のログをレポーテ ィングしてくれる • 使い方 • UnityCrashLog.unitypackage をインポート • CrashReporting.Init(“UPID"); • デメリットなし demo Let’s try Game Performance Unity Collaborate demo アジェンダ 1) Unity Cloud Build を登録してみよう 2) Unity Analytics を組み込んでみよう 3) Unity InAppPurchase を組み込んでみよう 4) Unity Ads を組み込んでみよう 5) Unity Cloud Build の結果を見てみよう 6) その他サービスいろいろの紹介 7) One Step Effects の紹介 8) 自分のプロジェクトでUnityサービスを始めてみよう One Step Effects 概要 「Unityって絵がショボくない?」 「Unityで作るとなんかグラフ ィックがショボくならない?」 「他のゲームエンジンの方が綺 麗じゃない?」 「Unityのグラフィック機能弱 いんじゃない?」 大きな誤解 • 「Adam」 • https://www.youtube.com/watch? v=44M7JsKqwow • Unityは積み上げ式 • 最初はシンプル • 自分で必要なものを追加していく • 綺麗なグラフィックはそれなりの手 間が必要 「だけど、何をどうしたらいいの?」 • 綺麗にするためには、多くの要素がある • ポストエフェクト • ライティング(ライトマップ) • テクスチャ • それぞれに設定項目がたくさんある • 例:Bloom • →Threshold(閾値)、Exposure(露 光)、Radius(半径)、Intensity(強度) そこで 「One Step Effects」 の出番です One Step Effects 概要 • https://github.com/makoto-unity/ OneStepEffects • 1クリックで綺麗なエフェクトやライティ ングを設定してくれるUnityエディタ拡張 • 複雑な設定項目をいろいろ調整する必要が ない • Editorスクリプトなので、自分でカスタマ イズ可能 使い方(初級編) 使い方 1.メニューから「Window → One Step Effects」 2.「Apply」ボタン 以上! 使い方(中級編) 詳細設定情報その1 • Root Object: ライトマップを適応させるオブジェクトのルート • Noneならば、Rendererがついているオブジェクト全て • Camera Object: イメージエフェクトが適応させたいカメラ • Noneならば、Main Camera • Light Object: 調整させたいライト • Noneならば、Directional Light を検索したライト • Skybox: 貼るスカイボックスのマテリアル • Noneならば、Skybox を検索してあればそれを使う 詳細設定情報その2 • Lighting settings:Precomputed Realtime GIを適応 • Ambient Intensity: 環境光の明るさ • Reflection Intensity: 反射光の明るさ • Realtime Resolution: ライトマップの解像度。地形が巨大な場 合は0.1とか小さい値にした方が無難 • DirectLight Intensity: 太陽光の明るさ。弱くした方がいい • Create Normal map:Normalテクスチャがない場合は、元のテク スチャをコピーしてNormalテクスチャに変換して適応 • Normal scale: ノーマルマップの効き具合。あまり激しくしない 方がいい 詳細設定情報その3 • Apply SSAO • SSAO(部屋の角等の陰影)の適応 • Apply SSR • SSR(反射表現)の適応 • Apply Bloom • Bloom(光があふれる演出)の適応 • Apply AA • Antialias(ジャギーを防ぐ) の適応 何はともあれ 使ってみましょう アジェンダ 1) Unity Cloud Build を登録してみよう 2) Unity Analytics を組み込んでみよう 3) Unity InAppPurchase を組み込んでみよう 4) Unity Ads を組み込んでみよう 5) Unity Cloud Build の結果を見てみよう 6) その他サービスいろいろの紹介 7) One Step Effects の紹介 8) 自分のプロジェクトでUnityサービスを始めてみよう
© Copyright 2024 Paperzz