「ゲーム」カテゴリーアーカイブ

Unity を使って縦シューティングを作ろうとしてみた

前回のジャンプする何かに引き続き、縦スクロールシューティングを作ろうとしました。
で、途中で挫折しましたが、その挫折するまでの経過と挫折した理由を書き出します。

作ろうとしたもの

ゾンビがわらわらと出現するのを、ショットガンで撃つようなゲーム。

zombieshot_idea

主人公を操作できるようにした

主人公のアニメーションを定義して、指でのスライド操作にしたがって動作するようにした。
素材は「ぴぽや」のものを利用した。 http://piposozai.wiki.fc2.com/

zombieshot_animator

ちゃんと調べた結果、前回よりもアニメーションのステートをシンプルに作れた。 調べることが大事なのが再確認できた。

ゾンビを出現させた

zombieshot_zombies

もとは肌色だった村人の絵を Gimp で色を変えてゾンビっぽくした。 で、それを1秒毎に画面中央に配置した結果、ゾンビが出現するたびに外側に押し出されて、ちょっと怖いスクリーンショットになった。 主人公とゾンビの描画の重ねあわせ順が変なのは気にしないことにした。

zombieshot_rotate

あと「Z 軸で回転しない」のチェックを忘れてたせいで、宇宙遊泳な状態になったりもした。

弾が発射されるようにした

ゾンビが画面上の外側から出現するように調整して、弾を一定間隔で自動的に発射するあたりを実装した。 最初は間違えて右側(ゼロ度)の方向に弾を発射するように実装したけど、修正して上(90 度)の方向に発射されるようにした。

zombieshot_bullets5 zombieshot_bullets5_front

作っててワクワクしなくなったので中断した

ここまで作ったときに「次は弾の命中処理、命中後の処理、ゾンビの体力表示か。 判定のあたりはレイヤー使えばいいか、めんどいな…」って思ってそのまま更新しなくなったので、中断することにした。

仕事ではなくて趣味でやってることなので「作ってて楽しい!」 って思っているうちに一気に作るべきだったと思う。 時間をかけると、どうしても作った直後の高揚感は減る。

まとめ

縦シューは、縦シューを好きな人が作ればいいと思った。 私はもっと…、こう…、私しか作らないような意味のわからない何か作ろうと思った。

あと、最初に Unity で作ったのがそれっぽく動いたせいで「よし、ちょっとカッコイイものを作るぜ!」って思ったのもよくなかった。 変にカッコつけようとすると実装は進まない。 カッコつけるのは Lisp だけでいいと思うんだ。 このブログはもっと適当にいろいろ書こうと思う。

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

Heroes of the Storm プレイ記録(10/9)

知人に説得されて Hero League をプレイ中。 今日も、負けたゲームのリプレイから「これは良くないかも」ってシーンを抜粋しました。

少ない体力で頑張るのは危ないかも!

HotS_2015_1009_2252_2
あ!
HotS_2015_1009_2252_1
あ!

命を粗末にするの、よくないなと思った。 死ぬと生き返るまでの時間が無駄になった上に拠点に戻ることになるので、最初から拠点に戻るようにしたい。

Heroes of the Storm のスクリーンショットのプレイヤー名をぼかすプログラム作成

ブログ記事を書くときに、スクリーンショットのプレイヤー名にボカシを入れる処理を、毎回やるのが面倒そうなので、そういうプログラムを作ってみました。

方針

引数でスクリーンショットの画像ファイルを渡すと、プレイヤー名の位置にボカシを入れた画像ファイルを生成することにします。

実装

OpenCV の matchTemplate() を使って、用意した体力フレーム画像とマッチングを行います。
具体的には、赤青それぞれのチームの以下のような画像をゲーム中の画像から切り抜いて用意しました。 jpg 画像から切り抜いたせいか、微妙に各チームの色味があるのがわかります。

blue_frame red_frame

ソースコードの処理概要は、引数で渡された画像を読み込み、枠のテンプレート画像とのマッチングを順番に行っていることくらいです。 難しくないです。

ソースコードへのリンク

動作例

hots_training_clipped hots_training_clipped.png.masked

このくらいの重なりぐらいなら、適切に処理できます。
(名前でない場所にボカシを入れたり、名前のある箇所を検出できなかったりすることもあります)

ソースコードの場所

下記アドレスで Mercurial 管理しています。
https://bitbucket.org/satofumi/hots_tools

今後の予定

もう少し自分で使ってから、Windows 版を作成して配布します。(使ってみたい方は、お知らせ下さい。大喜びでお渡しします)
あとは、このプログラムとは別ですが、ゲーム中の視線を記録してミニマップを見るよう矯正したり、脈拍を計測して自分にどういう影響があるかを可視化するプログラムも作っていきたいと思っています。

Heroes of the Storm プレイ記録(10/4)

Heroes of the Storm の Quick Match で負けたときのリプレイを元に悪かったシーンについてコメントしていこうと思います。 Hero League でない理由は、怖くて Hero League できないチキンだからです。

体力に見合った戦いをしよう編

hots_2015_1004_1744
同じレーンの味方が回復に戻っているとき。この数秒後にゲート外にでた Valla は死亡…

Valla さんへ
あなたの体力は少ない方なので、ゲートから外に出るときは体力が回復してからの方がいいと思いました。 あと、無理にゲートの外に出なくてもいいのよ?

集団行動をしよう編

hots_2015_1004_2010_01
Zagara さん、一人だけ残ってタワーを攻撃するのは危ないよ?
hots_2015_1004_2010_02
Zagara さん、一人だけで敵陣よりのキャンプを攻撃しに行くのは危ないよ?
hots_2015_1004_2010_03
Zagara さん、一人だけで相手の5人の Boss 狩りにちょっかい出すのは危ないよ?

序盤に2レベル差がつくくらい勝ってしまった結果、ナメプして集合しなくなって負けてしまうの悲しい。

Unity を使ってジャンプするゲームを作ってみる

Moai SDK は好きだけど情報量が少なくてつらいので、Unity を使ってみることにしました。 まずは、簡単にキャラクタがジャンプしてブロックを登っていくようなゲームにします。

jump_app_720

イメージはこんな感じです。
で、詳しい作り方はそれっぽいサイトに任せることにして、作成途中のスクリーンショットと感想だけ書いていこうと思います。

TapJump_map

ここまでで Prefab 化したブロックを生成するようにした。 最初は手動でブロックを配置しようとしたものの面倒なので C# から生成するようにした。 マップエディタを使っては? という案もあったが学習コストがマップ規模に対して高い気がしたので見送った。
マップの背景とブロックの素材は「ぴぽや」というサイトのものを利用しています。

TapJump_platform

プロ生ちゃんのサイトからキャラクター素材を持ってきて利用した。
http://pronama.azurewebsites.net/pronama/download/

ここまでに Platform Effector 2D とキャラクターのアニメーションまわりとかを設定した。
Platform Effector 2D をブロックごとに適用するとキャラクターがブロックの継ぎ目で立ち止まったりすることが確認できた。 つらい。
なので、Platform Effector 2D は高さが同じブロックに一括で適用されるようにした。

TapJump_goal

画面にラベルを配置したりして、ゴールに触れたらゴールのアニメーションをするようにした。 ゴール直前でジャンプすると、落下しながらピースしたりと諸々の問題はあるけど気にしないことにした。 Web GL 版が、下記ページから遊べます。
http://hyakuren-soft.sakura.ne.jp/TapJump/

Web GL 版で表示を最大化すると画面枠が適切に表示されないのは…、仕様です!
(今、記事を書いてて試してて新たな実装間違いに気づいたけど、気にしないことにします。

この記事で作ったソースコードは、下記プロジェクト中の TapJump 以下にあります。
https://bitbucket.org/satofumi/unity_learning

カードゲームを考える

ボードゲームで遊ぶと、自分でも作りたくなってくるので考えてみた。 あまり難しいルールを考えると発散しそうな気がするので、シンプルなルールなものを考える。

じゃんけんをテーマにした2人対戦ゲーム

遊び方

  • グーチョキパーの各カードを2枚ずつ用意し、シャッフルして2人に3枚ずつ配る。
  • 配られたカードを手札とし、1枚ずつ出して勝負する。 これを3回繰り返す。
    • 使ったカードは、残りの勝負では使えない。
  • 3回の勝負で勝ち数が多いほうが勝ち。

card_2015_06_22_01

感想

  • 手元にグーチョキパーの3種類が来た時は、初手に有利不利がなくて微妙。
  • 手元にチョキx2, パーが来ると少し不利に思えてげんなり。
  • 相手が何をだすかわからないので先読みが深くならない。

拡張

少し拡張しようと思う。 拡張ルールは以下の2つ。

  • じゃんけんカードとは別に「効果なし」x2, 「強さ反転」x1 を各自が持って勝負のたびに1枚を使うことにする。
    • 使ったカードは、残りの勝負では使えない。
    • 強さ反転を2人ともが出した場合、本来のじゃんけんの強さで勝負する。
  • 「オレはグーを出す」など、カードを公開して勝負に挑むことができる。
    • 公開して勝負に勝った場合、追加の勝利ポイントを得られる。
    • 公開して負けた場合、相手が追加の勝利ポイントを得る。
    • 強さ反転カードを使う、使わないが重要になる。

ここまでの結論

「とりあえず簡単なジャンケンで」って思って考えだしたけど、結構複雑になりうるのがわかった。 あと、将棋やオセロなどでは次の手がある程度は予測できるので先読みができるが、このルールだと先読みがしづらい気がする。 (相手は何を出すんだろう?)っていうモヤモヤのみが大きくて、爽快感の少ないゲームなのではないか、って気がする。

ぶっちゃけ、考えただけでプレイしたわけではないので、遊んだらまた追記するかも。

「パーティ型戦術ゲーム」を作ろう(その2)

第1回に引き続き、今回は「睡眠の大事さ」について思ったことを書こうと思います。 本当は、もっと早くこのテーマについて書きたかったのですが、なんか眠くてだるかったので伸び伸びになってしまってました。

睡眠の大事さ

よく言われてることですが、寝不足になってくると以下のような問題があるように思います。

  • だるい。
  • 眠い。
  • やる気が起きない。
  • いろいろ面倒に思う。
  • 難しいことが考えられない。
  • 焦燥感がある。

書き出してみましたが、どれもこれも良くないオーラな単語ばかりですね…。

私の場合、

「寝るまでゲームするか」→「夜ふかし」→「寝不足!」
「寝不足で難しいこと考えられないし、ゲームでもするか」

という悪循環に陥っている気がします。
なんだろう、書き出してみて悲しい気分になってきました…。

睡眠を確保するために

ここで「夜ふかししてしまうゲームが悪い!」と、ゲームのせいにしてもいいのですが、もう少し前向きに対処方法を考えてみようと思います。

  • 寝る前に何かしようと思ったら、読書をする。
    • 光る画面を見続けるよりは眠くなりやすいはず。
  • 眠かったら、二度寝してから活動する。
    • 授業開始や出勤時刻については考えないものとする。
  • 規則正しい生活習慣にする。(努力目標)

今後は、これらを意識してみます。

そして、次回こそはゲームについての記事にしたいと思います。

「パーティ型戦術ゲーム」を作ろう (その1)

このシリーズでは、ゲーム作成の過程として「ゲーム作成の進捗があれば、その内容」を、そして「ゲーム作成の進捗がなければ、なぜ進捗がないか」を記述していく予定です。

さっそくですが第 1 回から進捗が思わしくなかったので、現状はどういう心境で開発していて、どう対処すべきかを検討したいと思います。

(実際の開発の更新具合はプロジェクトへのコミットログから確認できます。
https://bitbucket.org/satofumi/mhack/commits/all

強く「ゲームを作りたい」と思うのは、いつか

主にゲームをしているときに、「私ならこうじゃなくて、こういう風にしたゲームを作りたい」って思う。 これはおそらく、ソフトウェアエンジニアがエレベータが複数あるようなビルでエレベータを待っている時の

「エレベータが来るの遅え! オレならもっと良いアルゴリズムを作るのに!」

っていう状況に似てるんだと思う。
で、私の場合、思いついたゲームの仕様を書き出してから最初のソースコードを定義するところまでは実装するも、作ったことのない新しい機能を検討するあたりで中断する傾向がある。

開発し続けるには、どうすればいいか

開発を中断は、1日、そして 3日と開発しない日が続き、そして2週間くらいしたら「よし、もういい」ってなるように思う。 なんというか、ただの言い訳に思える。

とりあえず今後の対処案として

  • 朝起きて最初に開発する。
    • ちょっとでもいいので更新してコミットする。
    • 先延ばししない。
  • アイディア書き出しの時間を確保する。
    • 会社帰りにジムの休憩スペースでやるのが良さそう。

ということをやっていこうと思う。
今から。

電子の動きを制御するゲームの作成 (その2)

残りタスクの書き出しと優先度の定義

自前のチケット管理システムにチケットを作成したので、それの画像を貼ります。 上の方にあるほど、優先度が高めです。

electfic_playfield_tickets

順番に片付けていこうと思います。
せっかくなので〆切を決めると、優先度が黄色い矢印のタスクの完了を来週中に終わらせます。