ねこバタ会議

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

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も触るのが久しぶりすぎて分かりません。
そこら辺はおいおい対応していきたいと思います。

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

ストーリーのタイプにはいくつかの要素があると思いますが、私にとって一番重要なのは「登場人物の成長」です。

これは肉体的なことではなく、人格的な面での成長があるかどうかということですね。
ただ、「人格的な成長」と言っても、それは必ずしも社会倫理的に好ましいものでない場合もあります。
なので「人格的な変化」と言ってもいいかもしれません。

例えば、アダルト小説でよくあるパターンの1つとして、貞淑な人妻が頭では自身の行為を否定しつつも、だんだんと肉欲におぼれていくというものがあります。
これはこれで立派な成長なわけですね。 

この際に、細かい部分まで含めれば、成長しない物語なんてないじゃないか、という意見もあると思います。
その通りですね。何をもって成長したというのかも、読み手本人に委ねられるわけですし。
私の場合は「価値観の変化」こそが重要だと考えます。

先ほどの貞淑な人妻の例で言えば、自分を縛る倫理観に従って欲望に抵抗しようとするものの、やがて倫理観を放棄してしまうようになるという部分が、価値観の変化になるわけですね。

そういう点から見て、ゲームの場合でいうと、ドラクエのストーリーには私はあまり興味がわきません。
ターゲットを見据えた上でのマーケティング的な面も含めた完成度の高さは疑うべくもありませんし、ストーリーが面白くないということではありません。

ではなぜ自分にとって興味が無いのかというと、主人公がさまざまな困難を乗り越え、人々を救っていくというお話の中で、主人公自身の価値観の変化は私にとってはあまり感じられないからです。
これは欠陥ではなく、描く必要がないんですね。
プレイヤーは困難を乗り越えていく主人公の姿に自身の姿を重ね、感情移入していくように作られています。
この時、主人公があれこれ思い悩んでいたら、「自分はそんなところで悩まない」と、プレイヤーが冷めてしまうわけですね。
なので、主人公は「基本的に多くの人が正しいと思っている思考」にもとづいて行動しますし、それは殆どの場合最後まで継続すると思います(私は4作品くらいしかやったことがないので、詳しくはわかりません)。

このタイプは私の中では人格的に完成された主人公と考えています。
人格的に完成された主人公の場合は、主人公の成長は主に価値観の変化によるものではなく、自信の増加や同じ価値観をともにする仲間の存在など、主人公の人格を強化する方向によって描かれるように感じます。
マンガなどでも王道のパターンの1つですし、叙事詩の英雄譚などの主人公も、基本的にこのパターンが多いと思います。

人格的に完成された主人公を突き詰めていくと、全く成長しない主人公というのもあります。
これは主人公が成長する余地がないくらい成長しているものですね。
例えばソード・アート・オンラインのキリトなどはこのパターンだと思います。
全ての問題に対して華麗に解決していく姿を描くもので、学習や経験による問題解決方法の変化はあるものの、物事に対する態度にはほとんど影響しないタイプのものです。
主人公の問題解決を描くという意味では、叙事詩の英雄譚はこっちのほうに入ることが多いかもしれません。

小栗旬の主演で映画になった『岳』という漫画がありますが、この漫画の主人公はこのタイプですね。
ただし、漫画の方では主人公の成長を描くのではなく、主人公に触れるさまざまな人(一回限りの登場人物を多く含む)の心の成長(価値観の変化)を描いた作品になっています。
映画では主人公の超人的な活躍を軸として描かれるシーンが多く、個人的にはかなり不満の残る出来でした。

書いてて思いましたが、なんでドラクエから岳まで飛んでるんでしょうね。
まあ結局何が言いたいのかというと、私にとっては価値観の変化がない話にはあまり興味が無いので、自分で作るとしたら何らかの形で価値観の変化を描いた話を作るだろうなあということですね。

このグダグダ感。
テーマの選出以外にプロットの重要性がよくわかる駄文ですね。

追記。
キリトはよく考えたら最初は一人でやっていこうというところから、色々な出会いを経て、仲間と共に歩んでいくというような変化がありましたね。 
2部以降のキリトならそういう意味での成長はほぼないと思いますが。 

↑このページのトップヘ