ねこバタ会議

スマホアプリ制作に関するブログです。

uGUIでボタンを設置しても反応しないこと、ありますよね。
最初は反応していたのに、色々と手を加えたら反応しなくなることがしばしばあり、非常に困りました。
Googleで調べてみたらハルシオンシステムさんのブログに原因が書いてありました。
uGUIはボタンとかコライダーがなくても押せるのはいいのですが、ボタンの親にImageとかついてるとそいつが邪魔して押せないみたいです・・・。
【Unity】uGUIスクロールでボタンを作ったんだよ・・:ハルシオンシステムの気ままBlog

ということで、ImageやらTextやらのオブジェクトが邪魔をするようです。
実際に見てみると、確かにそうなっています。

button

Imageがボタンの子要素となっていればいいのですが、ハルシオンシステムさんのブログにある通り親要素のImageが邪魔をすることもあります。
構成を変更してしまえばいいのですが、そういうわけにはいかない場合もありますよね。

そういう場合は、ImageなどのオブジェクトにCanvas Groupコンポーネントを追加して、Blocks Raycastsのチェックを外すと、そのオブジェクトの下に配置されているボタンをタップすることができるようになります。

button2

Interactableも大抵の場合はチェックを外してよさそうですね。
ボタンやスライダー等以外はデフォルトでブロック無効にしてほしいと思ってしまいますが…(^_^;)

相変わらずスキルレベルの低いところであれやこれや悩んでますが、私と同じような初心者の方には助けになる場合もあるかもしれないので、今後もメモ代わりに書いていこうと思います。

Unityを使っていると、Objective-CやJavaなどで作成するよりも簡単にできることが多い反面、今まで簡単に出来ていたことを実現するのが以外に手間だったりして、戸惑うことがあります。
特にUI関連はまったくもっていけていないと個人的には思います。

ということで、今回のテーマは「スクロールした時のみスクロールバーを表示する」です。

確かAndroidでもiOSでもスクロールした時のみスクロールバーを表示するのは簡単に出来たはずなのですが、Unityの場合は、これが一筋縄では行きません(私にとっては)。

ScrollbarにFade Durationという項目はあるものの、これはどうやらスクロールバー自体をクリックしてドラッグした場合などに色を変化させる時間を設定するためのもののようです(詳しくは分かりませんが)。

scrollbar

ではどうすればいいのかというと、これまたいくつか方法があるようです。
例えば以下のページにあるように、ScrollRectを継承した独自クラスを作成するのも、その一つです。

uGUI スクロールしてないときはバーをフェードアウト:Qiita

ただ、私の環境だと上記ページに掲載されているスクリプトは上手く動かなかったのと、エラーを見ても意味がわからなかったので断念しました。

ということで、ものすごく簡易的な方法をご紹介します。
それはScrollRectのOnValueChangedでスクロールバーを表示させるというものです。

scrollbar2

例えばですが、以下のようなメソッドを用意して表示させます。

    public void EnableScrollBar() {
        if (scrollBarEnabled == false) {
            scrollBarEnabled = true;
            scrollBar.SetActive(true);
            Invoker.InvokeDelayed(DisableScrollBar, 1.0f);
        }
    }

    void DisableScrollBar() {
        scrollBar.SetActive(false);
        scrollBarEnabled = false;
    }

表示した後は一定時間後に非表示に切り替えます。
ここではゲームがポーズ中の前提なので、前回の記事でご紹介したInvoker.csを使用しています。

実際に動いているところは以下の動画をご参照下さい。



本来はフェードアウトのアニメーションを実行すればいいかもしれませんが、面倒だったので入れていません。 例により、もっといい実装の方法があるかもしれませんので、あくまで参考程度でお考えいただければ幸いです。 

ご無沙汰しております。

久しぶりの更新となりますが、今後しばらくはUnityでの制作のメモを書いていくことにしたいと思います。

さて、Unityでポーズを実現するために一番手軽なのは、Time.timeScale = 0;として再生速度を停止してしまうことです。
ただ、停止中はアニメーションも止まってしまいます。

アニメーション用のメソッドを自前で用意してUpdate()内で実行すればアニメーションすることもできるかもしれませんが、Time.deltaTimeなどが使用できなくなる気がするので面倒くさそうです。

Time.timeScaleを使うのではなく自前でポーズ用の処理を作る方法もありますが、これもかなり面倒です。
なので、timeScaleを使った上でアニメーションさせる方法を紹介します。

まず、普通にアニメーションを行う場合は以下のページが参考になると思います。

 【Unity】時間を止めてもアニメーションさせる:Unity/cocos2d-x開発メモ

AnimatorのUpdate Modeを「Unscaled Time」にするだけなので、とても簡単ですね。
私はAnimatorを全く理解していないので、行き着くまでにものすごく時間がかかってしまいました。

ただ、当たり前の話ですが、この方法だとAnimationとして登録していないものは処理ができません。
いちいちAnimationを登録するのも結構かったるいものですし、遅延して処理を行いたい場合もあると思います。
その際に役に立つのが以下のページで紹介されているスクリプトです。

Unscaled time invoke? | Unity Community

ページ中にも記載されていますが、
Invoker.InvokeDelayed(実行したいメソッド, 経過秒数);
と指定することによって、Time.timeScale=0;になっていても遅延処理を実行することができます。
とても便利ですね。ありがたいことです。

というわけで、若干分かりづらいのですが、実際に使ってみたところを動画にしました。
メニューが表示されている時はゲームがポーズしていますが、メニュー開閉時などにアニメーションしているのがお分かりになるかと思います。



他にも同様の処理を実現出来る方法や、もっとスマートな方法もあるかもしれませんので、そこは調べていただければいいかと思います。

追記)以下の記事でDOTweenによるポーズ中のアニメーション実行について書きました。
コーディングでアニメーションしたい場合は、以下の方法が楽だと思います

 【Unity】DOTweenでポーズ中のアニメーションを実行する。

最近ご無沙汰しておりますが、ゲーム画面のレイアウトと仕様の詳細を決めるという非常に地味なところで延々と悩んでいるためですね。

まあしかし少数ながらもブログを読んでいただけている方もいらっしゃるので、ここで今北工業さんとっとこさんにならって、ワーズ・アンド・マジックのAndroid版のDL数の履歴を公開したいと思います。
iOSはiTunes Centerが非常に使いづらくてストレスがたまるので、やりません。
はい、建前です。本当はiOS版はよりリアルに切実なので、やる気になれないのでやりません。

DL数には波があるものですが、それぞれ何かのきっかけで上がったりしたところは、私の記憶にある事柄を記載しています。
ただ、全部を網羅しているわけではありませんし、他にも何かのきっかけがあったものもあると思います。


グラフ
こうして見ると、やはり牛丼の威力がものすごいですね…。

予約TOP10のスタートダッシュがとてもありがたかったのですが、ちょうどリリースから2、3日くらいGoogle Playのランキングが延々と更新されなかったのはとても痛かったなと思います。
また、1/8あたりにも突然DLされている日があるのですが、この辺りもGoogle Playのランキングが更新されず、急上昇作品の一覧も更新されなかったので、その後の継続につながらなかった記憶があります。 

今のDL数は平日が30~50、休日は50~60というところでしょうか。
多分、今後上がることはあまりないんじゃないかなと思いますが、新作を出した後は相乗効果もあるかもしれないので、がんばって出していきたいところです。

自分としては多くの方に遊んでいただけて、とても嬉しく思っています。
また、今後のためにもとても勉強になる作品でした。

新しい作品はこれを越えられるように、がんばって作りたいと思います! 

新作ゲームのUIのデザインにあれこれ悩み、色々なゲームをやっていたのですが、UIが一覧できるサイトがあれば便利かなと思い作成しました。

スマートフォンゲームデザインコレクション

ブログ1


タイトルの通り、デザインを集めたものです。
デザインの良し悪しを取り上げるものではなく、単に各画面を掲載するだけのサイトです。
以下のような感じで表示されます。

ブログ2


今はまだ収録数も少なく、ジャンルもソーシャルRPGに偏っていますが、今後メジャーマイナー問わず、幅広いゲームを取り上げていきたいと思います。

開発者の方以外にはあまり関係がなさそうなサイトですが、よろしければご覧ください。

本来なら独自サーバーでWordPressなりPHPで一から作るなりしたいのですが、時間もお金もないのでとりあえずライブドアブログの無料プランで作りました。
ギャラリーページをjQueryでさらっと表示できるようにしたいのですが、なにぶんCSSもJavaScriptも触るのが久しぶりすぎて分かりません。
そこら辺はおいおい対応していきたいと思います。

まずはコンテンツの充実を図らなくては!!
…ではなくて、ゲームを作らなくては…(^_^;) 

↑このページのトップヘ