「Unity」カテゴリーアーカイブ

タワーディフェンスゲームを作る(9)

今回は、情報表示に使うための画像を生成します。
画像生成用のシーンを作成して、キャラを配置しては下記コードでキャプチャ、を繰り返します。

    private void CaptureImage(string filePath)
    {
        var texture = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false);
        texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        texture.Apply();

        var bytes = texture.EncodeToPNG();
        Destroy(texture);
        System.IO.File.WriteAllBytes(filePath, bytes);
    }

そして、できた画像がこれです。

次回は、これを情報表示パネルで実際に利用するあたりを実装します。

いい感じです。

タワーディフェンスゲームを作る(8)

今回は兵舎やタワーがクリックされたときに画面の左下にその情報を表示するあたりを実装します。

具体的に情報が表示されるところまで実装できればよかったんですけど、操作に応じて情報を表示するためのパネルが作るところまでの実装になりました。

次回は、この左下のパネルに所属ユニットの情報が表示されるあたりを実装します。

いい感じです。

タワーディフェンスゲームを作る(7)

今回はヒーラーを実装しました。

自分を含む体力の最も低い味方からヒールするようにしたら、えんえんと自分をヒールすることがあったので「他にヒール対象がいないときのみ自分をヒールする」という風に実装しなおしました。

これで基本的なユニットの実装が終わったので、ステージ作成に移行できます。
ただ、ゲームで実現したいことが

「最初は少し押され気味だけど、アップグレードしたら勝てるようになる」

なので、アップグレードの実装も必要かなと思っています。

ともあれ、いい感じです。

タワーディフェンスゲームを作る(6)

今回は敵が攻撃できるようにするあたりと、体力がゼロになった味方がリスポーンするあたりを実装しました。

今の所「こういう雰囲気にしたい」ってのが実現できてていい感じです。
ただ、マウスによる操作が自分でもわかりにくいのはなんとかしたいです。

今後はステージ作成もだけど、光源とかシェーダーとかの見た目の調整もしていきたいです。

タワーディフェンスゲームを作る(5)

今日は、敵味方ユニットの攻撃まわりを実装していきます。
具体的には

  • アニメーションイベントにダメージ計算の関数呼び出しを追加する。
  • 今は攻撃後にすぐ次の攻撃を開始してしまうのでウェイトを入れる。

を実装していきたいと思います。
そして、実装したのがこちらです。

Archer, Sniper 以外のユニットが攻撃するようになった。
本当は敵味方ユニットの次の行動を決める処理も作り直したかったけど、それは次回にします。

いい感じです。

 

タワーディフェンスゲームを作る(3)

今回は、RallyToFlag (移動先を示すフラッグ)に味方ユニットが移動するあたりを実装します。敵ユニットが移動するあたりは実装済みなので、そのあたりを参考にすればいいかなと思いながら実装開始です。

思ってたよりも修正点が多くて実装に時間がかかった。
「ああなってるコードをこう修正しよう」って具体的な実装が思い浮かばないときには、楽観的な見積もりになりがちだよなと思った。

ともあれ、とりあえず動作するようになった。

気づいた点

  • 目的地まで移動できないときの挙動がおかしい。(想定外)
  • 兵舎占拠の進捗が表示されない。(実装したはずなのに)
  • ゲームの途中で占拠した兵舎の目的地が (0, 0) になってる。

まぁ、このあたりは見直せば修正できると思うのでチケット管理システムに登録しておく。

次は、敵と味方が互いに攻撃するあたりを実装していきたい。

タワーディフェンスゲームを作る(2)

今日は、クリックしたさきに移動先を示すフラッグを表示するあたりを実装します。
フラッグ自体は少し前に Cube, Sphere, Cylinder を駆使して作った。

で、建物を右クリックした後にフィールド上を左クリックすると、そこに移動先の旗が配置できるようになった。やったぜ!

次は、味方ユニットを移動目標に移動させるあたりを実装したい。
いい感じだ。

タワーディフェンスゲームを作る(1)

タワーディフェンスゲームを作っています。純粋なタワーディフェンスではなく、少し RTS 要素を加えたようなゲームにしたい。今は、自ユニットを操作するための入力処理まわりを作成中。

現在の進捗はこんな感じ。

操作まわりを作り直したら、ユニットの移動先を指定できるようになる。
そうすると、基本要素は実装できたことになる。がんばりたい。

 

HTC Vive を使ったゲームを作りたい

体調がよくなってコーディングできる状態になったので HTC Vive のコーディングを開始した。

  • Steam VR Plugin ありがとう!
  • Update(), FixedUpdate() のどっちで何をすべきか忘れてるね!
  • Vive コントローラの操作をコンソール出力したいな。

ってあたりを調べながらやる。

Unity の Update(), FixedUpdate() のどっちを入力に使うべきかは検索したら下記ページがでてきた。 Google さんありがとう!
http://programming-ios.com/unity-update-fixedupdate-difference/

理解した内容を1行で書くと「Update() フレーム描画ごとに呼び出されて、FixedUpdate() は物理演算のときに呼び出されるから、物理演算の処理だけ FixedUpdate() に書こうね」だった。

SteamVR Plugin の SteamVR_TestThrow.cs のサンプルで入力処理を含めて全ての処理が FixedUpdate() に記述してあった理由はよく理解できてない。まぁ、気にせず進めようと思う。大丈夫、まだサンプルを作ってる段階じゃないか。動けばオッケーさ!

SteamVR の Prefabs フォルダにあった [CameraRig] をシーンに追加して、その Controller(left) / Model に下記 C# スクリプトをアタッチしたら動作した。
https://bitbucket.org/satofumi/vr_quest/src/21e36a750cf38cd01e5cbcabb862371682d1d519/vr_quest/Assets/Samples/ControllerSample_PrintInput.cs?at=default&fileviewer=file-view-default

楽しい!

SteamVR Plugin の使い方については下記ページを参考にした。
https://framesynthesis.jp/tech/unity/htcvive/

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

だいたい実現したいことは実装したので、細かなネタも含めて解説していきます。  前回からいろいろ実装したあたりを書くべきな気がしましたが、だいぶん忘れたので総集編っぽくゲームを起動してからのネタを記述していきます。

以下、基本的にネタバレしかないので、未プレイの人は、とりあえず遊んでください。
http://hyakuren-soft.sakura.ne.jp/ZundaClicker/

タイトル画面

では、タイトル画面から解説していきます。
最初はこんな感じに、どこにでもありそうな無難なタイトル画面だったのですが、

ZundaClicker_title

「ずんだ餅が降ってくる理由とか意味がわからない。 なんで?」 というコメントをもらったので、プロローグが表示されるようにしました。

ZundaClicker_prologue

プロローグの文章は、時間でスクロールするようになってて、ずんだ餅をなぜ穴に落としているのか、東北ずん子たちは何をしているのか、の説明が表示されます。 30 分くらいで考えた文章としてはいい感じの説明になっていると思います。 なので、遊んで確認して見て下さい
(タイトル文字列の「Zunda Clicker」が背景と重なって読みづらくなったのは気にしないことにしました。  「Zunda Mochi Clicker」じゃないの? ってあたりもです)

ゲーム中の演出

ずんだ餅を食べるずん子

では、東北ずん子のスキルを説明していきます。 このゲーム中では3姉妹とも詰まったずんだ餅を穴に落とすためのスキルを持っているわけですが、ずん子のみ姉妹と違うスキル、そう、ずんだ餅を食べることができる、というスキルを持っています。  その理由は、ずんだ餅を食べる画像素材があったのはずん子のみ、だからです。(見も蓋もないな…)

zzm_taberu01

このスキルがあるがために、ずん子は他の2人よりもスキルが発動しにくくなっています。 それはずん子に実装した処理ルーチンが

ずんだ餅が地面にあれば、そこに移動して食べ始める

ずんだ餅が詰まっていればスキルを発動する

適当に移動したりする

という優先順位になっているからです。
しかも、地面にあるずんだ餅を食べ終わるとずん子は寝ます。 寝てる最中はスキルが発動しないので、なおさらスキルが発動しにくいのです。 スキル、2つもあるのに…。

zzm_utubuse_a

まぁ、気にせずその2つのスキル「ずんだアロー」と「もちもちジャンプ」について説明しましょう。

「ずんだアロー」

文字通り、普通のもちを ずんだ餅に変えてしまう技なわけですが、降ってきてるのは最初から全部ずんだ餅なんですよね。 じゃぁ、このスキルをどう表現すればいいか、そう、簡単です。 普通の餅がなければ召喚すればいいじゃない、ってやつです。

ZundaClicker_shoot

実装としては「ずんだゲート」から餅が出現するようにして、矢が餅に衝突したときに、その餅を消して、新たにずんだ餅を生成するようにしています。 ときどき、生成されたずんだ餅の速度が早すぎて壁を突き抜けることがありますが、物質が変換されてずんだになるレベルのエネルギー量を考えると、それは当然のことだと自分に言い聞かせながら作ってました。 みなさんも、そう理解してくれると助かります。

「もちもちジャンプ」

このずん子が壁の中に入って餅を落とすスキル、これは実は「ずんだアロー」より先に思いつきました。 ずん子にスキルが2つあるのは「もちもちジャンプを実装したけど、ずんだアローを実装しないわけにはいかないよなー」って悩んだ結果です。

ZundaClicker_jump_drop

で、ずん子の足先にずんだ餅や壁との当たり判定のための透明な円があるわけですが、ここだけずんだ餅がない空間ができてます。 上の画像では足先に透明な領域がありますが、「見えるべきは足先ではなくて太ももではないか!」って気づいたので、透明な領域が太ももになるように最新版では調整しなおしました。 自分で気づけてよかったと思っています。

ZundaClipper_mochimochi
修正後

あとは、ずん子がジャンプしたときに茶色の壁を飛び越えて左右端から地面に落ちてしまうことがあったので、ずん子専用の見えない壁「ウォール・ずん子」が配置されています。 この壁のおかげで、ずん子の進撃は防がれているのです。

それから、みなさんお気づきだと思いますが、ずんだ餅に埋もれたずん子がときどきジャンプするのは呼吸をするためです。

ZundaClicker_fall_1 ZundaClicker_fall_2

最後に「もちもちジャンプ」で穴に落ちたずん子がアプリ外に落ちてくるやつ、作る前は「このネタ最高じゃね?!」って思ってたんですけど、作ってみたら案外普通でした。 面白さを作る前に評価するのは難しいですね。

きりたんの「きりたん砲」

パワーアップ前後で威力が全然ちがう「きりたん砲」ですが、最新版では爆発と同時に画面外に飛び散ったずんだ餅をデスクトップに描画するようにしました。

ZundaClicker_bomb_1 ZundaClicker_bomb_2

ずんだクリッカーを起動したまま開発してて、ときどきずんだ餅がデスクトップに飛び散るのを見て「あぁ、動作させてるんだっけ?」って思ったりしました。 現状ではアプリ外に出たずんだ餅ごとにプロセスを起動してるのですが、複数個のずんだ餅を描画する 1つのプロセスを起動する方が負荷が少なかったなー、と反省しています。

それから「きりたん砲」のカットインが「焼き払え!」って感じのポージングなのは大変お気に入りです。

ZundaClicker_cutin_kiritan

イタコの「ずんだ口寄せ」

なんというか「ずんだ口寄せ」っていうスキルの名称だけは決まったけど、どういう演出にすればいいかが全然決まらなかったです。  そのせいか、無難な作りになってしまってちょっと反省です。 ごめんね! でも ZPS (Zunda Per Second) は大きいスキルだから許してね!

ZundaClicker_itako_kuchiyose

クリア後のずんだ餅の登録

ZundaClicker_donate

登録のボタンを押すと、本当に貯めている数だけのずんだ餅が落ちてくるようにしました。  なので、登録するずんだ餅の個数が多い場合は延々とずんだ餅が落ちてきます。 それを見てると変な笑いがこみ上げてくるから不思議です。

それから、左下のずん子は固定せずに山盛りずんだ餅の中腹に配置して、落ちてくるずんだ餅に流されるように変更しました。 いい感じです。

ZundaClicker_mount_ticket

後から見なおしても、この処理を実装するときに作ったチケット(ソフトウェア作成タスクを管理するもの)は、意味不明な方に属すると思います。  (アプリ自体はネタを追い求めてますけど、ソフトウェアの開発自体は真面目にやらないと動作しないのでちゃんと管理してるのです)

さいごに

作ってて楽しかった。
ありがとう。

やる気になったら登録されたずんだ餅の個数をグラフ化するあたりを作ります。