SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Unity で実装する
エイジングテストのお話
目次
1. メリット
2. 作ったエイジングテスト
3. 実装方法
4. その他
メリット
端末の発熱がわかる!
アプリの発熱はやっぱり気になる
エイジングテストして発熱が少ないと安心できる
メモリリークが見つかる!
よくある破棄処理の実装漏れを見つけられる
マテリアルの破棄漏れ
イベントの解除漏れ
アセットバンドルの解放漏れ
修正後もアプリを端末にインストールしたら
エイジングテストして放置するだけ確認可能
特定ケースのエラーが見つかる!
リソースが大量にあるほど潜在的なバグが増える
「このクエストでエラーが発生した」
「この装備を付けるとエラーが出た」
「このキャラで戦闘を開始するとエラー」
大量のリソースをすべてデバッグしなくても
エイジングテストすれば不具合を見つけられる
どれだけ長時間遊べるかわかる!
長時間プレイし続けて
問題が起きないかどうかが調査できる
自分が関わった Unity プロジェクトでは
タイムスケールを 8 倍速にして
72 時間(3 日間)放置し続けても正常に動作した
単純計算で 24 日間はアプリを遊び続けられる
余った時間を有効に使える!
デバッグの時間を削減できるので
ゲームのブラッシュアップに
時間を割くことが可能になる
家に帰れる
エイジングテストのメリットまとめ
端末の発熱がわかる!
メモリリークが見つかる!
特定ケースのエラーが見つかる!
どれだけ長時間遊べるかわかる!
余った時間を有効に使える!
作ったエイジングテスト
作ったエイジングテストの種類
メインストーリー
フリーバトル
チュートリアル
メニュー遷移
装備変更
エイジングテストの始め方
サーバ接続先選択画面で「オフライン」を選んで
自動テストボタンを選ぶだけ
エイジングテストの制限
通信環境に依存してテストが止まらないように
オフラインモードでのみテスト可能
倍速設定でテストを効率化
タイムスケールを変更することで
少ない時間でたくさんのテストを行う
Android だと 4 倍速、iOS だと 8 倍速推奨
速くしすぎると原因不明のハングやクラッシュが発生
ランダムな組み合わせチェック
テスト中はランダムにデータを変更することで
リソースの組み合わせチェックを実現
クエスト
ステージ
デッキ
装備品
オプション(描画品質や音響効果)
Slack と連携して結果を可視化
1 つのクエストをクリアするたび
Slack に結果が送信される
Slack に送信するデータ
何回目のクエストか
最後にプレイしたクエストの ID
プレイ時間
最大使用メモリ
Shader、Mesh、Animator の使用数と差分リスト
Slack に結果を送信するメリット
メモリ使用量や増加メモリの内容が可視化される
何時間プレイできているか、
どれだけメモリを使えるかがわかる
Slack に通知が来なくなったら
アプリが強制終了したということがわかる
最後に送られてきた結果を見れば
エラーの原因を調査しやすい
作ったエイジングテストまとめ
5 種類のエイジングテストを実装
テスト開始ボタンを押すだけで実行可能
倍速設定により短い時間で大量にテスト
組み合わせチェックを実現
Slack と連携してテスト結果を可視化
実装方法
Q. どうやって実装している?
有料アセット?
外部プラグイン?
ネイティブ機能?
スクリプト言語?
A. if 文
エイジングテストするかどうかを管理する
グローバルなクラスを作成して
public static class TestFlag
{
// メインストーリーをテストする場合 true
public static bool IsMainStory;
}
アプリ起動時にテストボタンが押されたら
テストフラグを立てるようにして
// ボタンが押されたらフラグを立てる
buttonUI.mRelease = () => TestFlag.IsMainStory = true;
各メニュー画面に、フラグが立っていたら
自動で画面遷移する処理を記述するだけ
public class HomeScene : MonoBehaviour
{
public UIButtonEvent m_okButtonUI = null;
private void Awake()
{
// フラグが立っていたら
if ( TestFlag.IsMainStory )
{
// OK ボタンが押された時の処理を呼び出す
OnReleased();
return;
}
m_okButtonUI.mReleased = OnReleased;
}
...
基本これだけ
ゲーム本編は?
自分が関わった Unity プロジェクトでは
もとから「オートモード」の機能が存在していたので
フラグが立っていたらオートモードの機能を有効化
if ( TestFlag.IsMainStory )
{
StartAutoMode();
}
組み合わせチェックは?
デッキや装備品は
下記のように適当にランダムに設定
var cardList = MngCardData.List // 全カードを
.Shuffle() // ランダムに並べ替えて
.Take( 5 ) // 5 枚取り出して
.ToArray() // 配列にして
;
deckData.cardList = cardList; // デッキに設定する
画面遷移時の注意
画面遷移時は適度に遅延させないと
早すぎて何が起きているかわからないので注意
// フラグが立っていたら
if ( TestFlag.IsMainStory )
{
// 1 秒後に OK ボタンが押された時の処理を呼び出す
DelayCall( 1.0f, OnReleased );
return;
}
エイジングテストの実装方法まとめ
アセットやプラグインがなくても if 文で実装可能
エイジングテストできる環境を作ること
が大切なので、実装手段はなんでも良い
1 日で大幅にデバッグコストを削減できる
その他
購入したもの
多ポート USB 充電器
https://goo.gl/fGTpC3
複数端末で長時間エイジングテストできるように
おわり

Mais conteúdo relacionado

Mais procurados

Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
Tatsuhiko Yamamura
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
 

Mais procurados (20)

MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
WebSocketでカメラの映像を共有してみた
WebSocketでカメラの映像を共有してみたWebSocketでカメラの映像を共有してみた
WebSocketでカメラの映像を共有してみた
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
「宴」実装時に得られたUnityプログラムノウハウ
「宴」実装時に得られたUnityプログラムノウハウ「宴」実装時に得られたUnityプログラムノウハウ
「宴」実装時に得られたUnityプログラムノウハウ
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
Web開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor AppWeb開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor App
 
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMERVisual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
Visual Dataprepで建築データを美味しく下ごしらえ UNREAL FEST EXTREME 2021 SUMMER
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
【Unite Tokyo 2019】Render Streaming - WebRTC を用いたストリーミングソリューション
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
 
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
 
Unityと.NET
Unityと.NETUnityと.NET
Unityと.NET
 

Mais de Shota Baba

Mais de Shota Baba (6)

【Visual Studio】開発効率を上げる25個の拡張機能
【Visual Studio】開発効率を上げる25個の拡張機能【Visual Studio】開発効率を上げる25個の拡張機能
【Visual Studio】開発効率を上げる25個の拡張機能
 
Unity エディタ拡張
Unity エディタ拡張Unity エディタ拡張
Unity エディタ拡張
 
知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編
 
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
 
知って得するUnity
知って得するUnity知って得するUnity
知って得するUnity
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 

Unity で実装するエイジングテストのお話