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

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()呼ばないとダメなんよ。 うん、至極単…

UniRxを使いこなしたい

先日、Unityでの非同期処理やらにテーマを絞った勉強会に参加してきた。 まぁ主にUniRxの話なんだが、非常にためになった。 ダブルクリック検出ぐらいはよくサンプルで見かけたりするし、流石にそれぐらいは分かるのだが、 色々と応用的なことをしようとする…

Editor Console Proがとっても便利!

ちょっと仕事で、かなり厄介な不具合調査を行うことがあった。 これがもう手に負えないぐらい酷いコードで、対症療法的にネストを積み上げたif文だの、いまいち名前から機能を類推しがたいメソッド名やら、とにかく調査が大変だった。 ブレークポイントで止…

2D物理系コンポーネントのテスト

とりあえず無理矢理に色々突っ込んで動かしてみた。 https://dl.dropboxusercontent.com/u/3811281/unity_study/physics2d_test.html

何よりもまず見た目を良くしたい話

何となく適当なミニゲームを作りたい、と思った時に自分の場合だと見た目が一番問題になる。

弾を飛ばすが……

ボタンを押したら砲身ぽい場所から弾を飛ばす、というのがやりたかった。

FixedUpdate()がいまいち分からない

とりあえずググると Rigidbodyの値をいじるのはUpdate()ではなくFixedUpdate()で行なうこと FixedUpdate()でInputを参照しないこと となっている。 後者は、入力を取りこぼしうるからってことらしい。 まぁそれは分かんなくもないんだけど。 実際のところ、…

名前付き引数

へぇ、C#には名前付き引数ってぇのがあるのか。 名前付き引数と省略可能な引数 (C# プログラミング ガイド) これはたまに使いそう。 あまりよろしいことではないが、なんだかんだで引数が増えていったり、ちょっとだけ挙動変えたくてフラグの類とか追加され…

タイヤがビヨビヨになる原因

面倒臭くなると放置しがちで、でもそれをそのままにして他のことをやる気になれない難儀な性格が恨めしい。 とりあえずタイヤがビヨビヨになる問題の原因は分かった。

Unity5が来た!

昨日から風邪で寝込んでいたせいで情報をキャッチするのが少し遅れたが、Unity5がリリースされたらしい。 とりあえずDLしてUnity4.6で作ってたプロジェクトを開いてみたが、手元にあるものは問題なく動いた。 細かい追加機能とかはまだ把握してないけど、何…

UnrealEngine4が無料化された

UnrealEngine4が無料化されたらしい https://www.unrealengine.com/ja/blog/ue4-is-free

Unityエディタから追加したC#スクリプトのテンプレートを変更する

微妙に自分のスタイルと違っていて、毎度直すのが面倒なのでテンプレートを変更することにした。C#の文字エンコードとNewBehaviourScript.csのテンプレートファイルあたり - 俺がぐったり部だ! C#の文字エンコードとNewBehaviourScript.csのテンプレートフ…

タイヤがビヨビヨする

昨日に引き続き、しょうがないので適当なSprite置いてWheelJoint2Dとか付けてみたんだけど、なんかうまくいかない。 タイヤがビヨビヨする。 なんだこれ。

2Dのプリミティブが欲しい話

あまり触ったことのないヒンジやらバネやらのジョイントを試してみようと思った。

Coroutineを理解した

使い方は分かるし、実際使ってもいたけど仕組みをようやく理解した。 なるほどなぁ。スッキリした。 複数のCroutine使ってて、実行順序で結果に影響与えるような場合に、自前で実装して制御するとかもいいのかも。 いや、そもそもそんなケース自体が、すでに…

.gitignore設定

UnityをGit管理するときの.gitignoreメモ - Qiita UnityをGit管理するときの.gitignoreメモ - Qiita

AssetStoreのセール情報をチェックする

AsseStore Madness Saleってぇのがあるらしい。 Asset Store よく分からんが、不定期でやるセールの名称ってことなのかな。 下記RSSを登録しといて、セールタイミングで面白そうなアセットとか買っておこうかな。 http://u3d.as/feed/discounted.rss

2D Loguelike の続き

03.Creating the Tile Prefabs 単純作業。 先にどういうゲーム作るか考えた時点で、タグとかレイヤーとかを上手く定義しておくといいんだろうな。 何となくで置いていって、後から定義して直すとかやりがちだし。

値を範囲内に丸め込む

Mathf.Clamp()なんてぇのがあることに気付いた。 これは便利だ。 今まで Mathf.Min(max, Mathf.Max(min, x)) と書いてたけど Mathf.Clamp(x, min, max) になってスッキリする。 Unity - Unity Manual Unity - Unity Manual

チュートリアル:2D Loguelike

最近出たチュートリアルをやってみることにした。 Unity - Project: 2D Roguelike Unity - Project: 2D Roguelike

Animationを線形補間させない方法

複数のSpriteからなるキャラクターにAnimationを付けようと思った。 待機モーションで頭部が上下にカクカク動くようにしたかったのだが、普通にAnimation作ると線形補間されて滑らかに移動してしまう。 どうすればカクカク動かせるものか、と色々調べてよう…