fc2ブログ
2013-01-29(Tue)

Draw Call Batching[Unity]

見やすくするために、一部のオブジェクトのmaterial変更して、
Shaderを切り替えたりしたのですが、そのときdraw callのbatchが効かなくなったのでメモ

コードはこんな感じに書いていました。

オブジェクトプールしているので、インスタンスは使い回し。
なので、初期化時(init_exec)にmaterialを初期設定に戻しています。
あとは、適当なタイミングで、設定されたmaterialに切り替え。
それだけなんですが、これをやると、draw callのbatchがマルッと効かなくなりました。
全然気づかずにやっちゃっていたのですが、たまたまStats見たときbatchが効いてないのに気付いて、
間違いに初めて気づきました。

20130203_drawcall0.jpg

Awakeの以下がまずかったです。
this.origMaterial = mRenderer.material;

これで、materialのインスタンスが生成されたものを参照してしまうみたいです。
なので、設定は同じだが、全materialが別インスタンスになって、ノーバッチ。

this.origMaterial = mRenderer.sharedMaterial;
上記の変更で、インスタンスが生成されずに参照できて、バッチが効きました。

20130203_drawcall1.jpg

後、MaterialPropertyBlock というのをはじめて知りました。
Renderer.SetPropertyBlock
これで、同一マテリアルで、異なる色など設定できるのかな。
スポンサーサイト



2013-01-25(Fri)

Shaderをmobile用に[Unity]

particleのShaderはmobileでも使えるっぽいのを持ってきて、使っていたのですが、
そういえば矢印モデルとかは、mobile用のを設定していないなぁー、ということで、
軽いやつに切り替えました。

VertexLitのbuiltin_shader(mobile用)は、Main Colorが設定できず、textureのみです。

自分はmaterialで、colorを設定しているだけなので、
Main Colorも設定できるやつを追加して、こいつに切り替えました。

Shader "Custum/VertexLit" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
}
Lighting On
SetTexture [_MainTex] {
Combine texture * primary DOUBLE, texture * primary
}
}
}
}

texture貼っていないので、SetTextureの箇所をけずろうか迷いましたが、
もしかすると、貼るかもしれないので、残しておきました。

3Dでたいして表示していないので、あんまり効果ないかな。
それより、CPUとガベコレのがやばそう。
2013-01-23(Wed)

Swarm SDK更新[Unity]

SwarmのSDKが更新されたので(UnityのPluginも)、さっそくSDK落としてきて更新してみました。
※組み込みに関しては、こちら

swarmSwarm SDK Update Announcement

ぶっこんだだけで動いてくれました。ソースの変更とかしなくてもOKでした。
SDK Version 20130106-0000
Features and Fixes
- Swarm is now a Library Project
- Improved convenience: Added 1-liner API calls for using leaderboards and achievements
- Improved login: Users can now login using social network credentials (facebook, twitter, g+)
- Improved compatibility: Improved compatibility with the Facebook SDK
- Improved speed: Added improved caching and added a preload function to improve user experience
- Improved compatibility: init function can now be called from a background thread (for LibGDX, etc.)
- Improved clarity: Notification after submitting a score to a leaderboard shows the score (not rank)
- Improved convenience: Can now specify default leaderboard date range
- Improved provider: Google Wallet is now the default payment provider for the Virtual Store
- Improved localization: Most strings are now in a strings.xml and can be easily translated
- Improved offline support: Most social features now work both offline and online
- Improved offline support: After configuring social features, download Offline Config File
from Your App's App Details tab (in Swarm Admin Panel) and add it
- Improved graphics: Updated graphics of pre-built Swarm screens and added xhdpi images

twitterやらの認証でログインできるようになってるのはとてもいいなぁと思います。みんな新規アカウント作るの躊躇するもんね。
あと、offlineサポートとか素晴らしいと思いますよ。

Windowなんかは水色が増加しました、前の方がうるさくなくてよかったな。。。
(タイムを送信した場合、そのタイムが出るようになってました。)
Screenshot_2013-01-24-02-44-10.png

Unityのpackage更新したりするの初めてだったのですが、
Importされるディレクトリ以下をすべて削除して、入れたのですが、metaファイルも全部更新されるので、ちょっといやな気持ちになります。ファイル更新扱いにしたいのですが。

AndroidManifest.xmlは、上書きして差分を見ながら、必要箇所を戻していきましたが、
とくに変更されている箇所はなかったです。インデントのみ。

よさげな機能は追加されているので、特に不具合でないかこれで様子みてみます。

→offlineで動作しているときに、Leaderboradにアクセスすると死んでしまいました。
Webの設定ページ > App Details にOffline Config Fileをダウンロードする箇所があって、
そこから落としてきたjsonファイルをAndroidプロジェクトのassetsフォルダにいれろと言っているので、
それをやるといい事が起こると思ったのですが。。。
Plugins/Android以下にassetsフォルダを作成して、そこにいれてビルドしてみたんですが、
leaderboardでお亡くなりになるのは変わらなかったです。もう少し様子をみてみることにします。
offline時は、dashboradからleaderboardに行っても死ぬのでバグじゃないかなー。
2013-01-22(Tue)

Unity日本語のドキュメント[Unity]

Unity日本語のドキュメント
いつも場所を忘れてしまうので、メモ。翻訳された方々には感謝です。

作業の方は、矢印の方向、スワイプで変更できるように。
少々微妙だけど、採用。。。
手付かずの残作業で、割と大きめかなと思っていたのですがカットしてもよかった類かもしれません。

20130122_vecma0.png 20130122_vecmap1.png
とにかく、残件を潰してます、もしくはomit。。。
2013-01-16(Wed)

RevMob試してみたメモ[Unity]

実際に使うかどうかは、また別の話です。

CPI広告なんかいれてみっかという感じで、とりあえず簡単そうなRevMobを試してみました。
広告組み込むと、こんな感じになるよっていう情報どっかにまとまってないのかしら?
どんなもんか分からないので、簡単に組み込んで調査だけしました。
ぶっちゃけ微妙、正式に組み込もうかどうしようか悩んで悩んで、
まあ簡単に外せるので、とりあえずいれてみるかと思ったのですが、
簡単に外せるということは、逆に簡単に組み込めるよということなので、
まあ、いつでもいいかなという気持ちになってきました。
しかし、入れてないということは、0なんですよ0!
とか悩んでいる間に、ちゃんとゲーム部分に手を入れようよという結論です。

もしかしてやっぱり入れようの時の為にメモ。
すげえ雑に試してます。

1.登録
メールアドレスとパスワード設定すると瞬時に使えるようになりました。
メールアドレスの確認とかないくらい瞬時に!

2.Androidアプリの登録
Add Android Appでアプリを追加、Google Playに登録されている場合とされていない場合で、
されていない方を選んで、アプリ名を入力したくらい。
App IDが発行されました。
placement id はアプリ内での表示枠。表示箇所は一箇所だけなので多分使わない。

3.SDKのpackageファイル落としてきてインポート
http://sdk.revmob.com/からdownload、現状 Unity版 4.4.1
インポートすると、AndroidManifest.xml上書きされるけど、
とりあえずテストなのでマージせずにこのまま動かす。
Swarmと共存はできそう多分。

4.docのプログラムコピペして、Componentを追加
発行されたApp IDを記述するのを忘れないように。

確認したのは以下
- Fullscreen Ad は使わないのでパス
- Banner Ad はAndroidで使えない、iosのみ
- Ad Link
revmob.OpenAdLink();
タップすると、Google Playのウィンドウがひらく
開くまでにかなりラグがある。その間ゲームは操作できる。
ボタンなどは、自由に作れるのでデザインを崩さずに組み込める。もっときびきびしてれば使ったかも。

Linkは先読みできる、読めない場合、ボタン非表示とかできる。
でも開くまでにラグはある。

- Pop up Ad
ポップアップが出て、FREEゲームはいかがか聞かれる。
sureすると、webページにとぶけどなんか、ページがないエラーがでる。使えない。。。

Screenshot_2013-01-17-01-24-43.png
2013-01-15(Tue)

ローカライズ対応しました[Unity:NGUI]

ローカライズするところ殆どないので、簡単な機能で十分です。
NGUIのLocalizationがシンプルな機能で、簡単に組み込めるので対応しました。
手順は以下の感じ。

1. Localization Componentをどこかに置く
Component > NGUI > Internal > Localization にあります。
自分は、Sceneを跨ぐ必要がなかったので、あまり考えずに、
NGUIのサンプルで使っているPrefabをコピーしてきて、そのままSceneに置きました。
Sceneを跨いで残す場合は、DontDestroyとか必要?

20130115_ngui0.jpg


2.言語別のKeyValueのファイルを準備
自分は、Japanese と Englishのみ
日本語以外は全て、英語に設定してしまいます。以下は、Japanese.txt

HowToPlaySwipe = 改行は\n大丈夫かな
HowToPlayTap = 日本語Japanese.txt
HowToPlayInfo = ゲームを作らないのもゲームだ

用意したファイルは、Localization ComponentのLanguagesテーブルに設定します。

3.Localize対応したい箇所にUILocalize Componentを設置
Keyを設定すると、言語設定に応じて、Keyに対する文字列が表示されました。
サンプルで差し替えていたのは、UISprite と UILabel
UILabelの差し替えのみ対応しました。
SpriteにLocalizeで、変更が必要な文字をいれるようなことは、なるべく避けるべきかな。

20130115_ngui1.jpg

4.systemLanguage 取得して設定
2013-01-12(Sat)

BGM関連対応[Unity]

どうやったらかっこよく音鳴らせんのか教えてください。

まずは、FadeOut対応しました。

IEnumerator Fadeout( AudioChannel channel ){
do {
float duration = this.fadeDuration;
AudioSource audio_source = channel.audio;
if( !audio_source.isPlaying ){
break;
}
//Debug.Log("time:" + audio_source.time + "/" + audio_source.clip.length);
// 終わりのほうまで待つ
float skip_time = audio_source.clip.length - audio_source.time - duration;
if( skip_time > 0 ){
yield return new WaitForSeconds( skip_time );
}

// 残りはfade
float currentTime = 0.0f;
float waitTime = 0.04f;
float firstVol = audio.volume;

float rest_time = audio_source.clip.length - audio_source.time;
if( duration > rest_time ){
// 残りが少ない場合、残りの分だけ
duration = rest_time;
}

while( duration > currentTime && audio_source.isPlaying ) {
audio_source.volume = Mathf.Lerp( firstVol, 0.0f, currentTime/duration );
//Debug.Log("Step:" + audio_source.volume);
yield return new WaitForSeconds(waitTime);
currentTime += waitTime;
}

// 再生停止
audio_source.Stop();

} while( false );
}
coroutineで行うようにしました。以下で実行
StartCoroutine( "Fadeout", fade_channel );

ゲームリトライ時にcoroutineが裏で動いたままになっていて、
次プレイ時にBGMが再生されないバグをこしらえました。
なので、ゲーム終了でBGMをすべて停止するタイミングで、coroutineも停止するように。

public void Stop() {
foreach( AudioChannel audio_ch in audioChannel){
audio_ch.audio.Stop();
}
// Coroutineも停止
StopCoroutine( "Fadeout" );
}
Please note that only StartCoroutine using a string method name can be stopped using StopCoroutine.

method名を文字列で指定する、StartCoroutineでないと StopCoroutineできないみたいです。

audioSourceは、初期化時に必要な分だけ生成、
audioClipはResourcesフォルダに全部ぶっこんで、初期化時にテーブルを作成するようにしました。
適当にrandom再生するので、曲の追加、削除でリスト直したりが必要ないからです。

後、BGMの元データwavファイルなんですが、自分でencodeしてmp3とかに圧縮してUnityにくわせても、
アプリのサイズは全然変わらなかったです。(Editor Logなんかで確認)
実際に使われるデータ自体の圧縮はUnityにお任せなので、こっちで元データをなんかしても無駄みたい。
できる事は、Inspectorでの圧縮時のbpsの設定くらいだと思いました。

割とBGM関連手間取りました、あとまだbugがあるっぽい2曲鳴らしてるはずなのに、1曲しか鳴ってない状態とかに遭遇する。。。
2013-01-06(Sun)

色々なハメ[Unity]

Leaderboard画面は大体できたつもり、対応が必要な箇所はまだ沢山残っている。。。
Leaderboard作業中に色々はまった事メモ。

Screenshot_2013-01-06-06-00-59.png

フォントはM+FONTSを使わせてもらう事にしました。M+FONTS見やすいー。

1. Windows7でM+FONTSのttfがなかなか、認識できなかった
downloadしてきた、mplus-TESTFLIGHT-054.tar.xzを
cygwinから tar Jxvf mplus-TESTFLIGHT-054.tar.xz で展開していたのですが、
展開されたttfがなかなか認識できませんでした。
原因は、実行権限がついてないと駄目みたいで、chmod 711 *.ttf とかで、使えるようになりました。
最初ちゃんと展開できてないのかな?と思って、別の展開ソフトで展開したり、
いくつかのバージョンのデータ落として試したりで、結構な時間がとられてしまいました。

2. BMFont、Save configuration as...でBMFontが落ちる
NGUIで使用するためにBMFontでfontのtexture作っていますが、
出力前に設定を保存しようとすると、BMFontが落ちてしまって、また設定やり直しー。
bmfc設定ファイルを上書きして、0byteのファイルを作ってしまうので、
途中まで設定していても、毎回設定やり直しさせられてきつかったっす。
Font Settingsで、Add font file:を設定するとそうなってしまうので、ここの設定は保存しないようにしました。
Fontインストールしていれば、Addしなくても選択できるので、問題は起きないと思います。

3. Leaderboardが実機で重い
なんか重い、2Dのくせに一番重いと思っていましたが、
NGUIのUIPanel の Depth Passにチェックが入ってました。
2013-01-03(Thu)

1月に入った。。。

2013年に入ってしまった。今月リリースしたい。Androidアプリのダウンロード数とか眺めていると、
げんなりする。殆どプロモーションじゃないの?って思ってしまう。
厳しいよー、夢も希望もない。。。後、時間かかりすぎ。

12月やった事
・メインメニューデータ作成
・vibration対応できた
・ゲーム中の背景、particleで描画
・twitterクライアント対応
・sceneの遷移関連修正
・ランキングデータ更新、hashチェック、時刻時刻追加、データ数変更など
・Leaderboradメニュー、optionsメニュー雛形作成

やりたいこと、残っていることは
・メニュー、Leaderboradとか絶賛改修中
・How to play、必要ない気がするけど、一応いれる
・サウンド関連、BGM
・ゲーム部分のブラッシュアップ!
・リリースに必要なこと、署名入りビルドやアイコンなど

メニューのデータを頑張って作ってるけど、超めんどくさい。コーディングしたい。

Advertising


カテゴリ
記事一覧
最新記事
最新コメント
最新トラックバック
月別アーカイブ
プロフィール

tasogare66

Author:tasogare66
ひっそり週末プログラム
@tasogare66

【Androidアプリ】


Wipes Arrow
(スワイプアクション)

review site
Uni本
リンク
RSSリンクの表示
FC2カウンター