kotlinことはじめ
kotlinでアプリを書き出すようになったので、勉強がてらメモ。
static method
基本staticは無いらしい。class objectで記述するみたい。
いつものアレをconvertしたらこうなった
public class SomeFragment : Fragment() { companion object { public fun getInstance(): Fragment { return Fragment() } } }
val var
swiftのletにvalが相当する。変更不可能な値。 varは変更可能な値。
getBytes()
Stringに生えているgetBytes()はdeprecatedになっていた。 代わりにtoByteArray()をつかえとのこと
ByteArray
Basic types - Kotlin - Confluence
Arrayで配列を表現するみたい。 primitive型も対応する型が用意されているみたい。
Test
src/test/kotlin/PKG/HogeTest.kt
package hoge import kotlin.test.assertTrue import org.junit.Test public class HogeTest { Test fun hoge() { assertTrue(true) } }
Annotationは@を外してつかうっぽい
butterknife
kotterknifeがあるっぽい
repositories { maven { url "https://oss.sonatype.org/content/repositories/snapshots" } } dependencies { compile 'com.jakewharton:kotterknife:0.1.0-SNAPSHOT' }
import butterknife.bindView public class MapFragment : Fragment() { val mMapView: MapView by bindView(R.id.map) }
Parameter specified as non-null is null
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
というエラーがちょくちょく発生する。コレはoverrideしたjavaの関数にて、optionalを気にせずoverrideしてると呼び出し元の関数からnullが渡ってきてエラーが起きる。 java関数をoverride するときには、optionalかどうかを厳密に考えよう・・・。
traitはdeprecated
かわりにinterfaceをつかう。
data class
data public class Hoge(val name: String, val createdAt: String)
みたいな感じでデータ宣言できる。
Signleton
object Singleton { fun hello() { println("Hello") } }
object declarationで簡単にかけるっぽい。
Game Graphics Groove #3 いってきたメモ
『パズクエにおけるUXテストとその結果&対応』
- 細川奈々恵
UX Testの実施について
- 9回くらいリリースまでに実施している
3つ決める
- テスト目的 : 理解できるか?面白いか? 操作しやすいか?
- テストスコープ: 初回起動、プレイ時間
- 被験者要件: 誰にやってもらうか?
社内UXテストで観察した例
- バトル画面 / フィーバー画面にすんなり入れるか?
- 非開発系の部署 3人 (1人課金層, 2人無課金層)
- ダメポイントがたくさんあった
発生頻度高い&重要
- 召喚方法、フィーバータイムの条件、..
- 負けた理由がわからない
観察
- 敗北して初めてルールを考えだす
- 負けたときにやり方を教えるのが有効っぽい
チュートリアルの分割
- 必要なときに必要な要素を表示する
- 敵の弱点など考えなくても進めてられるように
まとめ
- testerは少なくてもいい
- test目的が大事
ちょっと早口でわかりずらかったかも...
『Spineメッシュアニメーション応用編』
- 二宮大輔
Spine
- Cocos2d / Unityに対応してる Boneアニメーションツール
- Meshアニメーションもできる
- 動作が意外に軽い
不満点
- パースごとのループができない
- マスクが未対応
- Scriptが打てない
うねる柔らかさ
- Meshいいかんじだ
- 先端から末端に伝わるときに遅延させるとよい
3Dっぽいこと
- 3dの各頂点に対応するMeshポイントを中につくる.
- 鍵マークをつけると移動できる
丸くても揺れるよ
まとめ
- 柔らかさの表現できるよ
- 3Dの表現も出来るよ
- Live2Dを越える表現も
『ハコスコとUIとご飯』
- 鈴木 匠太
- 矢羽田 和徳
VR市場は1500億ドル?
バーチャルボーイうれなかった
- ハードウェア価格高い
- 一人でしか遊べなかった
- コンテンツでない
VRの問題..
- エロで攻めすぎ
ハコスコのいいところ
- 安い
- ケーブル不要でどこでも
- いろんなスマホサイズに対応
- デザイン自由。ファッションにできる
- 開発難易度が下がった VRはUnityで開発できる
- ARも可能
- 普及している
未来
- 女子高生 「今日スコッとく?」
個人的にはCardboard派だ...
操作
- 首振る
- 視点移動
- 上下にふることで歩く操作
- ponと叩いて写真を撮る
- Vufolia SDKでARで撫でる、触る
新しい操作方法が必要
- チャンスかも知れない
SPAJAM
- 寂しい食卓: 幻想飯
- ご飯を容易
- ARカード (和、洋、中、...)
- ちゃんと画面が曇る、かなり豪華感ある演出
- みんなVR発表してた。EpicはLoad of the Ringとか?
- 期待感ある
『乖離したことから始まった、本質への回帰』
- 窪 洋一
パネルディスカッション
UIデザイナについて
- アニメーションはあんまりつくってない.
- 内製のエフェクトツール使うことが多い.
企画ってどうやって決めてる?
- 企画コンペやってるよ. 出した人がオーナーになる (クロスサマナー)
- プロデューサーが何つくろっかーって決める
- IPものは天上人が多い
クリエイティブ周りの決定権、誰が持っている?
- プロデューサー.
- ...
作りたいもの作れてる?
- motionがきれいな格闘ゲームつくりたい
テストから見えてくるGoogleのソフトウェア開発
読了したのでFBした。
久々のプレゼン資料、作成がつらい。。 3ヶ月くらいダラダラと発表を避けてきたけど、なんとか形にできてよかったー。
本の感想
本の内容は面白かった。 のだけれど図とか絵がもっとあってもいいのになーとところどころ思う。(活字疲労が・・ インタビューやらテストエンジニアの職種の内容が本の中ではメインコンテンツになっいるんだけど、 退屈だったのでFBの資料からはバッサリ省きました。 それでも話し足りない量の内容がつまっているので、気になったらぜひ買って読んでみるのが良いと思います。
最後に。 本のプレゼントしてくれた @masasuzu さん、ありがとうございます!
CAOS 2015 Summer メモ
CAOS 2015 Summer 〜開発効率のツール開発とオープンソース活動〜 のめも
Webponizeの紹介
Author
- @1000ch
WebP
webpに変換してくれるくんをつくったよ
STF
Smartphone Test Farm
- https://openstf.github.io/
- mac からadb でつないでサーバー上からリモートに端末を操作できるくん
詳細
- c/c++で非公開APIをつかってSocket通信している
- framebufferを使っている。(いろいろ問題あり)
- まともにやると0.5fpsしかでない
- screenrecordのbackend apiは4.2から
- minicapをAOSPから取ってきてビルド、全ターゲットで動くようにsharedlibrary作る
- 2.3 - 4.1 : ComposerService::getComposerService()->captureScreen()
- 4.2 - : SufaceComposerClient::createDisplay()
- jpgでencodeしてclientに送信してる
- 170 device / 3 device segmentation fault => メーカが非公開APIをカスタマイズしてるから
- 40fpsくらいはでる
- x264 をつかってhardware encodeすればもっとパフォーマンスでる
管理者モード
- 上上下下右左右左EnterEnterで管理者になれる
duck
グルーピングしてリアルタイム通信したい & platform化したい
運用
- 2ヶ月前から運用してる
- 2game
- c4.2xlarge x 3 instance on AWS
- 今同時接続2000人くらい
- 1.2 billion message / month
- まだ数すくない
TBC
- githubには公開予定
ImageHayabusa
psd をおいたまま配信できるサービス
- http://hayabusa.io/
- 作業時間: 1day -> 30minに
- workflowが早くなる
- デザインの確認すぐできる
input
- psd, ai, png
output
初期リクエストで変換 -> そのあとキャッシュされる
- urlはデフォルトパラメータが設定されてる
- 差分情報のみurlに反映する
食戟のソーマのレシピ再現がんばった 04-06
最近料理のレパートリーが広がらず悩んでいる。 やっぱり意識的に新しい料理にチャレンジしていかないと・・・! というわけで今季は食戟のソーマの料理を頑張った。
アリスのミルクセーキ pic.twitter.com/DgtxFgocEY
— めしてろ (@mustankatti) 2015, 6月 23
女王のエッグベネディクト? pic.twitter.com/mXleeFyauS
— めしてろ (@mustankatti) 2015, 6月 14
リンゴ粥リゾット、ビシソワーズ pic.twitter.com/pvMMeePGdy
— めしてろ (@mustankatti) 2015, 6月 13
昔ながらのナポリタン、じゃがいものポタージュ pic.twitter.com/5x62Xjx6dd
— めしてろ (@mustankatti) 2015, 6月 8
昔ながらのナポリタン、サーモンのカルパッチョ~梅バルサミコソース pic.twitter.com/dE8aAOp6BU
— めしてろ (@mustankatti) 2015, 6月 6
シューファルシ pic.twitter.com/fDKkj58JfA
— めしてろ (@mustankatti) 2015, 6月 1
インサラータ・フリッタータ pic.twitter.com/I0wUdXCngP
— めしてろ (@mustankatti) 2015, 5月 27
インサラータ.フリッタータ pic.twitter.com/igTLryuUur
— めしてろ (@mustankatti) 2015, 5月 26
お柿揚げ pic.twitter.com/G5g8SNc4Gu
— めしてろ (@mustankatti) 2015, 5月 20
銀ダラとホタテのおかき揚げ pic.twitter.com/6uvZWIN2sM
— めしてろ (@mustankatti) 2015, 5月 19
田所特製3種のおにぎり pic.twitter.com/UlrxXPKhK9
— めしてろ (@mustankatti) 2015, 5月 11
鶏もも肉の香り焼き〜緑のソースを添えて〜、トマト味噌汁 pic.twitter.com/6B5K38mgGG
— めしてろ (@mustankatti) 2015, 5月 10
化けるふりかけご飯 pic.twitter.com/9WYa1vgfxT
— めしてろ (@mustankatti) 2015, 5月 7
スフレオムレツ pic.twitter.com/gRfK2kWeEh
— めしてろ (@mustankatti) 2015, 5月 4
シャリアピン丼 pic.twitter.com/jErntMNmGe
— めしてろ (@mustankatti) 2015, 5月 4
鯖バーグ pic.twitter.com/A3SBUzX9ng
— めしてろ (@mustankatti) 2015, 4月 22
さわら🍙茶漬け、焼き茄子 pic.twitter.com/W4pexLd3dV
— めしてろ (@mustankatti) 2015, 4月 20
さわらの山椒焼き春キャベツのピューレ添え、ポトフ pic.twitter.com/naQJNmIAYb
— めしてろ (@mustankatti) 2015, 4月 19
なんちゃってローストポーク。オーブントースター入れすぎた感 pic.twitter.com/KHPP6ceojU
— めしてろ (@mustankatti) 2015, 4月 18
以上16品。1-3刊は制覇。あとは難しい料理をおいてまちまちという感じ。
振りかえり
16品なので毎週何かは作れていたかなという感じ。 かなり見た目が下手くそなのもあるが(ローストポーク、ベネディクト...)、ひと通りレシピ試せたのは楽しかった。
美味しさの順で言うと、
- シャリアピンステーキ
- さわらの山椒焼き春キャベツのピューレ添え
- 田所特製3種のおにぎり
シャリアピンステーキの梅醤ごはんはうまいので超おすすめ。 さわらの山椒焼きはどくどくの風味が出て美味しかった。 田所ちゃんのおにぎりは、豚肉のにんにくはちみつ味噌漬けがご飯のススム美味しさだった。
難しさの順で言うと
シューファルシは茹で過ぎ中が硬くなって肉々しくなってしまうので、レギュムの魔術師感を出すには調理時間をきちんと守ったり、🍖詰め過ぎないようにしたり、キャベツを甘みの出る品種にしてみるとかちょっと工夫しないとダメかも。
エッグベネディクトは1人前でケチってオーランドソースを少なくしたり、湯煎しすぎたりすると失敗する。あと新鮮な玉子で水溶性卵白を少なめにしないとポーチドエッグがうまくできないかも。
ローストポークはベーコンをケチったり、焼き過ぎたりしちゃダメ。 思ったよりエリンギでカサが増すので分量注意が必要。
暗殺教室の122話の図形
Unite 2015 Day2 めも
Session1: Autodesk Session & Workshop
建築用のデータ (BIM) -> ゲーム用のデータ (FBX)
階層で分ける
- みえるところ
- 床、地面など
ゲームに特化する
- 建築は厚みがあるが、ゲームでは板ポリでよいものがおおい
- 底の厚さを削除. ある程度の粒度でまとめてしまう
- 階段一枚の板ポリにする
UV
- 必要ならMayaでUVつくる
- 気軽に取り組めばよい
Material
- Mayaで管理しやすいように色分けする. データを作り分ける
- 要素ごとの色分け. 壁、床、エレベータ、・・・
Data Conversion
- REVit ARCHITECTURE -(fbx)-> Maya -(fbx)-> Unity
Unityでの配置
- Texture / Materialの設定
- 2pattern: 一つ一つ作って配置? Mayaで全部作って1ファイルで持ってくる?
- ひとつひとつ配置すると結構大変. ある程度壁をまとめるとよい
Lighting
- Unityの中でbakeしている
重要な点
- BIMデータはリッチだが、ゲームには大げさ.
- 小さくデフォルメするのが良い
- あくまでテンプレート程度に考える
Session2: Unityのシーンを紐とき把握するには?
山村
- Unity Field Engineer
- 技術的な相談
今回の話
- プロジェクトをさくっと読む方法 => 再利用性を高く
- サンプルシーンの解析
- コード書くの面倒
- 昔作ったプロジェクトが読めない
- もっと楽に解析できれば...
Unityの構造
- Project > Scene > Object > Component > Assets
コンポーネントはコールバック
- Start / Update / FixedUpdate / OnCollisionEnter2D ...
- 基本コールバックから始まる
GameObject間では参照が必要
- GetCompoentns / AddCompoennt /..
生成ルール
- Object: Instantiate / New GameObject..
- Resource: Resources / AssetBundle / AddComponent / Prefabs...
どのコンポーネントがいつ動くのか?
- ランタイムで減ったり増えたりする
- OnCollider / SendMessage / ...
Compoennt List => Callback List
- 実行時にEditor拡張で設定
- 無理. すべてのリストを列挙すれば参照元がわかる
参照先の座標の確認
- 矢印を貼るとわかりやすい
- 参照. 被参照. Editor上にを引く
- 閉じたら線を表示しないなどで参照数を減らす
参照関係のないオブジェクト
- 自己完結型.
- 砂漠から砂を拾うような感じになる
- それ以外をHierarchyに表示するようにすればスッキリ
コンポーネントの依存関係
グラフ化
Model
- Component間の参照とは別に、なんかのクラスがあるとき => GameManager的なゲームの進行管理に使われているかも
Manager系のObject
- Singleton
- 役割は様々
- 何かイベントを食らったら操作を行う系がおおい
ギミック系オブジェクト
- 自己完結型のオブジェクト
- ステージ作る系のギミックとか
Updateで頑張るドン
- Updateやコルーチンで自発的に動く
そのObjectはどうやって参照された?
参照先の状態を知る
- 「誰をみる」ではなく「どうやって見るかる」なので。
参照関係を把握する
- 自分で動かす or 管理される
- 動き出すと参照がつくのがある
検索パターン
- FindWithTagで検索される
- Uniqueなタグを保つ場合FindWithTagで検索される
対マネージャー (シングルトン)
なぜ参照を保つ必要がある?
- キャッシュ
- 位置を知る
- ...
そのオブジェクトはどっから持ってきたのか?
生成コードの検索
- シーン内に最初から配置?
- Instantiateで検索? ObjectPpoolで検索?
該当のPrefabをもつシーンを探す
- Reference Viewer (Unite2014) anchan828/unitejapan2014/tree/master/ReferenceViewer
- LoadLevelAdaptiveの場合、ロードするシーンを探す
- SerializedObject <=> YAML / 検索
- Smart Marge : シーンやプレハブをマージ可能に
近いうちに公開する予定
- 5分くらいでガガッと把握できるように
Session3: エディター拡張マニアックス 2015
- 安藤圭吾
- Field Engineer
- Unity部 もくもく会
- SlackにUnityコミュニティつくった
Unity 5.1ベースの話
- 資料は後日Uniteページに公開
- ソースも公開予定
- Animation Data Auto Generationについて話す
- Sprite Animationを題材
Sprite Animationの作成
- プロジェクトview -> Scene ViewにDrag&Drop. AnimationClip & AnimationController生成
- Animation WindowでCreate New Clipでやる
- 選択 Create -> Animationでアニメーションクリップが生成される
- Inspectorを Debugモードにすると下の方に配列でSpriteが表示される
- でも画像で見たい
CustomPreviewを使って実装するといい?
- defaultは変更できない.. ? => 変更可
- AssetPreview.GetAssetPreview(target) -> sprite -> textureを取得
- custom previewにはtextureは表示できない
Sprite Animationをスクリプトで作成する
ObjectReferenceKeyFrame
- keyframeのobject版
- floatの代わりにObjectを設定可能
EditorCurveBinding
- ...
Property名を知るには?
- component -> SerializedObjectに変換
- property取得
- デバックログで吐く
- YAMLじゃなくてもSerialized Objectを直接触ればいける
- 手段としてYAMLを直接いじるのはあり
Animator Override Controller
- Spriteだけ変更
- Animationは同じ
GetComponent<Animator>().runtimeAnimatorController = overrideController;
複数のAnimatorOverride Controllerを作成するなら
- ScriptableWizardで作成する
ReorderbleList
UnityEditorInternalだけど使えばいい
EditorのLifeCyble
- EditorApplication.update
- Package Import
- Update Window
- Update Inspector
- EditorApplication.delayCall
都合がわるくなったとき
- EditorApplication.delayCall += () => {}
Unity5の新機能
- InitializeOnLoadMethod
- UnityEditor.Menuの追加
- UnityEngine.HelpURLAttribute
[HelpURL("http://...")] public class Example: {}
GUI.Scope
- Scopeの作成が楽に
using (new BackgroundColorScope(Color.yellow)) { GUILayout.Button("") }
SceneViewクラス
- Editor.OnSceneではなく、GlobalなonSceneGUIDelegateがある
ProjectWindowUtil.CreateAssetは覚えておくと良い
- project treeのアイテムを作成できる
ActiveEditorTrackerクラス UnityStatsクラス ComponentUtilityクラス
- componentコピーが行える
Unity上でTwitterが見たい
- reflectionを利用して、publicクラスじゃないものを使う
- UnityEditor.Webview...
アセンブリブラウザでみる
- EditorGUIの中身がみれる
- ScriptableObject / Window.GUIの中身は必見
Session4: MOBIUS FF における Unity開発事例
- はまぐち
- りーどぷろぐらま
コンセプト
- スマフォで動くHDクオリティのゲームの驚きを、より多くの人に
ナンバリングタイトルを手がけてきたスタッフ陣が作成!!
- ほんき
- もぐ: 久野美咲
- 北瀬
Theme
- リッチなクオリティをスマホでやるには?
- 大規模開発でのUnityの注意点
- HDクオリティのゲーム制作をする心得
大規模開発での心得
基本
- 同じファイルを同時に触る人が増える
複数人のデータ編集のイメージ
Hierarchyで編集する.scene, .prefabを同時に編集できるか?
- ここが一番のネックだった
- Unityはこれが非常に苦手
Hierarchyで依存関係を作らない
attack.prefab |- motion.prefab |- plan.prefab |- sound.prefab
基本:
- 一つのアセットとしてattachを設定する
- Hierarchy上で依存をつくらず、Inspectorで設定
- コミットを検知してCommitHookサーバーが最新の依存関係をattack.prefabに更新してcommit
- NOTE: 依存関係は .metaに記載されているguidによって構築されるので
視認性が落ちる
MOBIUSの開発環境
- Graphics -> Maya -> prefab
- Sound -> soundは自社ツール
- Timeline -> タイムラインツールは自作
- xls -> .asset (yaml) -> unityで取りやすいクラスに吐き出す
- menu -> nGUI
- effect -> ShurikenMaker
データ確認フロー
- AssetBundle Build Server.
- Console ModeでUnityEditorを起動
- 全部のAssetBundleを作成するのに3時間
- ゲームサーバー側のストレージにup
- 3-4時間後に実機で確認できる
モバイルでHDクオリティを作成するための心得
Unityが遅いというかC#の特性を知る必要がある
- strutはstackに確保されるが、classはheapなのでgc頻度上げる
- 文字列層は気をつけて class enumのtoString()はおそい
- foreachを使うとEnumerableがヒープ確保されるので、これもgc頻度を上げる
- Vector演算を真面目にやるとかなりキツイ
特性をしればそんなに遅くならない
- foreachでIEnumerableでallocationしてるとか、
最適化はNative化を検討
- IKや揺れ者の物理はnativeで実装
- Asset/Pluginにdllにおいて簡単にnative呼び出しできる
まずは敵を知るところから
アプリが使えるメモリ量
iOS 350-600MB Android 400-1.1G
Android先行で開発したほうがうまくいく?
DownloadSize
| パッケージサイズ | 70MB(32bit/64bit universal) / 40MB | | 初回起動DLサイズ | SD 350MB / 500MB | HD 700MB / 1G |
- サイズ的に倍くらい違う
Texture
- RGB PVRTC 4bit (iOS)
- RGB ETC 4bit (Android)
- RGBA PVRTC 4bit (iOS)
- RGBA ETC2 8bit (Android)
- specular / diffuse など加えると3倍
それぞれのGPUに最適なテクスチャ形式を
- ほとんどsnapdragon
- GPUごとに得意なフォーマットが違う
- 試み: 端末最適化データ, テクスチャのサイズは落ちるけど、画質は上がる
だがデザイナ管理は1画像データに
AssetBundleBuildServer側で対応
- 10代以上のAssetBundle Build Serverがあるので最適化
- Textureファイルのフォーマットが変更させると. cacheがリセット...
- ビルドが24時間で終らない・・・
- Unity起動前に textureFormat: -1に上書きして起動する
- キャッシュが壊れると1日作業できないとかある・・
Shaderは必ず1つにパックして初回に初期化
- ConsoleGame: Compile済みのshaderを提供できる
- MobileGame: ゲーム起動時にshader compile
- モデル読み込み時に毎度コンパイルされてカクつく
- AssetBundleで参照設定を別にして、毎度buildが走らないようにする
- NOTE: AssetBundle作るときにきちんと定義しないとコピーされて含まれるので注意
おまけ
UnityChanとこらぼする
Session5: 白猫プロジェクトの裏側! - パフォーマンス・チューニングとリアルタイム通信のすべて -
- 池田洋一
- UnityEngineer
白猫
- 3D、4人リアルタイム対戦
開発フロー
- 2-3人
- α 4ヶ月
- β 4ヶ月
- 18人
特徴
- 全社配布 (全員にベータ版)
- 子供レビュー (チュートリアルができてない)
最適化事例
- キャッシュ
- フラグメントシェーダ見直し
- ..
オブジェクトのキャッシュ
- ボトルネックはInstantiate
- ほどんどキャッシュされてなかった
- もっとも不可が高い. hp判定
- Destroyはしない
Audio Clipのキャッシュ
- ボトルネックはLoad
- 必要になった時にキャッシュ (一回でもなればキャッシュが使われる)
- battle内での最適化
Effectのキャッシュ
- 断念. Activeにした時に別座標になる
- 足の砂煙とか
- ParticleSystem以外の制御もあった
GPU Buttoleneck
- マップ画面で処理落ち
- 海のシェーダ FragmentShader
- sinとかFragmentShaderないで使わないでほしい
- vertex shaderに全部移した. 掛け算とかは展開
Shaderの一括変換
- つかってないcolor計算のshaderを一括置換
- PC用の買ってきたshaderを変換
起動時間の高速化
独自のキャッシュシステムを作成
- Caching.readyを待たないで早く起動
- www.LoadFromCacheOrDownloadを使わない
- PlayerPrefsのversion diffをチェック
- 結果: 1分 -> 8秒にios
AssetVersionListの作成
- Path / VersionNumber
- AssetBundle / AssetVersionListを同時にアップ
ファイル読込数の問題
- ロードが早い
- カットシーンで大量のAssetBundleをDLしていた
複数のファイルDL処理の呼び出し
- RequestAssetsCoroutine
読み込み数問題
- 問題点:ちょっと設定値をあげると発現 iOS
- 1ファイルづつcloseしてcompleした
不必要なDLL、コードの削除
- AssetStoreで購入したもののサンプルは完全に削除するか. Editorフォルダ内に入れる
- 1つでもjsがあるとBoo.Lang.dllがリンクされる => 不要なので削除
StrippingLevelの変更
- UnityEngine間で必要なComponentまでStripされた
LinkerSceneを作成
- Stripされすぎるのを防ぐ
- Awakeで削除
AssetBundleのメモリリークの修正
- RC形式を採用
- Release前にDestroyされてしまい, AssetBundleが解放されなかった
Xcodeを使って調査
- FrameDebuggerは超便利
- VRAMの中身をチェックして破棄されてなければならないテクスチャを調査
今後の課題
- CharacterControllerをやめたい
- UIの構築用でない軽量な2d Assetを探す?
- キャッシュで来て大量に表示できるエフェクトシステム
- ダメージパケットなど大量に送信するもののバッチング...
- 全部やれば1.5倍くらいのキャラ出せるのでは?
リアルタイムサーバー
- 廣本洋一
- Serverエンジニア
- 白猫、黒猫
Agenda
- Server System
- Realtime
- Awareness note
白猫のsystem
Realtime
- キャラ変更、ボスの動き
- 雑魚キャラは動きは同期されてない (HPのみ同期)
WebSocket Server
- nginx -> node -> RabbitMQ => php - (batch) -> mysql
- deployすると nodejsのconnection切れてしまう
- nodejs側はコードを固く、汎用的にしている
- php側のバッチコードで代替対応
- 半年移行nodejsのコードは変更していない
マルチプレイ同期データ
- hogt: Boss , self character, stage gimic
- gest: self character, ほかはhostからもらう
通信保証データ
- データが受け取れていないと進行不能になるような重要なデータは通信保証データとして受取済みであることを送信者に送信する
- websocketには3handshakeてきな保証がないので自分で実装
- 反応がないならばgame connection切る
クライアントとサーバーのデータ不一致
- requestは成功するけど、resposeがとれない
- webserver -> db -> webserver -> user
- responseが帰ってない
- client側がtokenを生成してrequest -> キャッシュサーバーでtokenベースでキャッシュ
- webの世界の2重リクエストの阻止と同じ
- GameResult画面でエラーがみたいなケースを防げる
クライアントの数値データの上限値
- ちゃんとDBの最大値を入れてテストする
- client側に入れてテスト -> 失敗
- クライアントの修正を伴う不具合になるのでやばい
- Bigint (server) <=> int (client) で不整合など
Session6: Unity x Sprite Animation
- Whomor
- 木下 (engineer) / 遠藤 (director)
- Maya & unity3d 本, spine本
ゲーム要素
- Architect (仕様)
- Art <= 今回の主題
- Program
- Senario
- Music
Artの表現
- イラスト/UI/3DCS/..
スプライトアニメーションの構成
- イラスト + スプライト + アニメーション => スプライトアニメーション
種類
- コマアニメ: 容量食う
- keyframe方式: flashアニメーションとか. 実装工数高い
チャレンジ内容
- スプライトの表示: 画像の拡縮. トゥイーンとか
- ただひとつのアニメーション: コマアニメ
- 複数のアニメーション: エンジニアのみだと大変.
- 連番画像を大量に. セット指定. つなぎ指定
- これらをすべてに提供するのはムズい
- 専用ソフトつかうのがいい
歴史
- 93' AffterEffects -> 13' Spine/Puppet2D/SpriterPro
3つ紹介
- Autodesk Maya
- Spine
- Puppet2D
- SpriteStudio
アニメーションのワークフロー
- メッシュ機能をつかったdeform animationいい
デザイナ共通手順
- イラスト書く
- パーツ分割
- scriptで画像を書き出し (手で作業するのは大変)
Mayaのワークフロー
- パーツの数だけshaderを作る
- パーツのレイヤーを設定
- IKを設定
- アニメーション設定
- fbxをexportする
特徴:
- 作業大変
- MELScriptで効率化すればいいかも?
Spineのワークフロー
- ...
特徴:
- なれると簡単
Puppet2Dのワークフロー
- ...
特徴:
- なれると簡単
- Unityになれてれば簡単・・・
エンジニアフロー
Spine
- 公式SDKをUnityにImport
- データimport
- Mechanim Animationでオブジェクトを生成
- Animator Controllerを作成
- 2015/2から公式がmechanimに対応
特徴
- エンジニアにやさしい
Maya
- FBXデータをImport
- Animationをモーションごとに分割
- Animator Controllerを作成
- Animationで手戻りがはっせいすると大変
Puppet2D
- AnimationControllerつくるだけ
- 工数が発生しない
- ただデザイナーとレギュレーション握る
ソフトウェアを検証
デザイナ視点
- Spineはdeform / ik機能などいい感じ
- しっぽをどうしても滑らかに動かしたい => Puppetに
- Mayaはちょっとオーバーキル
- fbxからのインポートが面倒
エンジニア視点
- 工数がpuppet2dが有利
- 仕様変更に耐える -> Spineが有利
- Spineがデータ変更ですぐに反映できるのでSpineよい
- Puppet2Dは位置座標、スケールなど調整が必要なので出戻り辛い
マネージャー
- Spine ...
- puppet2d $60
- maya $5000 + $6000
- 分業はSpineやりやすい
- Puppet2dはサポートがないけど、そんな必要でもないかも
- Puppet2DがUnity上で同時編集必要なので辛い
まとめ
- Spine: 万人向け, updateもはやい
- Maya: 機能的に最高. 十分にpreproductionするチーム向け
- Puppet2D: Unityのinterfaceの改善に期待. 普段からUnityに慣れているならばよし
Session7. Unity Google Extreme
1 billion Android 3/4がgame playしてる 7billion支払い => 8400億円
去年の話
- Standard Technique for Success.
- Game Developer Best Practices
- quality/core.htmlをまもる
- TagManagerは面白いが今日は割愛
- Admob収益化もいいよ
- サービスのためのpluginは... url...
Developerが直面する問題
- 最新のAndroid Versionに準拠. Android Themeに準拠が必要
- だが、UnityはJingerbreadにcompatibilityが設定されている
- Custom Pluginで設定は可能
- Plugins/Android/いかに配置するといい
- Manifestでtheme設定など
- AndroidCodeを作る必要はない. 1度で使いまわせる
Unity Google "Extreme"
1. Android TV support
導入すると注目のチャンス. Unityならば簡単にintegration.
- mobileと全く同じ. GooglePlayの画面も同じ. Standardization.
- Android Ecosystemが大きく拡大. 多くのメーカーが開発する.
テレビでゲームをする時の問題.
- 離れた場所からコントロールするDPADが必要
- 方向キー: 上下左右 + Center / Back + Select
- github.com/CMZCODE/GamePadSampleUnity
- nvidiaの友人がbest practive作ってる
- permissionでgamepad加える必要あり
Middlewareに注意
- Permission.
- UnityでのAsset/Plugins/ directoryに追加が必要
PlayGames
- CloudSaveはべんり
- Quest/Leaderboardは維持率をあげる
Second screen & multiplayer gaming
- Nearby Connection API
- 近くのものをコントローラにできる
- 同じネットワーク上ならばすぐに認識される. P2P Connection.
- ローカルでのマルチプレーヤーゲームができる
- Signinをわざわざする必要がない.
LyRicle事例
- Android TVをつかってアンケート
2. GooglePlayGame Services
成功しているdeveloperがやっていること
- 1日あたりの売上目標値
- うけているところ、問題点をみつける
- Analyticsをつかってどのようにゲームを進めているのか解析
Developerの違い
- 大型のチーム: 専門チームが別個にいる
- Indie Developer: 少人数. 1人. なんでもやる. データ分析はあとに
PlayGames Player Analytics
- 1日あたりの目標値
- hotスポット
- Understand players
GooglePlayGameServices無償でついてくる
まずは売上目標
- もし目標を下回っているなら... HotSpotを探す
- 他の会社とベンチマークする. (他の会社に対して劣っているところが見える)
- 他のゲームに乗り換えている人、ユーザの進行度がわかる
- 全部何も設定せずにできる、そうGooglePlayGameServicesならね
BomSquad - Eric Froemling
- 自分でゲームエンジンさえ作成
- 1ヶ月ほどまえゲームはよかった. 収益を出してなかった
- Sources And Sinks Reportをみてもらった.
- ゲームのお金通貨を使い込む前に. 過剰提供していた
- もっとチケットをつかう機能を得た. => 財務体質改善
- 課金ユーザ 70%増加. 売上x2
Sources and Sinks Report
- PlayGamesPlatform.Instantiate.....
復習
- 売上目標を決める
- hotspotを決める
- 改善
Cardbord
VR for Everyone
- 100万install
- 光学系、マグネット、NFCタグ
BiteSizedのVRとよんでる
- もりまさひろ. 不気味の谷現象.
- VRも同じ好感度カーブがある. => ある閾値からすごく気持ちよく. その手前はすごく気持ち悪い
- フレームが高過ぎるとかえって気持ち悪い
- VRの不気味の谷の前にあるもの
- 覗き見感覚. 視野が全部置き換えられたわけじゃない. カジュアルなVRを提供
GoogleMap
- 2回タップすると StreetViewを3Dモードに出来る
- すごい!!
CardbordとUnityの統合
- Cardboardのpluginを追加.
- MainCameraのしたにStereoCameraを入れる
- ステレオに
- ...
Publishing Cardboard VR