SlideShare a Scribd company logo
1 of 42
Download to read offline
うちではこうやってます
UI構築のルールと
Playmakerを使った画面遷移
株式会社マーベラス
松田裕太
1
自己紹介:松田裕太
いろいろやってきました。雑食エンジニア。
最近はUnityでアプリを作ることが多いです。
マーベラス時代
世に出ていない試作や、名前は出せないプロジェクト
ジー・モード時代
フライハイトアレスティア、パネローグなど
某アニメ制作会社時代
アニメ@wikiというサイトにまとまってました
https://www7.atwiki.jp/anime_wiki/pages/13912.html
某携帯キャリア会社時代
ガラケー用アプリのライブラリ仕様策定など
2
今回のお題
うちではこうやってます
UI構築のルールと
Playmakerを使った画面遷移
マーベラスのすべてのプロジェクトで行っている
手法というわけではありません
今作っているアプリではこうやってますよ
というのを紹介します
3
目次
目的
画面遷移
UI構築ルール
作業フロー
おまけ
4
目的
画面遷移
UI構築ルール
作業フロー
おまけ
5
画面量産の仕組みが欲しかった
今回のプロジェクトは期間に対しての物量が多く
さらに人数が「じわじわ」と増えることが予想された
人が増えるたびに新メンバーの学習のコスト負担になる
悩まずに画面や機能を量産する仕組みが欲しかった
6
0
5
10
15
1 2 3 4 5 6 7 8 9
エンジニアの増減
人数
経過月数
画面を量産するためには
導入時(人が増えたとき)
・ルール説明しやすいこと
・ルールが少ないこと
実装時
・他の実装から真似できる
・担当者が変わってもぱっと見でわかる
7
目的
画面遷移
UI構築ルール
作業フロー
おまけ
8
基本構成
uGUI(Unity5.3.4)
+
Playmaker
9
基本構成:uGUI
Unity標準の2D用UI機能のことを勝手にこう呼んでいる
おそらく公式な呼び方ではない
Unity4.6以前はNGUIという
UI構築用エディタ拡張アセットがスタンダードだった
しかしUnity4.6でNGUI相当の機能が標準で入ったので
区別するためにuGUIって呼んでいたら
いつの間にか定着していた気がする
10
基本構成:Playmaker
みんな大好きPlaymaker
大人気のエディタ拡張アセット
グラフィカルなステートマシンエディタ
https://www.assetstore.unity3d.com/jp/#!/content/368
PlayMakerなのか
playMakerなのか
Playmakerなのか
よくわからない
11
画面遷移の方式
Unityでの画面遷移の実現方法は大きく分けて2つ
プレハブ入れ替え方式
シーン入れ替え方式
うちの場合は(基本的には)シーン入れ替え方式
(ひとつのシーンをみんなで触るのは危険)
12
シーン内のオブジェクト
各シーンに初期配置されているオブジェクトは1つ
13
コンポーネントは2つのみ
PlaymakerFSM + シーケンスマネージャ
シーンの種類
シーン入れ替え方式でのシーンは2種類
メインシーケンス
ゲーム全体の画面遷移を管理するシーン(FSM)
ゲーム起動時から終了までずっと生きている
シーンシーケンス
各画面用のシーン(FSM)
画面遷移で入れ替えられ、破棄されていく
14
シーンの親子関係
15
メインシーケンス
シ
ー
ン
シ
ー
ケ
ン
ス
シ
ー
ン
シ
ー
ケ
ン
ス
シ
ー
ン
シ
ー
ケ
ン
ス
シ
ー
ン
シ
ー
ケ
ン
ス
シ
ー
ン
シ
ー
ケ
ン
ス
シ
ー
ン
シ
ー
ケ
ン
ス
シ
ー
ン
シ
ー
ケ
ン
ス
シーンの親子関係
16
startup
home
menu
party
adventureLog
battle
pictureBook
option
Playmakerを使ったステート管理
Playmakerはグラフィカルなステートマシンとしてだけ利用
アクションはシーケンスマネージャを呼ぶCallMethodだけ
ただし、一部の処理はカスタムアクション化している
17
メインシーケンス シーンシーケンス
ステートの色
18
黒:基本
赤:シーン遷移
橙:通信待ち
紫:チュートリアル
緑:ユーザー操作待ち
ステートの配置
19
上から下へ、左から右へ
1画面に収める
処理のかたまりを意識する
各ステートで行うこと
シーケンスマネージャに用意したメソッドを
CallMethodを使って呼ぶ
シーケンスマネージャにはFsm~~~という名前で
Playmakerのステートから呼ばれるメソッドを用意
FsmGetHome()、FsmMakeUi()、FsmShowHelp…
各Fsmメソッド内でPlaymakerのイベントを呼び
ステートの遷移を行う
明示的に呼ばない場合はFINISHEDが自動的に発生
20
各ステートで行うこと
21
ステートで行うこと
22
①make ui に到達
②FsmMakeUiAdventureLog
を実行
③UiAdventureLog.Create()
でプレハブをインスタンス化
次のステートへ
目的
画面遷移
UI構築ルール
作業フロー
おまけ
23
UIプレハブという概念
ホーム画面ならUIHomeプレハブ
オプション画面ならUIOptionプレハブ
メニュー画面ならUIMenuプレハブ
といった形で各画面(シーン)用にプレハブを用意
プレハブにはそのプレハブ専用のクラスを用意
ホーム画面ならUIHomeクラス
UIHome.Create()でプレハブを生成、画面に配置。
1シーン、1プレハブ、1画面が基本
24
25
ホーム
もどる ヘルプ
クエスト
パーティ
ずかん
オプション
メニュー 設定
例えばこんな画面(メニュー)
26
例えばこんな画面(メニュー)
ホーム
もどる ヘルプ
クエスト
パーティ
ずかん
オプション
メニュー 設定
UIHeader
UIFooter
UIMenu
27
UIMenuプレハブの構成
28
ホーム
もどる ヘルプ
道具
メニュー 設定
例えばこんな画面(リスト)
武器 防具
こんぼう
ナイフ
かしのつえ
AK-47
はがねのつるぎ
てつのオノ
29
ホーム
もどる ヘルプ
道具
メニュー 設定
例えばこんな画面(リスト)
武器 防具
こんぼう
ナイフ
かしのつえ
AK-47
はがねのつるぎ
てつのオノ
UIHeader
UIFooter
UIItemList
30
ホーム
もどる ヘルプ
道具
メニュー 設定
親子関係を意識して分割
武器 防具
こんぼう
ナイフ
かしのつえ
AK-47
はがねのつるぎ
てつのオノ
31
UIItemListプレハブの構成
画面内での処理のながれ
イベントは親へ
指示は子へ
32
画面内での処理のながれ
TabAはUITabAreaへイベントを発行する
↓(親へ)
UITabAreaは受けたイベントをUIItemListへ渡す
↓(親へ)
UIItemListは受けたイベントを判断
UITabArea、UIContentsAreaへと指示
↓
↓(子へ)
↓
UITabAreaの各Tabの色が変わる。
UIContentAreaのScrollViewの内容が更新される。
33
目的
画面遷移
UI構築ルール
作業フロー
おまけ
34
仕様作成から実装までのフロー
35
仕様書作成
仕様確認
UIプレハブ作成
スクリプト開発
UIプレハブ修正
FSM開発
企画
デザイナ
エンジニア
エンジニア
エンジニア
全員
UIプレハブはデザイナさんが作る
デザイナさん専用の
UIプレハブを作成するためのシーン
UIEditorTemp
UIMenuEditor
UIHomeEditor
UIPartyEditor
などなど
36
デザイナ用ブランチ
ブランチの切り方
37
エンジニア用ブランチ
develop
マージ
マージ
目的
画面遷移
UI構築ルール
作業フロー
おまけ
38
通信とエラー処理
APIのレスポンスのコードを独自に指定している。
500(通信エラー)
490(アプリ更新要求) 491(リソース更新要求)
407(アカウントバン) 405(サーバータイムアウト)
403(メンテナンス中)
200(正常)201(準正常)
200、201はAPIをコールしたシーケンスで受け取る。
それ以外は、メインシーケンスが受け取る。
39
通信とエラー処理
40
正常、準正常とは
APIごとに、200、201を規定している。
201がないAPIもある。
例えばgetOtherPlayerProfileというAPIがあるとして
200(正常):対象プレイヤーが存在するとき
レスポンス:他プレイヤーのプロフィール
201(準正常):対象プレイヤーが存在しないとき
レスポンス:エラーメッセージ
41
正常、準正常とは
200のレスポンスは各APIで違う
201のレスポンスは各APIで共通(エラーメッセージのみ)
201が発生する条件は各APIで違う
201発生後の挙動は各シーンシーケンスが自由に行える
500、40x系はメインシーケンスが処理するので
シーンシーケンス側では触れない
42

More Related Content

What's hot

What's hot (20)

はじめてのUniRx
はじめてのUniRxはじめてのUniRx
はじめてのUniRx
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
 
Unityアニメーションシステムの 今と未来の話
Unityアニメーションシステムの 今と未来の話Unityアニメーションシステムの 今と未来の話
Unityアニメーションシステムの 今と未来の話
 
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
「宴」実装時に得られたUnityプログラムノウハウ
「宴」実装時に得られたUnityプログラムノウハウ「宴」実装時に得られたUnityプログラムノウハウ
「宴」実装時に得られたUnityプログラムノウハウ
 
初心者がEQSやってみた
初心者がEQSやってみた初心者がEQSやってみた
初心者がEQSやってみた
 
Node canvasで作るプロトタイプ
Node canvasで作るプロトタイプNode canvasで作るプロトタイプ
Node canvasで作るプロトタイプ
 
UE4とUnrealC++について
UE4とUnrealC++についてUE4とUnrealC++について
UE4とUnrealC++について
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
 
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow) UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解した
 
Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。Editor Utility Widgetで色々便利にしてみた。
Editor Utility Widgetで色々便利にしてみた。
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 

Viewers also liked

Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化
Katsutoshi Makino
 
Extending the Unity Editor Extended
Extending the Unity Editor ExtendedExtending the Unity Editor Extended
Extending the Unity Editor Extended
Masamitsu Ishikawa
 
知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編
Shota Baba
 
Unity エディタ拡張
Unity エディタ拡張Unity エディタ拡張
Unity エディタ拡張
Shota Baba
 

Viewers also liked (10)

負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
大規模負荷試験時にやったこと
大規模負荷試験時にやったこと大規模負荷試験時にやったこと
大規模負荷試験時にやったこと
 
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出
「ユニティちゃんを踊らせよう!」モーションキャプチャーデータのアニメーション演出
 
実行時のために最適なデータ構造を作成しよう
実行時のために最適なデータ構造を作成しよう実行時のために最適なデータ構造を作成しよう
実行時のために最適なデータ構造を作成しよう
 
BRDF レンダリングの方程式
BRDF レンダリングの方程式BRDF レンダリングの方程式
BRDF レンダリングの方程式
 
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化
 
Extending the Unity Editor Extended
Extending the Unity Editor ExtendedExtending the Unity Editor Extended
Extending the Unity Editor Extended
 
Unityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknightsUnityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknights
 
知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編知って得するUnity エディタ拡張編
知って得するUnity エディタ拡張編
 
Unity エディタ拡張
Unity エディタ拡張Unity エディタ拡張
Unity エディタ拡張
 

Similar to うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移

ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
Tak Inamori
 
Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)
Yoshiki Ushida
 
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
Kentaro Matsumae
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
Yohei Oda
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
Yoichiro Sakurai
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
Atsushi Harada
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublished
Yoichiro Sakurai
 

Similar to うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移 (20)

ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
Web制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテストWeb制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテスト
 
Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)
 
最近の実装方針について
最近の実装方針について最近の実装方針について
最近の実装方針について
 
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
 
01 idea table3.0
01 idea table3.001 idea table3.0
01 idea table3.0
 
HTML5の今とこれから
HTML5の今とこれからHTML5の今とこれから
HTML5の今とこれから
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
 
知識ゼロからモバイルアプリをデザインして失敗した話
知識ゼロからモバイルアプリをデザインして失敗した話知識ゼロからモバイルアプリをデザインして失敗した話
知識ゼロからモバイルアプリをデザインして失敗した話
 
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConView
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
 
Web開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor AppWeb開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor App
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座
 
SketchがAndroidのUIデザインに向いているワケ
SketchがAndroidのUIデザインに向いているワケSketchがAndroidのUIデザインに向いているワケ
SketchがAndroidのUIデザインに向いているワケ
 
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
 
Pokelabo android web
Pokelabo android webPokelabo android web
Pokelabo android web
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
 
20120316 designerworkshoppublished
20120316 designerworkshoppublished20120316 designerworkshoppublished
20120316 designerworkshoppublished
 
マルチデバイスに対応するためのAuto layout
マルチデバイスに対応するためのAuto layoutマルチデバイスに対応するためのAuto layout
マルチデバイスに対応するためのAuto layout
 

Recently uploaded

Recently uploaded (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移