unity study

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

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

何となく、パススルーカメラを作りたくなり、WebCamTextureを試す。 展望としては顔認識やARと組み合わせて、ARカメラ的な感じのものを作りたいな、と。 しかし意外とつまづいたのが、端末の回転とテクスチャの向きが合わない問題。 いまいち理屈を理解しき…

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

iOS10からカメラとマイクのプライバシー設定についてinfo.plistに記述が必要らしい。 <key>NSCameraUsageDescription</key> <string>niconicoSDK Dependency</string> <key>NSMicrophoneUsageDescription</key> <string>niconicoSDK Dependency</string> niconicoSDKのドキュメントを見ると値は空でも良いっぽいような…

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

ゲーム中でちょっとした「Game Over」みたいなボイス素材が欲しくなることがある。 そんな時に便利なのがsayコマンド。qiita.com10カウントとか「Excellent」とか「Perfect」とか作っておくと、パッと使いたい時に便利かも。 say excellent -v Victoria -o e…

duprisリリースしました

2016年中にリリースするつもりで作っていたゲームを、ようやく年明けにリリースした。iOS版 https://goo.gl/JjN2Uk Android版 https://goo.gl/oAo1Nfゲーム本編ができてからが結構長かったな。 ランキング実装やらIAP実装やら、こまごました作業は別にそんな…

禁則処理がしたい

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

SocialWorkerの導入

これまでハイスコアのシェアとかにSocialConnector使ってたけど、直接Tweeterのツイートウィンドウとか出したいな、と思いSocialWorkerを導入してみた。 okamura0510.jp まだiOS向けビルドしか試してないけど、下記のフレームワークを追加しないとビルドでき…

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

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

あるストリームが発火したタイミングで、別のストリームの最後の値を流すようなストリーム

あるタイミングで発火するstreamAとstreamBがあり、streamAが発火したタイミングでstreamBの最後の値を流したい。 しかしstreamBが発火しても値は流れてこない。 というようなことをやりたいのだが、後者の条件が厄介でZipLatestでもないしCombineLatestでも…

2つ並列処理完了待ち合わせをUniRxを使って書いてみたもの

2つのコルーチンの処理完了待ち合わせをUniRxを使って書いてみたものコルーチンをIObservableにして、zipして待ち合わせして、それをStartAsCoroutine()でyield returnできるようにしている。 回りくどいことやってるような気もしなくもないが、スコープの…

一度発火してから、一定時間以内に再発火しなかったら終了するストリーム

断続的に値が流れてくるストリームがあり、一定時間以内に値が来たら処理するが、一定時間以上値が流れて来なかったら終了する、という処理をしたいと思った。 例えばスコアを獲得する毎に値が流れてくるストリームがあるとして、これ自体は明確な終了がない…

PHPのimplode()みたいなことを、LINQを使って実現する

例えば var ids = new int { 1, 2, 3}; みたいな内容を 1, 2, 3 とログ出力したいことがちょくちょくある。 PHPだと implode(',', ids); でいけるんだが、C#でスラっと書けんかな、と思ってLINQで表現。。 ids.Select(x => x.ToString()).Aggregate((x, y) =…

UniRxを使ったフリック検出

以前にもフリック検出するストリームを書きたいと思って取り組んだことがあったが、その際のやつはどうにも綺麗にまとまらなかった。 Downされてから一定時間以内にUpしないものは検出しない、という条件を落としこむのに苦戦したんだったかな。 ふと思い立…

PhotonUnityNetworkingでOnJoinedRoom()前にOnPhotonPlayerPropertiesChanged(object[])が呼ばれる?

Unity5.3.5f1 + PUN v1.69で確認。 既存ルームにJoinした際に、OnJoinedRoom()よりも先に既にルームにいるプレイヤーのOnPhotonPlayerPropertiesChanged(object)が呼ばれているっぽい? 既にルームいるプレイヤーがSetCustomProperties()を呼んでいるかどう…

SendMessageの謎挙動

PhotonUnityNetworkingを使っていて、OnPhotonJoinRoomFailed(object[] log) が呼ばれず、OnPhotonJoinRoomFailed()が呼ばれるという現象に遭遇し、色々と調査していたらどうもSendMessageの不思議な挙動が原因のようだ。 ちなみにUnity5.3.5f1での確認。 追…

UnityでiOS向けにビルドした際に、iPadPro用のAppIconが設定されない話

Unity5.2.3f1使ってて、iOS向けビルドしたものをiTunesConnectへアップしようとしたら警告が出た。 iPadPro用の167x167のAppIconが設定されてない、とのこと。 確かにUnity側のアイコン設定に、そのサイズのものがない。 まぁいずれ対応してくれるんだろうけ…

Android版のビルド時に出たエラー

どうにもAndroidManifest.xml周りで、よく分かっていないがためにビルドエラーにハマる。 とりあえずさっき、下記の方法で一つの問題は解決したのでメモ。 stackoverflow.com Assets/Plugins/Android/res/values/version.xml を置くって話なんぞ知らんがな。…

XCode6から7にした時のトラブル対応メモ

XCode7にしてバイナリをiTunesConnectにアップロードしようとした際に、幾つかトラブルがあったのでどう対応したかメモを残す。 と言っても、解決した情報へのリンクだけど。

Unity5でGameCenterの達成項目を解除できないバグ対応

どうやらUnity5から、5.2.1時点でもまだ解決されていないバグらしい。hwks.hatenadiary.jp とりあえず下記に従ってネイティブプラグインで解決するか。qiita.com ところで、アプリバージョンアップタイミングから達成項目を追加する場合のテスト方法が分から…

Debug.Log()はかなり重いよ

ちゃんと計測してないんだけど、毎フレームあちこちでログ出力してるとかなりフレーム落ちる。 書き換えて周るのも面倒だなーと色々調べてたら、Debugクラスをグローバルスコープで定義して、単にDebugと書いている場合にUnityEngine.Debugではなく、自分の…

Application.LoadLevel()でのエラーハンドリング

ステージ毎にシーンを分けて作っていて、そのシーンを Application.LoadLevel("Stage" + n); って感じで読み込んでいる。 何らかのミスでそのシーンが存在しない場合はエラーになるが、調べた感じだとうまいエラーハンドリングが見当たらない。 Exceptionをc…

Web上で効果音を作れるサイト

http://jfxr.frozenfractal.com/# マシンによってはちょっと重いけど、これはなかなか使い勝手が良い。

UniRxメモ:ストリームが発火した回数を調べる

あるタイミングで発火するstreamがあるとして、 stream.Select(_ => 1) .Scan((a, b) => a + b) .Subscribe(x => Debug.Log(x)); とすると発火した回数を取れる。

Mechanimでアニメーションしながら、SpriteRenderer.enabledをスクリプトで触る際の注意

敵がスプライトアニメーションしていて、やられると点滅する。ということを実装しようとした。 スクリプトからSpriteRendererのenabledをいじることで実現できるはずだったのだが、何故かenabledがfalseにならない。 一時停止して直接Inspectorからenabled=f…

C#のprotectedの扱いはJavaとちょっと違うんだな

ちょっとハマったのでメモ。 Javaのprotectedと違って、C#のは同一クラスの別インスタンスからアクセスできないみたい。 そういう場合にinternalを使う。 「アクセスは現在のアセンブリに制限されます。」って説明がイミフだったけど、そういうことか。 clas…

LeanTween良さそうだな

最近試しにDOTween使ってみたけど、iTweenの方が使いやすいような気がした。 でもこれ見たらLeanTween良さそうだな。 次はこれ使ってみるか。 LeanTween Speed Comparison to iTween | Dented Pixel

Editor拡張が地味に楽しい

ゲーム実行前にあらかじめシーン上にPrefabを並べておきたいことがあって、数が多いし後で変えたくなるから何とかできんかなぁ、とEditor拡張をやってみた。 個数指定してボタンを押すとGameObjectを生成する、みたいな。 触ってみるとなかなかEditor拡張は…

Animationで拡縮や移動が反映されない現象

Inspectorで、AnimatorのApplyRootMotionがfalseになっていると反映されない。 OnAnimatorMove()を実装していると、この部分がHandled By Scriptと表示される。 自分の場合だとObservableMonoBehaviourを継承しているコンポーネントがあったので、そのために…

UniRxメモ:n秒後から始まるストリーム

Coroutine使う場合は yield return new WaitForSeconds(n); とするような処理を、UniRx使う場合はこんな感じになる。 observable.SkipUntil(Observable.Timer(TimeSpan.FromSeconds(n)) よく使いそうなパターンは、ひと通り書いてみて覚えるのが手っ取り早い…

名前付き引数

C#はこんなことできるのか。 これは良いなぁ、順序じゃなくて名前で指定できる方が、明確で分かりやすい気がする。 名前付き引数と省略可能な引数 (C# プログラミング ガイド)

ObservableMonoBehaviour使う時の些細な注意点

ちょこちょことミニゲーム作る中でUnirx使ってみてるんだけど、地味にハマった点。 ObservableMonoBehaviourを継承してUpdateAsObservable()使ってて、なーんかイベント来ねぇなぁ、って。 Update()の中でbase.Update()呼ばないとダメなんよ。 うん、至極単…