FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・ジン・ラミー』を公開しました。
    Android/iOS https://goo.gl/PYKFYG

    2016年04月

      このエントリーをはてなブックマークに追加 Clip to Evernote
    トランプ・スピードがゲームのカードのカテゴリで新着無料の1位になりました。

    ranking-1st-ss-ts

    何百ものアプリがひしめくカテゴリに比べれば、カードは大分空いています。目的達成の難易度はともかく1位になったのはとてもうれしいです。どれくらいランキングを保てるかはわかりませんが、長く遊ばれると良いなと思います。

    アプリのプロモーションのお誘いのメールがいくつか来ていました。ランキングを見て選んでいるからだと思います。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    トランプ・スピードを作るのにかかった時間は約54時間でした。予想よりも大分かかったというのが感想です。

    時間がかかった理由は、リアルタイムにカードを出していく処理をどのようにして作るかという試行錯誤とスピードっぽさを出すことに苦しみました。
    スピードでは次々にカードを出して相手を圧倒するものなので、カードを選んだタイミングにより出せたり出せなかったりします。この処理が厄介なのは出す順番が決まらず、しかも出し終えるのを待たずに次のカードが出されるという点です。これをどう実現するかは作る人によるので、ここがスピードのアプリの特徴にもなります。
    私が思うスピードっぽさは、相手と同じ台札にカードをつけようとするときにどちらかが失敗するところ(カードがぶつかるとでも言いましょうか)とカードが出せなかったときに自分の場札に戻すところです。どちらもミスについてです。このプレイ中の失敗を相手に起こさせ、自分が起こさないように注意するということがスピードっぽさにつながると思います。


    苦労したこともあって、結構よくできたと思います。
    現時点のカテゴリ別の新着ランキングは6位です。これはなかなか良いスタートだと思います。上にスピードのアプリがあるので、題材が被ってしまっています。 被らない方が良いでしょうけど、スピードはそれだけ需要があるということだと思います。
    トランプのアプリを作る上で人気のゲームを作るというのは重要だと思います。やはり遊んでもらわないと意味がないですから。
    簡単に遊べますので、知らない人も是非遊んでみてください。シェアとかして頂けると喜びます。
    ranking-ss-ts

      このエントリーをはてなブックマークに追加 Clip to Evernote
    トランプ・スピード」をリリースしたので、次はどんなものを作ろうかと考えています。

    まだまだ作りたいトランプゲームはあるので、それを作るのも良いです。大富豪、アメリカンページワン、ポーカー、セブンブリッジなどです。作るのにはそれなりに時間がかかる(50時間~)でしょうし、トランプゲームのアプリを3つ作ったこともあり、次はトランプゲーム以外を作ろうと思っています。

    それでトランプ・スピードの完成前のテスト時期から3Dのゲームを作ろうとしていました。TPS的な操作をスマホ向けでできないかと考えてできたのが以下のものです。
    カメラ操作が右側、移動が左側のコンシューマーゲームでよくある操作です。画面のどこからドラッグを開始しても良いので、指の位置をわざわざ特定の位置に持ってこなくて良く非常に操作がしやすいと思いました。ただ、スマホにしては操作がしやすいというだけでコントローラーによるものと比べては全然駄目でした。画面をドラッグするというのがアクション性が高いゲームだと邪魔になるし、ドラッグ自体が素早く正確な操作に向かないという感じを受けました。
    爆弾を投げ合って戦うようなTPSゲームを作ろうとしていたのですが、これだと上手い人ほど操作に不満が出そうだと思います。PC向けとして作るなら良さそうだと思っているので、STEAM向けとかでいつか作るかもしれません。

    カメラ操作と移動操作を正確に行うことが難しかったので、ボードゲームのようにマス目を移動する方法を作りました。カメラ位置は自動で追従し自分では操作しません。これだと操作ミスは起こらないと思うので、この方法で作っていきます。
    ちなみにゲームはパズルゲームになる予定に変えました。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Invokeという便利な関数があります。これは好きなメソッドを何秒か遅れて呼ぶという機能です。ある時点で発生することは確定するが、少し遅らせて処理をしたいという時に使うと簡単に処理ができて便利です。

    「ボタンを押したときにSEが流れて、それからWebページに飛ぶ」という処理を作るときにこれを使いました。ボタンを押した瞬間でSEを再生するのですが、同じタイミングでWebページに飛ばしてしまうと制御がブラウザーの方に切り替わってしまい、SEが途切れてしまいます。
    これを防ぐため、 ボタンを押した瞬間でSEを再生し、同じタイミングでWebページに飛ばす処理をInvokeで予約しておくのです。0.5秒ほど(SEの長さによります。)遅れてWebページに飛ばすにはInvoke("GoWebpage", 0.5f);というようにします。

    すぐに処理を行わないので、1度しか実行したくない場合でも複数回実行してしまうミスが起こりやすいです。フラグによる制御でも良いし、CancelInvokeで呼ばれているものを消してからInvokeしても良いです。IsInvokingを調べて予約されていたら、Invokeしないというのでも同じことです。

    何回も処理を呼ぶInvokeRepeatingというのもあります。 間違って使うと処理の流れを複雑にしやすいですが、処理の遅延を簡単に書けるのは重宝すると思います。
    Invokeで呼んだ中でInvokeを呼ぶような構造にすると、厄介なので遅延のために1回だけ使うような単純な使い方が良いと思います。

    InvokeはMonobehaviourのメソッドで、アタッチしたゲームオブジェクトが消えると呼び出しは破棄されるようです。Invokeで重要な処理を呼ぶときは、ゲームオブジェクトが破棄されないようにしておくことになります。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    4/17に『トランプ・スピード』をリリースしました。
    title

    トランプゲームの「スピード」を遊ぶことのできるアプリです。名前の通り相手より素早くカードを出すことが重要なゲームです。一般的なトランプゲームと違い、スポーツ的な要素がある点が特徴的です。

    自分の場札をタップすると自動で出せるところにカードを出します。出せないカードをタップした場合は移動が時間的なペナルティとなります。
    下の動画を見ると、結構素早く出していかないと相手に負けてしまうのがわかります。いくつか難易度があるので、徐々に難しくしていくのが良いと思います。
    ts-demo

    トランプ・スピードでは以下のルールを採用しています。
    • 同じ数(ランク)のカードがあっても場札は重ねない
    • AとKはつなげることができる
    • 同じ数のカードを出すことはできない
    • Jokerはない

      このエントリーをはてなブックマークに追加 Clip to Evernote
    レビュー依頼をすることはGoogle Playで可能です。
    規約に違反するような可能性もあるので注意が必要なものではあります。公式の説明に違反の例があります。評価に対し報酬を与えるなどして、評価を操作することがいけないとあります。「★5の評価をしてくれたら、○○のアイテムをあげます!」とかは違反だということです。

    レビューについてやれることは、レビューのページ(アプリのあるページのこと)へのリンクをアプリ内に置くことだけです。ボタンを押したらレビューのページに飛ばすということが唯一許されています。以前は公式のページにもユーザーにレビューを求める例としてダイアログの画像があったのですが、今は消えています。したがって、将来的にはレビューをすることを頼むことも禁止されるかも知れません。

    良いレビューが増えるとランキングや新しくアプリをダウンロードしようという動機付けに一役買うでしょうから、アプリにレビューを依頼する処理を作ることは良いかもしれません。レビューしやすくなったために悪口ばかり増える可能性もあるので、単純にリンクを作るというのは駄目な気がしています。
    レビュー内容についての操作は違反なので、レビューの依頼で表示する文言は「レビューをお願いします。」というだけになります。下のような感じです。(レビュー依頼の実装は『トランプ・スピード』のものです。)
    request-review-dialog

    しかしながら開発者側に意味あるレビュー(アプリの内容に具体的に触れていて、使ったことのない人にもわかるようなもの。その上で……できれば好意的なもの。)が増えてほしいから、レビュー依頼を作るわけです。文言を変えずにそのようなことをするには、レビュー依頼のダイアログを表示するタイミングを設定するのが良いと思います。
    良いレビューをするには繰り返しアプリを遊んでもらう必要があると思います。そのため何回もリザルト画面に来ているなら、レビュー依頼をするというようにしてみました。「後で」以外のボタンを押した場合は、この後でダイアログを出すことはありません。そうすることで望んだ人以外はダイアログを何度も見ることにならずゲームの進行の邪魔をしないようにしています。

    レビューページへの遷移は、
    Google Play上のアプリのURLに飛ばすだけで可能です。レビュー依頼をするかというフラグとリザルトに何回来たかをセーブデータに持つことで何回も遊んだ人だけにダイアログを出すということが実現できます。やってみると意外と簡単な処理だと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ゲーム開発は時間がかかります。やみくもに作ってみると、完成しなかったり延期になったりするのが普通です。開発時間の長い規模の大きいものほどそれは起こりやすいです。長い時間を管理するのは難しく、せいぜい把握できるのは数日くらいです。

    ゲームを作るときに数週間先に何の作業をやっていて、どれくらい完成しているかという予想ほど役に立たないものはありません。予定というのは目標であると理解してください。あなたがゲームを作ったことのないスポンサーだったら、「なぜ予定通りに進まないのか」と憤慨することでしょう。それはゲーム開発における予定というのがあやふやなものだからです。
    通常、予定というのはやるべきことが分かっています。 多くの場合、同じ作業の繰り返しです。したがって、1回の作業にかかる時間がわかるにつれてどれくらいの時間がかかるのかがはっきりしてきます。また、過去に行ったことであれば予定が立てやすいでしょう。わかりやすい例で言えば、事務作業です。定型的な作業であり、同じようなことを繰り返すものです。作業同士が関係が希薄になっているというのも重要です。これとこれは順序立ててとかセットであるというように関係があると、制限がつくのでやりにくくなります。
    やるべきことが明確でなく場当たりてきな対処の連続であり、過去の成果に影響され続けるというのがゲーム開発です。このような特性はスケジュールを立てるということに対し無理があります。おおまかな予想と少し先のことをどうするか決めるのが現実的なところでしょう。

    開発の初期はゲームは動きません。困ったことにゲームの一連の流れを確認できるのは始まってからずっと先のことです。こういったものを作りたいという仕様があり、実装できたのが1カ月後ということも普通です。その時に確認してみると、微妙なものになっているということもあります。他の部分の挙動の変更や予定通りにできなくなってしまったことがあったというように原因は様々です。当然これでは無意味な作業だったことになり、作り直しとなります。
    今あるゲームに何をすれば面白くなるのかというのは、ある程度形になってから最後まで悩まされ続けます。この通りに作れば面白くなるということは大抵ないです。最初から言うとおりに面白くはならず、ちょっとずつ加えたりなくしたり変更したりして、徐々に面白くなることが多いです。試行錯誤というのはスケジュールを遅延させます。品質のためには必要だと思いますが、非常に時間がかかることを許容できなければなりません。

    ゲームを作るのが難しく、またそのスケジュールを立てるのが難しいというのも理解できると思います。やるべきことがわかり、それが細分化されていくことでスケジュールは正確になります。細分化は一人で数日以内で終わる量の作業という程度までわけると見積もることができます。実際の作業はイラストを描いたり、BGMを作成したり、プログラムしたりと専門の人が見積もることになります。大きすぎる単位では見積もりができずあてにならないものになります。

    もしチームなど複数の人数で組んでゲームを作るなら、スケジュールの管理をあまり厳しくならないようにした方が良いです。スケジュールの管理を厳しくすることは、単純にやれることを減らしていくことになるだけだからです。
    作業にどれくらいの時間がかかるか聞かれた場合は、自分の見積もりの2倍程度(もっと多くても良い。少ないのはまずいです。)申告するのが良いでしょう。その作業に専念することは稀なので、それくらいはかかるものです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    3Dではキャラクターを動かす処理を作ることが多いです。UnityでもCharacter Controllerというものが用意されています。これをゲームオブジェクトにつけてスクリプトでMoveを処理してやれば、移動ができます。

    Character Controllerは簡単に移動処理が作れるのですが、物理挙動がなされないという特徴があります。コライダーとの衝突を検知してめり込まないとかは行われるのですが、他のコライダーにぶつかってもそれに衝撃をあたえるということはデフォルトでは起こりません。OnControllerColliderHitを使うと、他のコライダーにぶつかったときにどうするかが制御できますが、どのような力を相手に与えれば適切なのかというのは物理の知識が必要です。
    リアリティを追及するには多少の知識が要りますが、入り口が緩いのがCharacter Controllerだと思います。

    Rigidbodyを制御して移動を行う方法があります。Rigidbodyを使えば物理に沿った動きを自動的に実現してくれます。移動の制御をおこなうには、力を加えるか速度を指定するかで可能です。
    力を加える場合は自然な動きになります。AddForceを使って移動方向に押してやることになります。慣性があるので動き出しと停止時にすぐに反応することはなくなります。ゲーム的にレスポンスが良くなくなるので、使いにくいことも多いでしょう。また、力の働き方によっては移動ではなく回転の方に使われてしまい、毎回挙動が変わるということも起こります。とくに問題になるのが、短い時間に力が何度も入力されることです。この場合、一気に加速されることになります。
    速度を指定する方法は自然に反しますが、ゲーム的には使いやすいです。 ある速度に強制することで瞬時の反応が可能であり、入力が連続で起こっても問題が起きにくいです。
    これはRigidbodyを使ったキャラクターの移動になります。カプセル型のオブジェクトがキャラクターです。ジャンプの処理は、地面に乗っているかを判定し上向きに速度を設定するだけで可能です。地面に乗っているかの判定は意外と難しい問題がありますが、レイキャストをキャラクターから下向きに発射しぶつかったものが何かで地面に立っているかを調べています。

    このツイートで重要なのは、TPS的な操作を実現していて物理的な動作も可能になっているということです。カメラはキャラクターの周り(キャラクターを原点とする極座標として計算)に位置するようにしています。
     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    最近気付いたことなのでいつからある機能なのかわかりません。少なくとも今使っているUnity5.3.4f1 Personalには以下の機能があります。

    シーンビュー上で3D/2Dに関わらずゲームオブジェクトが重なってしまうことがあります。選択したいものの一部がクリックできれば選択状態にできますが、大きいものが手前に来るなどしているとクリックできず選択できないことがあります。

    シーンビュー上でクリックを繰り返すと、選択されるゲームオブジェクトが切り替わっていきます。クリックしたところにレイキャストして貫通したゲームオブジェクトを順番に選択しているような挙動をします。
    以下はUIでの例です。キャンバスが複数あり、UIは階層構造を持っています。クラブのQを選択したいのですが、上に重なっているUIがあるため直接は選択できません。何回かクリックすることでクラブのQが選択状態に切り替わりました。


    3Dでも同じようなことができます。2つのときはうまくいったのですが、3つ以上のゲームオブジェクトが重なっているときはうまくいくこともあれば、選択できないこともあったのでよくわかりません。
    あと位置移動のためのギズモをクリックしたときは選択切り替えは起こりません。それはゲームオブジェクト平面上で動かすためのショートカットが優先されるからです。


    重なったゲームオブジェクトをシーンビュー上で選択するには、そのゲームオブジェクトがあるところを何回かクリックしてみると良いです。これに慣れるとUnity UIを作るのが楽になります。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    開発中の『トランプ・スピード』の紹介動画を作ってみました。
    スピードというトランプゲームは有名なゲームなので、どのようなものかは改めて説明しなくても良いでしょう。どんな感じのアプリなのかというのは実際に遊んでみているところを見るのが一番良いので、動画を作成してみました。

    YouTubeとニコニコ動画にアップした紹介動画を載せておきます。内容は同じですので、お好きな方をどうぞ。




    難易度をいくつか用意する予定です。この動画の難易度は通常レベルです。これより弱いのと強いAIも用意します。
    スピードは出す速さを変えるだけでAIを強くしたり、弱くすることが可能です。ゲームのルールがカードを素早くだすというためにそういったやり方が通用します。それに頼ってしまうと何だかつまらないと思うので、難易度ごとに考慮すべき要素を変えていく予定です。

    このページのトップヘ