月別アーカイブ: 2015年11月

ずんだ餅を転がすアプリをゲーム化し始めた (その2)

前回までで、

ZundaRolling_sisters

こんな感じだったアプリをゲーム化するべく実装を行っていった。 今回も淡々と何をやったか紹介します。 興味があればソースコードを見てもらえればと思います。

で、基本的にネタバレの嵐なので、まだ「ずんだ餅クリッカー」で遊んでない方はご注意ください!

スキル「きりたん砲」の実装

ずんだ餅が詰まったときに、きりたんが「きりたん砲」を撃って詰まりを解消したら面白いんじゃね? と思ったのがきっかけです。  「面白いかも! って思ったら作ってみる」が、今回の合言葉です。

ZundaRolling_kiritan_hou
まずは、きりたんが穴の下に移動し、きりたん砲を撃つポーズを取るようにしました。

ZundaRolling_fire_1
次に、 Detonator Explosion Framework を適用しました。

ZundaRolling_fire_2
なかなかいい感じだと思います。 実際には爆風エフェクトが Sprite2D より手前に表示されたり奥に表示されたりして、それの修正に時間がかかっています。 結局 Detonator 側の C# スクリプト内に Renderer の layerSortingName を設定するコードを追記して解決しました。

ZundaClicker_explode
このスクリーンショットなどは、姉たちが寝ているなかで「きりたん砲」をぶっぱなす感じが気に入っています。

ZundaClicker_cotinuous

つぎに、爆風だけだと微妙なので、Rigidbody2D を適用した透明なアセットを用意して爆風と同時に穴の下から上に移動する速度を設定して配置しました。 これで、爆風と同時にずんだ餅が微妙に飛び散って詰まりが解消されました。

で、連続で「きりたん砲」を撃ち続けると、餅が飛び散って積み上がってしまい、ずんだ餅が落ち続けてしまうのが確認できました。 これに対処するために、地面に落ちたずんだ餅はずん子に食べさせることにする決心をしました。 よろしくね、ずん子ちゃん。

ZundaClicker_cutin_kiritan

次に、カットインを作成しました。 「きりたん砲」を使う前に表示することにしました。 このカットインの背景素材も「ぴぽや」のものを利用しています。 いい感じです。

あ、このあたりのキャラクターが移動したり砲撃するあたりの処理はコルーチンで実現しています。 わぁい、コルーチン。 私、コルーチン大好き!

ZundaClicker_cutin_zunda_arrow
次に、ずんだアローのカットインだけ先に作ってみました。

ZundaClicker_giridan_hou
で、カットインの表示が重なると「ぎりだん砲ー」になるのが確認できました。 スキル発動は同時に起きないようにする必要があるのがわかりました。

ZundaClicker_zundamochi_oishiiyo
あとは、ノリと勢いだけでずんだ餅のカットインも作りました。 いい感じです。

ZundaClicker_dropped_eating
地面に落ちたずんだ餅を食べるあたりを、いろいろどうにかして実装したときのスクリーンショットです。(たしか

zunda_loop
それから、そろそろ紹介ページでも作るか、って思ってて作った悪循環コラがこれです。 インパクトが不足しているのでボツにしました。

ZundaClicker_jump_drop
スキル「もちもちジャンプ」を実装したり。

ZundaClicker_title
タイトル画面を作ってみたり。

ZundaClicker_itako_kuchiyose
スキル「ずんだ口寄せ」を実装したり。

ZundaClicker_english_logo
タイトル画面にロゴを適用したり。

ZundaClicker_shootZundaClicker_hitどういう実装にするか決まらなかった「ずんだアロー」を実装したり。

ZundaClicker_skill_cooldown
スキル発動までのクールダウン時間を表示するためのアイコンを右側に配置したり。

とかをしました。
まだまだ完成じゃないので、引き続き実装してます。

つづく!

このアプリのソースコードは、下記プロジェクトで管理されています。
https://bitbucket.org/satofumi/zunda_clicker

 

ずんだ餅を転がすアプリをゲーム化し始めた

以前に作ったずんだ餅を落とす脱穀機シミュレータを、ちゃんと Google Play とかでリリースすべく作り込みを始めた。 淡々と変更する様子のスクリーンショットを貼り付けながら、何を変更したのか簡単に書き出していく。

ZundaRolling_zps
ずんだ餅が落ちる速度 zps (Zunda Per Second) を表示するようにした。

ZundRolling_dropped_per_click
クリックしてない間に落ちるずんだ餅の数を表示するようにした。(右下)

ZundaRolling_background
背景画像を適用した。 草原だとずんだ餅の色と同じなので雪原にした。
(素材は東北ずん子のもの以外は「ぴぽや」の物を使ってる。

ZundaRolling_hole

ずんだ餅が画面下まで落ちていくのは違和感があったので、穴を描画してそこにずんだ餅が落ちるかのような表現にした。
穴の画像と、穴の下部分の画像を用意して実現した。

hole
穴の画像。これを左右に伸ばして使ってます。

hole_front
↑ここに穴の下の部分が白色で、それ以外が透明な画像があります。(見えませんが

ZundaRolling_zunko_import
次に、キャラクターを配置しようとして東北ずん子ちゃんの画像を取り込んだ。
取り込んだら、ちょうど足が穴にはまっていて吹いた。

ZundaRolling_sisters
他の姉妹も配置した。
あと、ここまでで Anrdoid の加速度情報でもタップしたのと同じ操作になるようにしたり、ハイスコア相当の値がゲームの起動をまたいでも保持されるようにした。

今後の予定としては「ずんだ餅を 1,000 個ほど落とそう!」とかの実績を追加したり、キャラクターが動作するあたりを実装しようと思う。

タイトル画面を用意するかは、悩み中。

このアプリのソースコードは、下記プロジェクトで管理されています。
https://bitbucket.org/satofumi/zunda_clicker

Unity の Window を透過させてみた

今回は Win32 API を呼び出して Unity アプリを実行させるウィンドウを透過させてみました。

作ろうとしたもの

Unity で exe ファイルを生成して、実行するとウィンドウ枠がなくなって、ウィンドウ背景も透過するようなものを作ろうとした。 最終的に、デスクトップマスコットとして動作させようとした。

途中経過

このフォーラム中のソースコードを書き写し、Query ちゃんと Cube とを配置して実行してみた。
http://answers.unity3d.com/questions/869378/viewing-desktop-in-scene.html

できたもの

こういう風にモデルを配置して
HowIsTheProgress_unity

実行すると、こんな風になる。
HowIsTheProgress_exec

 

感想、今後の予定

現状では、こんなふうに背景もモデルも関係なく透過しているので、個々の Win32 API の機能について調べたり、調べなおしたりして対処したい。

今回のソースコードは、下記プロジェクトのリポジトリ中の HowIsTheProgress です。
https://bitbucket.org/satofumi/unity_learning

Unity を使って狙ったところのオブジェクト情報を取得してみた

Grappling Hook でもって、クリックした先にフックを引っ掛けるような動作をさせようとしたときに、自キャラとカーソルの先にあるブロックの情報を取得しようとしてできなかったので、その情報を得るだけのサンプルを作ってみました。

作ろうとしたもの

画面内にブロックをたくさんと自キャラを配置し、自キャラとクリックした位置の先にあるブロックの情報を表示するサンプル。

途中経過

RayCastInformation_blocks

ブロックと自キャラ(緑)を配置した。

RayCastInformation_rays

Game ビューでクリックすると Scene ビューで Debug.DrawRay() の線が描画された。 あ、ここまででブロックには Blocks っていう名前のレイヤーを定義しておいた。

できたもの

動いた。 主なコードは下記の通り。

void Update()
{
  if (Input.GetButtonDown("Fire1"))
  {
     Vector3 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - OwnCharacter.transform.position;
     RaycastHit2D hit = Physics2D.Raycast(OwnCharacter.transform.position, direction, Mathf.Infinity, 1 << LayerMask.NameToLayer("Blocks"));
     if (hit)
     {
        Debug.Log(hit.collider);
        Debug.Log(hit.point);
      }

      Debug.DrawRay(OwnCharacter.transform.position, direction, Color.red, 10f);
   }
}

感想、今後の予定

ここまでに勘違いしてたことは

  • Physics2D.RayCast() の2番目の引数は「目的座標」じゃなくて「向き」であるということ。
  • Debug.DrawRay() の内容は Scene ビューにしか表示されないこと。

です。
正しく理解できてよかった。

今回のソースコードは、下記プロジェクトのリポジトリ中の RayCastInformation です。
https://bitbucket.org/satofumi/unity_learning

Unity を使って Grappling Hook を作ろうとしてみた

フックを使って天井にロープをひっかけて移動していくやつ。 今回はそういうのを作ろうとしてみます。

作ろうとしたもの

天井にロープ付フックをひっかけては進み、ひっかけては進みができるサンプル。

途中経過

GlapplingHook_blocks
ブロックを配置した。

GlapplingHook_rope
Hinge Joint を連続でつなげてロープを作った。

GlapplingHook_connected

ロープに自キャラを接続した。

GlapplingHook_fixed

ロープの質量を軽くしたり、自キャラへの重力の影響を変更した。

できたもの

この次に、自キャラとクリックした先の延長線上にあるブロックに新しいロープを作り直す、って処理を実装しようとして失敗した。 自キャラとマウスの先にあるはずのブロックの情報が適切に処理できなかった。 わからん。

感想、今後の予定

よくわからないので、仕切りなおすことにする。
次は、自キャラとクリックした先にあるブロックの情報を取得するサンプルを作ってみようと思う。

今回のソースコードは、下記プロジェクトのリポジトリ中の GlapplingHook です。
https://bitbucket.org/satofumi/unity_learning