読者です 読者をやめる 読者になる 読者になる

peroon's diary

game programmer

ゲーム内のキャラのモノクローム写真を撮影するアプリをサブミットしたので振り返り

f:id:peroon:20150510215718p:plain

  • ユニティちゃんはかわいいけれど、実機ではシェーダが変わる

シェーダがMobileでは動かないので標準シェーダに切り替わり、怖い描画になってしまう。Mobileシェーダと差し替えてなんとか表示したが、Editorでのかわいい見た目とはずれてしまう。

  • ユニティちゃんには平行光源が必要

点光源のライトの強度を調整するゲームだったので、ユニティちゃんステージの時だけ平行光源を操作できるようにした。

  • ステージ追加はデータとモデル追加でできるようにしたが・・・

モデルを選ぶのにも時間がかかる。データを作るにも、難易度調整でパラメータを決めるために何度もプレイすると時間がかかる。量産体制ができたといえども、人手で作る場合は夢のような仕組みではない。

  • Asset Storeからモデルと持ってくると気づけば300MBをこえる

このままパブリッシュするとストアに並べられない。各モデルのテクスチャ圧縮やサイズを調整した。テクスチャでTruecolorを使っているのはアプリアイコンのみで、他は圧縮している。

  • 今回はテクスチャのパックなし

TexturePackerは今回使わなかった。パフォーマンスとサイズがシビアでなければ、ここは手を抜いてもいいと思う。

  • ddxテクスチャ

カメラの3DモデルをAssetStore以外からDLしたが、ddxテクスチャを使っていてiOSで動かなかったのでPNGに差し替えた。

サウンドやボタンのスケーリング、ボタン素材などは流用した。

  • アニメーションのサイズもそれぞれ1, 2MBある

ゲームで使わないアニメーションがPrefabに付いていて、それをシーンで使うとアプリサイズが増えるので外しておく。

  • パブリッシュが近づいてビルドを頻繁にするときは、一緒に食事する

ビルド待ちが気にならなくなる。

  • かかった時間

基本のフローに1日、モデル探しとステージ追加に2日。整えて実機確認、パブリッシュに2日の計5日くらい。ボタンは六角形画像を使用、フォントはオシャレなものを使用することで画像作成をなくし、画像についてはスクリーンショットを切り取るくらいで済ませているので時間を稼げている。

  • 2値化シェーダ

シェーダを書いたのは初めて。ポストエフェクト用のグレースケールシェーダに閾値を入れることで2値化シェーダができた。

Shader "Custom/binary_shader" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Lambert

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o) {
            half4 c = tex2D (_MainTex, IN.uv_MainTex);
            //o.Albedo = c.rgb;
            float g = (c.r+c.g+c.b)/3.0;
            if(g >= 0.5){
                g = 1.0;
            }else{
                g = 0.0;
            }
            o.Albedo = float4(g, g, g, 1.0); //test
            o.Alpha = c.a;
        }
        ENDCG
    } 
    FallBack "Diffuse"
}