SlideShare a Scribd company logo
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
複数端末で長時間エイジングテストできるように
おわり

More Related Content

What's hot

徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -UE4.25 Update - Unreal Insights -
Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。
IndieusGames
 
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
エピック・ゲームズ・ジャパン Epic Games Japan
 
Blender で作ったアニメーションを Unreal Engine 4 で利用する
Blender で作ったアニメーションを Unreal Engine 4 で利用するBlender で作ったアニメーションを Unreal Engine 4 で利用する
Blender で作ったアニメーションを Unreal Engine 4 で利用する
rarihoma
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
com044
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
 
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
エピック・ゲームズ・ジャパン Epic Games Japan
 
UniRxことはじめ
UniRxことはじめUniRxことはじめ
UniRxことはじめ
Shoichi Yasui
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
UnityTechnologiesJapan002
 
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
Masahiko Nakamura
 
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive OnlineUE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
エピック・ゲームズ・ジャパン Epic Games Japan
 
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
historia_Inc
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
Unity Technologies Japan K.K.
 
ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例
ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例
ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例
エピック・ゲームズ・ジャパン Epic Games Japan
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
エピック・ゲームズ・ジャパン Epic Games Japan
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
エピック・ゲームズ・ジャパン Epic Games Japan
 
"有翼のフロイライン Wing of Darkness"と歩むUE4の世界
"有翼のフロイライン Wing of Darkness"と歩むUE4の世界"有翼のフロイライン Wing of Darkness"と歩むUE4の世界
"有翼のフロイライン Wing of Darkness"と歩むUE4の世界
エピック・ゲームズ・ジャパン Epic Games Japan
 
60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
エピック・ゲームズ・ジャパン Epic Games Japan
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
Unity Technologies Japan K.K.
 

What's hot (20)

徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
 
UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -UE4.25 Update - Unreal Insights -
UE4.25 Update - Unreal Insights -
 
Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。
 
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
UE4をレンダラとした趣味的スピード背景ルックデブ(UE4 Environment Art Dive)
 
Blender で作ったアニメーションを Unreal Engine 4 で利用する
Blender で作ったアニメーションを Unreal Engine 4 で利用するBlender で作ったアニメーションを Unreal Engine 4 で利用する
Blender で作ったアニメーションを Unreal Engine 4 で利用する
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
 
UniRxことはじめ
UniRxことはじめUniRxことはじめ
UniRxことはじめ
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
 
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive OnlineUE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
UE4で”MetaHumanを使わずに”耳なし芳一になる10の方法 | UE4 Character Art Dive Online
 
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
目指せ脱UE4初心者!?知ってると開発が楽になる便利機能を紹介 - DataAsset, Subsystem, GameplayAbility編 -
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
 
ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例
ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例
ロボット好き集まれ!こいつ、動くぞ。星と翼のパラドクス開発事例
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
"有翼のフロイライン Wing of Darkness"と歩むUE4の世界
"有翼のフロイライン Wing of Darkness"と歩むUE4の世界"有翼のフロイライン Wing of Darkness"と歩むUE4の世界
"有翼のフロイライン Wing of Darkness"と歩むUE4の世界
 
60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編60fpsアクションを実現する秘訣を伝授 解析編
60fpsアクションを実現する秘訣を伝授 解析編
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
 

More from Shota Baba

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

More from 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 で実装するエイジングテストのお話