mattak's blog

人生を1ミリ進める

kotlinことはじめ

kotlinでアプリを書き出すようになったので、勉強がてらメモ。

static method

kotlin.hatenablog.jp

基本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

androidjvmテストを書く

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

taro.hatenablog.jp

object Singleton {  
  fun hello() {
    println("Hello")
  }
}

object declarationで簡単にかけるっぽい。

Game Graphics Groove #3 いってきたメモ

connpass.com

『パズクエにおける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派だ...

www.amazon.co.jp

操作

  • 首振る
  • 視点移動
  • 上下にふることで歩く操作
  • ponと叩いて写真を撮る
  • Vufolia SDKでARで撫でる、触る

新しい操作方法が必要

  • チャンスかも知れない

SPAJAM

  • 寂しい食卓: 幻想飯
  • ご飯を容易
  • ARカード (和、洋、中、...)
  • ちゃんと画面が曇る、かなり豪華感ある演出

GDC

  • みんなVR発表してた。EpicはLoad of the Ringとか?
  • 期待感ある

『乖離したことから始まった、本質への回帰』

  • 窪 洋一

パネルディスカッション

UIデザイナについて

  • アニメーションはあんまりつくってない.
  • 内製のエフェクトツール使うことが多い.

企画ってどうやって決めてる?

  • 企画コンペやってるよ. 出した人がオーナーになる (クロスサマナー)
  • プロデューサーが何つくろっかーって決める
  • IPものは天上人が多い

クリエイティブ周りの決定権、誰が持っている?

  • プロデューサー.
  • ...

作りたいもの作れてる?

テストから見えてくるGoogleのソフトウェア開発

読了したのでFBした。

久々のプレゼン資料、作成がつらい。。 3ヶ月くらいダラダラと発表を避けてきたけど、なんとか形にできてよかったー。

本の感想

本の内容は面白かった。 のだけれど図とか絵がもっとあってもいいのになーとところどころ思う。(活字疲労が・・ インタビューやらテストエンジニアの職種の内容が本の中ではメインコンテンツになっいるんだけど、 退屈だったのでFBの資料からはバッサリ省きました。 それでも話し足りない量の内容がつまっているので、気になったらぜひ買って読んでみるのが良いと思います。

最後に。 本のプレゼントしてくれた @masasuzu さん、ありがとうございます!

CAOS 2015 Summer メモ

CAOS 2015 Summer 〜開発効率のツール開発とオープンソース活動〜 のめも

Webponizeの紹介

Author

  • @1000ch

WebP

webpに変換してくれるくんをつくったよ

STF

Smartphone Test Farm

詳細

  • 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化したい

  • ゲームアプリからの需要
  • すごい早く通信したい (10msくらいのオーダーで)
  • Server: Linux/MacOSX/BSD
  • Client: go, node, unity ...

運用

  • 2ヶ月前から運用してる
  • 2game
  • c4.2xlarge x 3 instance on AWS
  • 今同時接続2000人くらい
  • 1.2 billion message / month
  • まだ数すくない

TBC

ImageHayabusa

psd をおいたまま配信できるサービス

  • http://hayabusa.io/
  • 作業時間: 1day -> 30minに
  • workflowが早くなる
  • デザインの確認すぐできる

input

output

  • webp, png, jpg, ...
  • /image.png?quality=80
  • /images/image.jpg?layer=Name
  • /assets/image.w480.x2.png

初期リクエストで変換 -> そのあとキャッシュされる

  • urlはデフォルトパラメータが設定されてる
  • 差分情報のみurlに反映する

食戟のソーマのレシピ再現がんばった 04-06

最近料理のレパートリーが広がらず悩んでいる。 やっぱり意識的に新しい料理にチャレンジしていかないと・・・! というわけで今季は食戟のソーマの料理を頑張った。

以上16品。1-3刊は制覇。あとは難しい料理をおいてまちまちという感じ。

振りかえり

16品なので毎週何かは作れていたかなという感じ。 かなり見た目が下手くそなのもあるが(ローストポーク、ベネディクト...)、ひと通りレシピ試せたのは楽しかった。

美味しさの順で言うと、

  1. シャリアピンステーキ
  2. さわらの山椒焼き春キャベツのピューレ添え
  3. 田所特製3種のおにぎり

シャリアピンステーキの梅醤ごはんはうまいので超おすすめ。 さわらの山椒焼きはどくどくの風味が出て美味しかった。 田所ちゃんのおにぎりは、豚肉のにんにくはちみつ味噌漬けがご飯のススム美味しさだった。

難しさの順で言うと

  1. シューファルシ (ねっとりソースにならなかった)
  2. エッグベネディクト (ポーチドエッグをつくるのにコツがいる)
  3. ローストポーク(肉をケチってはダメ)

シューファルシは茹で過ぎ中が硬くなって肉々しくなってしまうので、レギュムの魔術師感を出すには調理時間をきちんと守ったり、🍖詰め過ぎないようにしたり、キャベツを甘みの出る品種にしてみるとかちょっと工夫しないとダメかも。

エッグベネディクトは1人前でケチってオーランドソースを少なくしたり、湯煎しすぎたりすると失敗する。あと新鮮な玉子で水溶性卵白を少なめにしないとポーチドエッグがうまくできないかも。

ローストポークはベーコンをケチったり、焼き過ぎたりしちゃダメ。 思ったよりエリンギでカサが増すので分量注意が必要。

暗殺教室の122話の図形

体心立方構造が無限遠に広がっている空間の各点において、 体心立方構造の各頂点との距離が一番近い点に属するとした時、点の集合の体積を求めよ。

っていう問題が暗殺教室の122話にあったのだけれど、その中に出てくる立体図形の形がどうしてもイメージできず腑に落ちなかった。 ので実際に計算してみた。

f:id:mattaclj:20150602233914p:plain

なるほど納得。

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に表示するようにすればスッキリ

コンポーネントの依存関係

グラフ化

  • 参照をグラフに
  • dot / gmlのフォーマットで。
  • コード解析がなければ正規表現で.
  • yEd

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の場合、ロードするシーンを探す

シーン (YAML) をGREP検索

  • SerializedObject <=> YAML / 検索
  • Smart Marge : シーンやプレハブをマージ可能に

近いうちに公開する予定

  • 5分くらいでガガッと把握できるように

Session3: エディター拡張マニアックス 2015

  • 安藤圭吾
  • Field Engineer
  • Unity部 もくもく会
  • SlackにUnityコミュニティつくった

Unity 5.1ベースの話

  • 資料は後日Uniteページに公開
  • ソースも公開予定
  • Animation Data Auto Generationについて話す
  • Sprite Animationを題材

Sprite Animationの作成

    1. プロジェクトview -> Scene ViewにDrag&Drop. AnimationClip & AnimationController生成
    1. Animation WindowでCreate New Clipでやる
    1. 選択 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

  • リッチなクオリティをスマホでやるには?
    1. 大規模開発でのUnityの注意点
    1. HDクオリティのゲーム制作をする心得

大規模開発での心得

基本

  • 同じファイルを同時に触る人が増える

複数人のデータ編集のイメージ

  • プランナー、ヒット判定、サウンドセクション、エフェクト・セクション
  • それぞれの専門の人が自分でデータを入れたくなる

Hierarchyで編集する.scene, .prefabを同時に編集できるか?

  • ここが一番のネックだった
  • Unityはこれが非常に苦手

Hierarchyで依存関係を作らない

attack.prefab
|- motion.prefab
|- plan.prefab
|- sound.prefab

基本:

  • 一つのアセットとしてattachを設定する
  • Hierarchy上で依存をつくらず、Inspectorで設定
  • コミットを検知してCommitHookサーバーが最新の依存関係をattack.prefabに更新してcommit
  • NOTE: 依存関係は .metaに記載されているguidによって構築されるので

視認性が落ちる

  • Unity上にツールをつくった
  • hierarchy / Inspectorでは編集を諦めて専用のタイムラインツール

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#の特性を知る必要がある

  1. strutはstackに確保されるが、classはheapなのでgc頻度上げる
  2. 文字列層は気をつけて class enumのtoString()はおそい
  3. foreachを使うとEnumerableがヒープ確保されるので、これもgc頻度を上げる
  4. Vector演算を真面目にやるとかなりキツイ

特性をしればそんなに遅くならない

  • foreachでIEnumerableでallocationしてるとか、

最適化はNative化を検討

  • IKや揺れ者の物理はnativeで実装
  • Asset/Pluginにdllにおいて簡単にnative呼び出しできる

まずは敵を知るところから

アプリが使えるメモリ量

iOS 350-600MB Android 400-1.1G

  • メモリ管理の仕組みがAndroid/iOSで違っている
  • Androidはメモリを積まざる負えない...
  • Unityで作っている以上GCは意識しなくてはならない

Android先行で開発したほうがうまくいく?

  • 同スペックでも、iOSのほうが性能がでやすい
  • またAndroidはAPKは作成が早い
  • IL2CPPが遅い

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画像データに

  • 出力できるtextureフォーマットを指定できる
  • iOSはpvrtcなのでOK
  • Androidはいろんなフォーマットで出したい

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を変換

起動時間の高速化

  • Android 25sec / iOS 1min
  • Cashing.readyは遅い. (3万種類のAssetBundle)

独自のキャッシュシステムを作成

  • 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

  • amazon aws
  • 普通のramp
  • web socket serverを通してリアルタイムプレイ
  • php, node, apache, nginx, redis, mysql

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いい

デザイナ共通手順

  1. イラスト書く
  2. パーツ分割
  3. scriptで画像を書き出し (手で作業するのは大変)

Mayaのワークフロー

  1. パーツの数だけshaderを作る
  2. パーツのレイヤーを設定
  3. IKを設定
  4. アニメーション設定
  5. fbxをexportする

特徴:

  • 作業大変
  • MELScriptで効率化すればいいかも?

Spineのワークフロー

  1. ...

特徴:

  • なれると簡単

Puppet2Dのワークフロー

  1. ...

特徴:

  • なれると簡単
  • Unityになれてれば簡単・・・

エンジニアフロー

Spine

  1. 公式SDKをUnityにImport
  2. データimport
  3. Mechanim Animationでオブジェクトを生成
  4. Animator Controllerを作成
  5. 2015/2から公式がmechanimに対応

特徴

  • エンジニアにやさしい

Maya

  1. FBXデータをImport
  2. Animationをモーションごとに分割
  3. Animator Controllerを作成
  4. 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. 1日あたりの売上目標値
  2. うけているところ、問題点をみつける
  3. 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.....

復習

  1. 売上目標を決める
  2. hotspotを決める
  3. 改善

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

  • Apps for Google Cardboard
  • GooglePlay上に乗せるとプロもしてくれるよ
  • 詳しくは. developer.google.com/unity/unity/cardboard/ ?