unity study

Unityでサクッとモックを作れるようになることを目指して、基本的なテクニックを抑えていく過程を残すブログのつもりだったけど、今はただ自分のトラブルシューティングメモになってるブログ

WebCamTextureを使ったパススルーカメラ

何となく、パススルーカメラを作りたくなり、WebCamTextureを試す。
展望としては顔認識やARと組み合わせて、ARカメラ的な感じのものを作りたいな、と。
しかし意外とつまづいたのが、端末の回転とテクスチャの向きが合わない問題。
いまいち理屈を理解しきれていないのが悪いっちゃぁ悪いんだが、とりあえずOrientationをLandscapeRightに固定して、表示しているPlaneのx軸をマイナスに反転させたりして、都合の良い表示にするという力技でゴリ押しするなど。
う〜ん、中々面倒くさい。

niconicoSDKを使ったアプリをiTunesConnectにアップロードする際の注意点

iOS10からカメラとマイクのプライバシー設定についてinfo.plistに記述が必要らしい。

<key>NSCameraUsageDescription</key>
<string>niconicoSDK Dependency</string>
<key>NSMicrophoneUsageDescription</key>
<string>niconicoSDK Dependency</string>

niconicoSDKのドキュメントを見ると値は空でも良いっぽいような書き方になっているが、実際に空だとinvalid binaryとなってしまう。
とりあえず何かしら書いてあれば通った。

ちょいと便利なsayコマンド

ゲーム中でちょっとした「Game Over」みたいなボイス素材が欲しくなることがある。
そんな時に便利なのがsayコマンド。

qiita.com

10カウントとか「Excellent」とか「Perfect」とか作っておくと、パッと使いたい時に便利かも。
say excellent -v Victoria -o excellent.aiff

duprisリリースしました

2016年中にリリースするつもりで作っていたゲームを、ようやく年明けにリリースした。

f:id:hacha_pg:20170113154828p:plainf:id:hacha_pg:20170113154832p:plainf:id:hacha_pg:20170113154839p:plainf:id:hacha_pg:20170113154845p:plainf:id:hacha_pg:20170113154848p:plain

iOShttps://goo.gl/JjN2Uk
Androidhttps://goo.gl/oAo1Nf

ゲーム本編ができてからが結構長かったな。
ランキング実装やらIAP実装やら、こまごました作業は別にそんなに楽しくもないので一気にペースダウンしてた。
今回はランキング実装にNCMBを使ってみたりした。
基本無料なので是非とも多くの人にプレイしてもらいたい。
基本無料なので是非ともNCMBの無料プランのAPIコール回数を超えない程度に多くの人にプレイしてもらいたい。

NCMBは導入がかなり楽だが、無料プランの次がいきなり月3万円ってのがややツラい。
月5000円ぐらいのプランが欲しいな。
一度プランを上げると無料には戻れないようなので、継続的収入をアテにできるような作りにしておかないと、個人でやるのはちょっとなぁ、という印象。
まぁ無料でも200万回/月なので、仮に1ユーザーが毎日20回APIコールしたとしても、10万人までは耐えられるので杞憂かな。
一応、なるべくAPIコールしなくて済むような作り方はしている。

禁則処理がしたい

下記で紹介されているtsubaki/HyphenationJpn_uGUI使用時のメモ。
tsubakit1.hateblo.jp
基本的には紹介された使い方でいけるが、一部実行時に動的セットしたかったので強引に下記のようなメソッドを追加した。

public void Set(string str)
{
	text = str;
}

あと、どういうわけなのかエディタ実行時には問題とならないが、ビルド時に
UnityEngine.EventSystems.UIBehaviour.OnValidate()が存在しないっぽいようなエラーとなる。
何故なのかさっぱり解せないのだが、とりあえず下記のように対応しても意図した通り動いた。

protected /* virtual */ void OnValidate()
{
	// base.OnValidate();
	UpdateText(text);
}

ちなみにUnity5.4.3f1にて確認。

SocialWorkerの導入

これまでハイスコアのシェアとかにSocialConnector使ってたけど、直接Tweeterのツイートウィンドウとか出したいな、と思いSocialWorkerを導入してみた。
okamura0510.jp
まだiOS向けビルドしか試してないけど、下記のフレームワークを追加しないとビルドできないので注意。
Social.framework
Security.framework
MessageUI.framework
この辺り、何かが足りなくてビルドエラーになると、何が原因なのか分からなくて困っちゃうんだよなぁ。
何となくググって近しい解決法を探すしか。
tatsuya1970.com

数値をカウントアップする処理

数値をカウントアップしながらプレゼンテーションする、というのはよくある。
条件として下記の通り。
・一定時間ごとに特定の値ずつ増える。
・最大でもn秒でカウントアップ処理が終わってほしい。
・カウントアップする最小値を指定したい。
・カウントアップする値は、全体としてn秒に収まるように調整する。

var after = 9999;
var before = 111;
// 足し込む最小単位
var addMin = 10;
// 最小時間
var minSec = 0.1f;
// 最大所要時間
var maxSec = 5.0f;
// 所要時間
var revise = Mathf.Max(addMin, after - before);
var time = Mathf.Min(maxSec, revise / addMin * minSec);
// 1回あたりの足し込み量
var add = (long)System.Math.Floor(revise / (time / minSec));
Debug.Log("カウントアップ処理 " + before + " から " + after + " まで, " + minSec + " 秒間隔で " + time + " 秒かけて " + add + " ずつ増やしていく");

var cnt = 0;
Observable.Interval(TimeSpan.FromSeconds(minSec))
	.TakeUntil(Observable.Timer(TimeSpan.FromSeconds(time)))
	.Subscribe(_ => {
		before = Math.Min(after, before + add * cnt++);
		Debug.Log(before);
	}, () => {
		// 端数の場合を考慮し、ストリーム終了時に最終値を出力
		Debug.Log(after);
	});

微妙にちょっとおかしいかも。

【追記】
もうちょい直した。

数値をカウントアップさせる時によくやる処理