mobius mevius final fantasy -...
TRANSCRIPT
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
株式会社スクウェア・エニックス
第1ビジネス・ディビジョン
リードプログラマー 浜口 直樹
MEVIUS FINAL FANTASY
におけるUnity開発事例
MOBIUS
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
MOBIUS FINAL FANTASYとは?
スマフォで動くHDクオリティゲームの驚きを、より多くの人に体感して欲しい。
-プロデューサー北瀬佳範のコメント-
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
モバイル端末でHDクオリティを実現するには?
ナンバリングタイトルを手がけてきたスタッフ陣が開発 © 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
MOBIUS FINAL FANTASYが目指すもの
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
今日の本題
1.大規模開発でUnityを使うときの心得
2.モバイル端末でHDクオリティの
ゲーム制作をするための心得
01/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
大規模開発でUnityを使うときの心得
小規模開発と大規模開発で根本的に違う
ことって分かりますか?
同じファイルを同時に触る人が増える
02/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
具体例 複数人が編集するデータ
アニメーションに付加されるタイムラインの例
攻撃-モーション
120フレーム
ヒット判定
ジャンプSE
トリガー
残光のトリガー
次のモーションへの補間設定
モーションセクション
プランナー
サウンドセクション
エフェクトセクション
03/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
Unityは複数人で同時にデータ編集するのが苦手
Hierarchyで編集する*.scene,*.prefabを
同時に複数の人が変更できますか?
HierarchyやInspectorでは
同時に編集できない
04/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
Unityで複数人で同時にデータ編集するための工夫
attack.prefab
Hierarchyでprefabを複製せずに、Inspectorでアセットとして依存関係を構築することができる
05/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
PrefabResourceComponent
motion.prefab
plan.prefab
sound.prefab
|
|------motion.prefab //モーションセクションが編集
|------plan.prefab //プランナーが編集
|------sound.prefab //サウンドセクションが編集
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
依存関係が定義されたprefabはHookサーバーが更新する
バージョン管理ツール
モーション
プランナー
エフェクト
サウンド
effect.prefab
motion.prefab
sound.prefab
plan.prefab
commit
コミットHook
サーバー
Commitを検知して
Hookサーバーが
attak.prefabを更新
最新の依存関係が
更新されたattack.prefab
をコミット
※unityでのファイルの依存関係は
.metaに記載されているguidによって構築されているので、
UnityEditorを使用しなくても、自作のプログラムから
比較的容易にprefabを作り出すことができる。
06/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
Assetとして依存関係を設定するとHierarchyでの視認性が落ちる
attack.prefab内に
複製した場合
▼attack
effect
motion
sound
plan
attack
attack.prefab
アセットして依存関係を持った場合
07/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
Inspectorでは確認できるが…
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
結局・・・ツール作りました。 08/11
各担当のprefabの内容を
一覧で確認できる方が、
圧倒的に作業が効率が良いため
hierarchyやInspectorでは
編集をあきらめて
専用のタイムラインツールを開発
C#のdllから
UnityEditorを参照設定して、
UnityEditor. AssetDatabase
を使って、
アセットファイルの読み込み
書き出しを行う。 ※C#のguiを組み込むのは至難…
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
MOBIUSの開発環境
Maya,SI,MotionBuilder
.asset タイムラインツール
09/10
DCCツール
GUIツール
エフェクトツール
.prefab
.prefab
.prefab .fbx
揺れもの物理&IKの設定ツール
.bytes
エクセルコンバーター
.asset
.cs
Xlsの情報を記載した.asset
とアクセス用のclassを出力
.bytes
サウンドツール
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
MOBIUSのデータ確認フロー
*.prefab
*.asset
*.bytes
*.cs graphicリソース
バージョン管理ツール
Windows®64bit
Commit Hookサーバー
依存関係のあるファイルが
コミットされたら
依存関係が定義された
prefabやassetを更新する
アセットバンドルビルドサーバー
コンソールモードでUnityEditorを起動
MOBIUS規模のデータで3時間程度かかります。
定期的にリソースデータを集めて、
アセットバンドルを自動作成してくれる。
ゲームサーバー
アセットバンドルが出来上がると、
ゲームサーバー側のストレージにアップ
Android™&iOS
データをダウンロードして
ゲームを開始
10/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
今日の本題
1.大規模開発でUnityを使うときの心得
2.モバイル端末でHDクオリティの
ゲーム制作をするための心得
01/10
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
Unityって遅いっていわれるけど?
Unityが遅いというかC#の特性を知る必要がある。 ※Mono2.0なので要注意。
1. structはスタックに確保されるが、classはヒープなのでgcの頻度を上げる
2. 文字列操作は気をつけて, classやenum のtoString()は遅い。
3. foreachを使うとEnumrableがヒープ確保されるのでこれもgcの頻度を上げる
4. Vector演算を真面目にやるとかなりきつい・・・
02/10
最適化をしたい場所はnative化を検討すること。(MOBIUSではIkや揺れもの物理はnativeで実装)
1.Assets/Plugin にdllを置いて簡単にnative呼び出しができる #elif UNITY_ANDROID
[DllImport("libNativePlugin")]
private static extern void updatePhysicsBone(IntPtr data, float delta);
#elif UNITY_IPHONE
[DllImport("__Internal")]
private static extern void updatePhysicsBone(IntPtr data, float delta);
#endif
2.nativeとmanaged間でのデータの受け渡し
Marshal.AllocHGlobal(size);
C#はコーディングしやすいし適材適所を考えれば効率の良い開発ができると思う。
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
まずは敵を知るところから始めよう
Android™端末の上位モデルが2GB~3GBのメモリを搭載しているのに対して、
iPhone®端末の上位モデルは1GBです。
メモリ管理の仕組みがAndroid™とiPhone®で全く異なっており、
Android™はアプリがJavaで動いてるためにガベージコレクションが発生してしまうため、
ガベージコレクションを防ぐために多めにメモリを確保しておくと一般的には言われているが…
UnityはMonoで動いているためiOSでもガベコレに悩まされる…。
同スペックの端末でもiOSの方がAndroid™に比べ性能が出やすいため、
両OSに対応するアプリの場合はAndroid™先行で開発する方が失敗が少ない。
03/10
iOS
iPod touch® 5 323MB
Android™
adreno 220 543MB
iPhone® 4s 325MB adreno 225 410MB
iPhone® 5 626MB adreno 320 1059MB
iPhone® 5s 468MB adreno 330 1150MB
iPad® 第3世代 637MB mali 450 800MB
iPad® 第4世代 637MB mali T604 831MB
iPad Air® (第5世代) 450MB tegra 3 491MB
iPad mini™ 418MB tegra 4 1194MB
※あくまで計測値
iOS : 350MB~600MB
Android™: 400MB~1100MB
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
意外と知らないアプリが使えるメモリ量
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
次にダウンロードサイズは注意しよう 04/10
最近のコンソールのFFタイトルのパッケージサイズ
FFXV 体験版 5GB LRFF 製品10GB
MOBIUS FINAL FANTASYのダウンロードサイズ
iOS Android™
パッケージサイズ 70MB(32bit,64bitのuniversal) 40MB
初回起動のDLサイズ
標準 350MB 500MB
高画質 700MB 1G
※品質はユーザーが選択可能
※開発途中の情報のため、製品では変更される場合があります。
データ量を減らすため
圧縮版のAssetBundleを使用しています。
キャリアとのパケット通信の速度制限があるため、
モバイル端末でのダウンロードサイズは意識する必要がある。
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
テクスチャ形式によってデータサイズは影響する 05/10
iOS Android™
不透明テクスチャ RGB PVRTC 4bit RGB ETC 4bit
半透明テクスチャ RGBA PVRTC 4bit RGBA ETC2 8bit
※一部ETC2の圧縮テクスチャをサポートしないGPUもあります。
アルファ付きテクスチャの場合どのGPUでも使えるように
RGBA16bitデータをもつ開発も多いと聞きます。
2048x2048 半透明テクスチャ
RGBA PVRTC 4bit = 2048x2048x4bit = 約2MB (mipmap含めると 約2.6MB)
RGBA ETC2 8bit = 2048x2048x8bit = 約4MB (mipmap含めると 約5.2MB)
RGBA 16bit = 2048x2048x16bit = 約8MB (mipmap含めると 約10.4MB)
RGBA 32bit = 2048x2048x32bit = 約16MB (mipmap含めると 約20.8MB)
※テクスチャフォーマットによってサイズは大きく異なってきます。
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
それぞれのGPUに最適なテクスチャ形式を選ぶ 06/10
不透明テクスチャ 半透明テクスチャ
PowerVR(主にIOS端末で使われている,vita) RGB PVRTC 4bit RGBA PVRTC 4bit
Adreno(QualcommがSnapdragon向けに開発したGPU) RGB ATC 4bit RGBA ATC 8bit ※Snapdragonに使われいてAndroid端末のシェア率が高い
Mali(ARM製のGPU) RGB ETC 4bit RGBA 32bit(解像度半分)
Mali(T624以降※第2世代Mali-T600シリーズ) RGB ASTC 6x6(3.6bpp) RGBA ASTC 4x4(8bpp)
Tegra(Nvidea製のGPU) DXT1(4bpp) DXT5(8bpp)
Unityだと端末情報やGPU情報が取れるので、それによって読み込むデータを切り分けることができる
SystemInfo.deviceModel
UnityEngine.iOS.Device.generation
得意とするテクスチャフォーマットがGPUで異なるため、
GPUごとにテクスチャフォーマットを指定して最終データを用意することで、
データサイズを軽減しつつ画質も劣化しにくい。
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
しかし…デザイナーが管理する画像データは1つにしたい 07/10
GPUごとにテクスチャフォーマットを変えたいけど、
デザイナーがフォーマットごとにデータを用意してほしくはない。
Texture.tga Texture.dds
Texture.atc Texture.pvrtc
Texture.astc
管理が複雑になる・・・
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
Unityで出力用の画像フォーマットを指定できるが… 08/10
現状Unityで対応しているのはプラットフォームに対して指定できるフォーマットは1つ。
・iOSはpvrtcのみでよいので問題ない◎
・Andorid™が複数のフォーマットを出力できないので問題△
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
アセットバンドルビルドサーバー側で対応 09/10
PowerVR
標準
PowerVR
高画質
Adreno
標準
Adreno
高画質
Mali
標準
Mali
高画質
Tegra
標準
Tegra
高画質
Mali第二世代
標準
Mali第二世代
高画質
アセットバンドルビルドサーバー GPUに合わせたアセットバンドルを作成するために、10台以上のアセットバンドルビルドサーバーが最新のデータを適切なテクスチャフォーマットに変更してアセットバンドルを作り続けている。
キャッシュをごまかすテクニック
UnityからUnityEngine.Texture2DのTextureFormatを変更するとキャッシュの
作り直しになってAssetBundleを作るたびにテクスチャのキャッシュが
作られると遅すぎて話にならない。
そこで・・・ Unityを起動してアセットバンドルを作成する
前に、自前で作成したスクリプトなどを走ら
せて、画像ファイルに付随しているmetaの
画像フォーマットを想定のフォーマットに
書き換えてからUnityを起動します。
そうすることで、各ビルドサーバーは最適な
フォーマットのキャッシュファイルが作成され
アセットバンドル作成の高速化になります。
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
ShaderはGPUのバージョンによって変わってくるため、
コンソールの時のように事前にビルドしたデータをassetbundleに含めることができない。
※アプリ実行時にShaderが読み込まれた時にビルドされます。しかも遅いです…
Shaderは必ず一つにパックして初回に初期化 10/10
■シーフ.unity3d -含まれているもの一覧-
shader
texutre
mesh
skeleton
■魔道士. unity3d -含まれているもの一覧-
shader
texutre
mesh
skeleton
shaders
ResidentShaderPack. unity3d
ゲーム中に使用するシェーダを集めたパック
texture
mesh
skeleton
シーフ. unity3d
texture
mesh
skeleton
魔道士. unity3d
参照設定
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
同じシェーダを使っているのであればAssetbundleで参照設定をして、
無駄にシェーダのビルドが走らないように注意しましょう。
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
おまけ ユニティちゃんとコラボします。
コラボ内容はまだ秘密
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.
© 2015 Unity Technologies Japan
COPYRIGHT 2014 @ UNITY TECHNOLOGIES
Text Styles
Use the TAB key to switch
between levels
Level 1 = Bullet 24 pt.
Level 2 = Bullet 24 pt.
Level 3 = Bullet 20 pt.
Level 4 = Bullet 18 pt.
Level 5 = Bullet 16 pt.
To get bullet / plain text
again, use SHIFT + TAB
Alternatively,
Increase and Decrease list
level is used instead
Q&A
なにか質問がありましたら。
© 2015 SQUARE ENIX CO.,LTD. All Rights Reserved.