Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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;
...
基本これだけ
ゲーム本編は?
自分が関わった Unity プロジェクトでは
もとから「オートモード」の機能が存在していたので
フラグが立っていたらオートモードの機能を有効化
if ( TestFlag.IsMainStory )
{
StartAutoMod...
組み合わせチェックは?
デッキや装備品は
下記のように適当にランダムに設定
var cardList = MngCardData.List // 全カードを
.Shuffle() // ランダムに並べ替えて
.Take( 5 ) // 5 枚取...
画面遷移時の注意
画面遷移時は適度に遅延させないと
早すぎて何が起きているかわからないので注意
// フラグが立っていたら
if ( TestFlag.IsMainStory )
{
// 1 秒後に OK ボタンが押された時の処理を呼び出す
...
エイジングテストの実装方法まとめ
アセットやプラグインがなくても if 文で実装可能
エイジングテストできる環境を作ること
が大切なので、実装手段はなんでも良い
1 日で大幅にデバッグコストを削減できる
その他
購入したもの
多ポート USB 充電器
https://goo.gl/fGTpC3
複数端末で長時間エイジングテストできるように
おわり
Upcoming SlideShare
Loading in …5
×

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

2,506 views

Published on

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

Published in: Engineering
  • Be the first to comment

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

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

×