2011-09-10
■ Unityで一週間で全方位シューティングを作ってみた(9) 【六日目】

再調整した仕様やゲームバランスがだいぶ形になってきたので、SEを追加したうえで、今度はPixel君に触ってもらった。前回と逆で、今度は難しすぎたっぽい。
今回は動画でなくチャットのみで状況を伝えてもらってたんだけど、どちらかというと単純な難度の問題よりも、「自機が味方の弾に弾かれて敵に当たったり、味方がはじき飛ばした敵が高速で飛んできて避けきれずに死ぬ」「いきなり上から敵が降ってきて死ぬ」「浮いた敵に弾が当たらないのがわかりにくく、ストレスになる」など、自分で遊んでる分にはあまり気にならなくなってしまっていた部分にすごく引っかかったらしい。
すっかり操作にもゲームの仕様にも習熟してしまってそういう感覚がわからなくなってしまっているので、ちょっとでもはじめて遊ぶ気分に戻るために試しに「右手でWASD操作、左手でタッチパッド」という操作系で遊んでみると、Pixel君がどうしてそういう状況になったのかがなんとなくわかるようになった。
ゲームに不慣れな状態だと自分から動くことが少なくなるので、自然とあまり動かずに真ん中に固まって敵を狙うようなプレイスタイルになりがち。
そうなると、動き回っているときにはほとんど気にならなかった、味方の弾に弾き飛ばされたり、降ってきた敵に対応できなかったり、突っ込んでくる敵を撃って浮きあがった物が突っ込んできてそのままやられたり、みたいな場面が発生しやすくなる。
自分が普通に遊んでるときには、開発初期に箱型の敵が動き回らないと絶対死ぬような調整になってた頃の名残で、つい動きながら戦う習慣がついてしまってたのだけど、たしかに慣れないうちはあまり移動しないほうが死ににくいし、そうなると外周に行きたくなるような理由も存在しない。
さらに、ゲームの仕様上、前回の自分の移動につられて動くような傾向ができてしまうために、一機目が中央付近にとどまっていると、二機目以降も同じように中央に固まる傾向になり、その結果、いきなり毎回中央上空から降ってくる箱や大箱に潰されて死ぬことになる。
ある程度は動き回ってもらう事を前提にバランスや敵の配置などを組み立てているので、足を止めて止まった状態が続くのはあまり好ましくない。そこで、対策として外周に移動したくなるような理由を作るために、画面端にアイテムを設置してみたら、一応はそれなりに効果はあったっぽい。
最初の1プレイ目で端に移動すると、2プレイ目以降もそこについていくような傾向になるため、中央に固まってる時に比べて多様性のある展開になりやすくなったようだった。
こういうのは自分だけでやっててもなかなか気づけないので、できればもう数人、違った遊び方をする人の動きを見ていろいろ考えてみたいところ。この手の問題はまだまだたくさん残ってそう。
その他にいくつか出ていた、敵が浮いたり、降ってきた敵にいきなり潰されたり、というような問題点に関しては、ある程度は慣れて動き回りながらプレイするようになればそこまで気になるものではなさそうな状態にはなっていそうだった。
こういった要素はこのゲームでの数少ない学習部分であったり、展開の多様性を作り出している要素でもあるし、「過去の自分との協力」を生かしてもらうためにも最初のうちはある程度早い段階で初見殺し的に死んでもいいのでは?と考えて、慣れる事ができる範囲のものであればできればそのままにしておきたい、と判断して放置する事に。
後から考えればこれは大きな失敗だったと思っているのだけど、こういったバランスをどうしたらいいのかは毎回本当に悩む。
2011-09-09
■ Unityで一週間で全方位シューティングを作ってみた(8) 【五日目】

昨日のテストプレイで出てきた問題点を修正して、反省点を元にひたすらバランス調整をやっていた。「過去の自分と協力」というコンセプトが明らかに崩壊してしまっていたので、自分のゴーストがもっとわかりやすく役立つような方向に再調整。
主な修正項目は「自機を4色に色分けして区別がつきやすいように」「死亡後は宝石を消す」「巻き戻し演出の追加」「序盤で火力が強くなりすぎないようなレベルアップ調整」など。
序盤では一人だと火力が不足気味になるようにした上で、初見ではある程度のところで死んでもらうようにしないと、過去の自分と協力する意味がほとんどなくなってしまう。
自分一人で遊んでるとプレイスタイルが固定されて、違った動きをしたときにどんなことになるのかがわからなくなってくるし、そもそも自分より上手い人が遊んだらどんなふうになるのかは遊んでもらわないとわからない。
自分でやる分には成功率が低いので難しいから放置してていいだろう、とか思ってたような有利な行動をあたりまえに実行されたりしてしまうと、どのくらいの難度に調整すべきなのかはとても難しい問題になってくる。
2011-09-08
■ Unityで一週間で全方位シューティングを作ってみた(7) 【四日目】

ゲームの流れがある程度形になってきたので、現時点で動いているバージョンを@NekoSukiPGさんに遊んでもらった。
どうやら難度調整を自分のレベルに合わせて調整していたら簡単になりすぎていたらしく、たった2〜3プレイ目の時点でゲームをほぼ末期状態に近いくらいまで進められてしまっていた。
また、単純な難度だけでなく、仕様にもいくつか問題があった。
落ちている宝石を死んだあとの次プレイ時にもそのまま残る設定にしていたら、2機目以降は開始直後に毎回いきなりフルパワーに近い状態にまでパワーアップが進められていて、完全にゲームバランスが壊れてしまってた。
結果として、そもそもこのゲームの特徴だったはずの「過去の自分と協力」が全く不要なくらいに自分一人だけで敵を押し切って進められていて、2プレイ目以降に出てくる前回の自機も「死んだ後はなにかオプションがついてきてる」くらいに思われていて、「過去の自分のリプレイ」だとは認識されていなかった。
ゲームの根本的なコンセプトが崩壊していて非常にマズい状況だったので、色々と修正が必要に。この時点で修正量と残り時間を考えて、ボスを作るのはあきらめることにした。
基本的に自分はあまりゲームが上手くないので、「自分にはちょっと難しいかな」くらいに調整しておけば上手い人でもそれなりに満足できるくらいの難度になるだろうと想定して調整をかけていたのが、@NekoSukiPGさんに想定してた以上に簡単に攻略されてしまったので、ゲームの寿命を考えると、もっと難しめに設定する必要がありそうに思った。
そもそもこのゲームの仕様では、どこかで死んでもらわないと「過去の自分との協力」が成立しないので、ある程度こちらが想定したタイミングで死んでもらうような調整が必要になりそう。初見殺しにはなるけど、知っていれば避けられるような類いの攻撃パターンが必要か。
とりあえずは、自機の速度や敵の誘導性能、レベルアップに必要な経験値テーブルなどを一通り見直して再調整をかけつつ、簡単に数字を触れる範囲で少しづつ設定を変えたものを遊んでもらいながら、難易度調整の目星を付けるような形でテストプレイを行っていった。
今回のテストプレイ時には、その場でSkype経由でプレイ情報を動画で送ってもらって確認を行っていた。こんなに簡単にデスクトップの状況をリアルタイムで送れるとは知らなかった。
たとえネット越しであってもテストプレイをお願いしたら、その場で動画でプレイ状況を確認できるようになってたりするなんて、すごい時代になったものだなぁ、と思った。
あと、宝石のモデルはこちらで紹介されていた物をアセットストアから落としてきて、そのまま使うことにしてみた。
シェーダーとかややこしい事は何も気にせず、そのまま色を変えただけで、これまでは単なる色付きの球体だったものが収集アイテムっぽい見た目になってくれた。このあたりは本当に楽でありがたい。アセットストアの更なる充実に期待したいところ。
2011-09-04
■ Unityで一週間で全方位シューティングを作ってみた(6) 【プレイ動画】

コメント欄の69400さんの動画に触発されて、プレイ動画を撮影してみた。
リンク先に、ブラウザ上で遊べるものが置いてあります。
2011-08-27
■ 白山に登ってきた

日本三名山の一つ、石川県の白山に登ってきた。
頂上付近
眼下に雲が
雲海。
雲が晴れて遠くまで見えたときのもの
初日の夕方。夜の星もすごく綺麗だった
帰路。下りはだいぶ楽。
右手に見える尾根を伝って下りていく。先が長い
だいぶ下ってきた。もう雲より下
ふもとの温泉で一休みしてから帰宅
2011-08-24
■ Unityで一週間で全方位シューティングを作ってみた(5) 【三日目】

敵もプレハブ化して、敵セットマネージャが時間と共に順番に生成していくように設定して、プレイヤーと敵の接触・死亡判定や、2機目以降は前回の自分と共闘できるような要素を追加。
前回のゴーストの再生は、単純に位置と回転を毎フレーム配列に記憶してるだけ。
ゴーストの可変フレームレート対応に関しては、現フレームのデータが記録されてないときには前回のフレームの位置を使うように。
マウスのボタンを押したら弾を打つ仕様になっていたけれど、弾を打たないメリットがないため、オートで連射するようにして操作を簡略化。リプレイデータには弾発射のフラグが残ってるけど常にONの状態。
弾を手連射できるようにしてたらリプレイの可変フレーム対応が面倒なことになるところだったけど、そもそも厳密な再生は必要とされてないのであまり細かいことは気にしない方向で。
タイトル→ゲームループ→死亡→リプレイ付きで次プレイヤー→ゲームーバー、の流れできて、ゲームシステムが一通り入ったのでなんとなく遊べるような形になってきた。
いまのところ敵は球と箱の2種類で、敵の生まれ方に時系列で緩急がつきながら変わっていくように、などいろいろとゲーム内容の調整を行った。
構想段階では10機くらいでわらわらと大きなボスを倒すような絵面を想定してたけど、10回も繰り返すのはかなりダルそうなので4回くらいにしてみる。
繰り返すなら1ゲームは3分を超えると長すぎなので、そのあたりを目安にいろいろと調整。
ほどよく死んでくれないと、前回の自分と協力するシステムが生かせなくなる。かといって、簡単に死にすぎると単に難しいだけの嫌な感じのゲームになってしまいそうなので、どういった調整にすべきか悩む。
ボス戦もちゃんと作り込みたいところだけど、残り時間を考えるとそこまでネタを仕込んで調整しきれるかどうかがちょっと不安になってきた。
えき期待。ブラウザゲームで必須と言われている「BGM/SEのミュート(音量調節)」の実装、可能だったらお願いします。また、何度もやりなおしてベストな状態を狙いたいゲームなので、可能な限り素早くリトライする機能もご検討よろしくお願いします。
Nao_uありがとうございます。リリース後に操作ミスでデータの一部を消してしまって、復旧するのに時間がかかる状態になってます。申し訳ないですが、しばらくお待ちください。
Unityは気軽にデータを作成・修正できる反面、気を付けないと重要なデータでも簡単に上書きや削除ができてしまうのは怖いところです。こまめなバックアップが必須。
あと、リンク元にあった地雷についてですが、今回はゲームの性質上、設置しても大量の敵に勝手に踏まれてすぐに誤爆しそうで、有効に使うのは難しいんじゃないかな、という気がしてます。何も考えずに追加すると、おそらくは逃げながら設置して即爆破でのボム的な使い方がメインになりそうですが、他になにかいい使い方がありそうでしょうか?
えきえさ(重力源)にする。
zettonはじめまして!2/1の記事にコメントさせていただいたのですが、お目にかかられていなかったかもしれないと思い、こちらでコメントさせていただきました(汗
何度もコメントしてしまい申し訳ありません。
画像認識の動画をニコニコ動画にて動画を拝見させていただきました。
今私もOpenCVを用いて画像認識をするための勉強を詳解OpenCVという本を使って進めているのですが、初歩の段階で少々躓いています・・・。
カメラから取り込んだ映像をAVIファイルに書き込むという単純なプログラムなのですが、カメラを指定する段階でどのようにしていしたらよいのか分からず、手詰まり状態です・・・(T_T)
webカメラの指定はどのようにやったらよいのでしょうか?
お手数でなければご回答いただけると幸いです。
Nao_u>えきさん
地雷に敵が誘導されると設置後すぐ踏まれて起爆してしまいそうなので、時限起爆みたいな感じで、終盤に自分に殺到されるあたりが使いどころになる感じでしょうか
>zettonさん
カメラ指定でどのような問題が起こっているのでしょうか。OpenCVを触っていたのはかなり昔になるので、こちらではちょっと詳細はわからないです。もしかしたら下記リンクなどが参考になるかもしれません。
http://kougaku.blog28.fc2.com/blog-entry-341.html
zetton>Nao_u様
アドバイス並びに参考サイトURLありがとうございます!
OpenCV2.2を用いていたのですが、windows7 64bitでvisual studio 2010にてwebカメラを用いるとどうやらエラーが出るようです。。。
再度質問してしまい申し訳ないのですが、Nao_u様があのプログラムを作成した際はどのような開発環境だったか、もしまだ覚えていらっしゃいましたら教えていただいても差し支えありませんでしょうか?
2011-08-23
■ Unityで一週間で全方位シューティングを作ってみた(4) 【二日目】

敵を置いて弾に当たったら消えるようにしてみた。接触したときのコールバック関数を書くだけでそれ以上何も考えなくても処理できるのでとても楽。弾と敵や、背景も含めて面倒な当たり判定はすべてエンジン側でやってくれるのは素敵。
絵をどんなふうに作るかでちょっと悩んだけど、デフォルトでトゥーンシェードのシェーダーが組み込まれていたので、それをそのまま使うことにしてみた。
絵に凝り始めると一週間では終わらなくなってしまいそう。試行錯誤してる余裕はあまりないと思うので、ビジュアル面に関しては最初に出してみてみてなんとなくそれっぽければOKとして、どんどん進めてしまいたいところ。
トゥーンシェードの縁取りの線の色が個別に変えられたので、それをそのまま敵のHP表示のかわりに使えそう。敵の残りHPに応じて白→緑→黄→オレンジ→赤、と変わるようにしてみた。
グレアフィルタが使えたら適当に光らせたりすることでもうちょっと誤魔化しやすくなりそうだけど、残念ながら無料版ではポストフィルタとシャドウマップ投影は使えないらしい。残念。
2011-08-22
■ Unityで一週間で全方位シューティングを作ってみた(3) 【一日目】

一週間でつくった全方位シューティングの製作日記。一日目。
まずは簡単に、地面にボックスを置いてサイズを調整して床にして、その上でプレイヤーに見立てた球体を置いて動かせるように。
最低限、オブジェクトが表示できてキー入力の判定さえできれば、もうそれだけでゲームは作り始められる。
敵に見立てたボールを置いて物理計算のコンポーネントを追加するだけで、当たり判定のコードなど一切書いていないのに接触すると物理計算が働いて勝手に弾き飛ばされる。これは便利。
ついでにボタンを押すとプレイヤーから弾を飛ばせるようにしてみた。
作ったオブジェクトを、「プレハブ」と呼ばれるオブジェクト生成機みたいなものにドラッグ&ドロップすることで、スクリプトからそのオブジェクトを呼び出せるようになる機能を使用。
弾が敵に当たると弾け飛ぶ。あとは接触時にダメージを与えてHPがなくなると消えるようにすれば、ゲームとしての最低限の枠組みが出来上がる。
全般に、適当にオブジェクトを配置して、そこにスクリプトを割り当てていくだけでなんとなく動いてくれるし、スクリプト言語も一般的なJavaScriptがそのまま使えるのですごくわかりやすい。
C#を使うべきかちょっと悩んだけどJavaScriptのほうが気軽に書けそうだったので、処理負荷が問題になるまではとりあえすはJavaScriptのみで進んでみることに。C#で書くと少し記述量が増えるようなので、JavaScriptの手軽さがとても魅力的に感じられる。
型をちゃんと指定するのと、負荷が高いらしいオブジェクト検索をループ内で使わないようにだけ気をつけてればC#とそう大きくは変わらない速度で動くらしいので、いまどきのCPUなら処理の重さに関してははあまり問題にはならないんじゃないかな、という気がする。
2011-08-21
■ Unityで一週間で全方位シューティングを作ってみた(2)

今回の目標は「一週間以内に完成まで持っていく」ことだったので、最初に何を作るのかを決める段階で、ゲームの仕組みについて悩む部分の少なそうな全方位シューティングというジャンルを選んでみた。
とはいえ、既存にあるようなものをそのまま作っても面白味に欠けるので、今回は組み合わせるネタとして「過去の自分と協力」という要素を軸にゲームを組み立ていくことに決めた。
過去の自分と協力、と決めたときにます最初に思いついたのは「10機くらいの自機がよってたかって巨大なボスと戦う」みたいな絵面だったんだけど、プロトタイプを作ってみると10回も繰り返すのは明らかに冗長だったので、4回に減らすことにした。
また、作成途中にテストプレイしてもらった結果、ボス戦を作り込むよりも先に前半部分のザコ戦で再調整が必要な部分がたくさん出てきてしまったために、ボスの作成を断念して、スコアアタック形式のゲームとして組み立てていくことに。
構想の段階ではレーザー・拡散ショット・ボムなどのパワーアップアイテムを導入したり、死んだあとの前回の自機が死亡後に放っておくと強力な敵になるので倒して経験値にするか、回収してオプションにするかを選ぶ、などの要素も考えていたけど、実際作ってみるとシンプルな方がわかりやすくて良さそうだったので、パワーアップ要素に関しては点数でのレベルアップに集約することにしてみた。
最初はUnityの作法がよくわかっていないためにいろいろと試行錯誤が必要ではあったけど、結果として描画部分やパーティクル・サウンドなどのシステムを自作しなくても済むために、ゲームの調整部分に集中して時間を使うことができたのでとても効率が良かった。
また、絵を気にしはじめるとかなり時間を持って行かれるため、今回はビジュアルに関しては最低限破綻してなければOK、くらいな気分で作っていたこともあって、デフォルトで入っていたトゥーンシェードのシェーダーを使うことで、とりあえず絵を出すだけであればほとんど手間がかからなかったのはとても助かった。
敵の出現時も丸影が距離に応じて勝手にアニメーションしてくれるおかげで単に上から降らせるだけでも出現予告のように機能してくれたり、物理計算のおかげで適当にランダムに散らして降らせるだけでもそれなりにゲームっぽく動いてくれたりなど、もともとシステムにある機能のおかげでいろいろと楽ができた部分はとても多かった。
結果として余計な手間を取られる部分が少なかったために、ゲームの手触り関しては、最初にイメージしていたものをほぼそのままに近い形で実現できたように思う。
ただ、どのような制御をどのオブジェクトに設定するのかに関しては、最初はどういった作法で作るべきかがよくわからず、設計の時点ではうまく整理できていなくて場当たり的にスクリプトを拡張していった結果、どこで何の制御を行っているのかがわかりにくい物になってしまった。
最終的には、普段C++などでゲームを作るときにシングルトン的な形で作るような各種の制御マネージャーをそのまま独立したオブジェクトとして配置するような形で、そこからプレハブを使ってプレイヤーや敵、エフェクト・SEなどを生み出して管理するようなやり方に収束していったのだけど、ある程度規模が大きくなってくると、この辺の設計をちゃんと考えておかないと、かなり混乱することになりそう。
2011-08-20
■ Unityで一週間で全方位シューティングを作ってみた(1)

最近よく話題になっているUnityっていったいどんなものなんだろう?と気になったので、今回は一週間で完成形まで持っていけそうなゲームを一本作ってみた。
リンク先に、ブラウザ上でそのまま動くものが置いてあります。
http://nao838861.sakura.ne.jp/UnityTest/UnityTestWeb.html
今回作ってみたのは、過去の自分と協力しながら戦う全方位シューティングゲーム。
死亡後に前回の自分のゴーストが現れ、最大4体までの過去の自分と協力しながら戦っていく。宝石を連続で取ると高得点になり、一定点数ごとにレベルアップして、攻撃を強化できる。
Unityでのゲーム制作は、基本的に空間にオブジェクトを配置して、そのオブジェクトにスクリプトを割り当てて動きを記述しながら組み上げていくような作業の繰り返しで作っていくことになる。
なんとなく.NetやCocoaなどのGUI環境のプログラミングに近い感覚で、Unreal Engineなどと比べると、根っこはすごくシンプルなので比較的とっつきやすい印象。
当たり判定は物理エンジンがそのままやってくれるし、丸影を描いたりパーティクルを出したり音を鳴らしたり、などの自前で用意するのがそれなりに面倒な要素も、あらかじめエンジンに組み込まれているので気軽に使える。
描画はモデルを配置すればシステムが勝手にやってくれるし、敵のアルゴリズムも物理計算にちょっと手を加えるだけでそれっぽく動いてくれた。
面倒な部分はほとんどUnityのエンジンがやってくれるので、大半の時間をゲームのロジックやバランス調整に費やすことができて、とても効率よくゲーム制作が進む。
パーティクルエンジンやサウンド、HUDを表示するための仕組みなどもあらかじめ用意されているので、ある程度ゲームが形になってくれば、かなりお手軽にいろいろな演出も強化できる。
素材もAsset Storeから落としてくれば手間をかけずに用意できるし、追加のコンポーネント なども簡単に組み込んで拡張することもできる。
ゲームに必要なものを適当に見繕って配置して、短いスクリプトを書くだけでもわりと簡単にゲームっぽい枠組みが作れるようになっていて、触っていてほんとうによくできているな、と感じた。
今後、Asset Storeや各種追加コンポーネントなどが充実してくれば、部品を組み合わせるだけである程度ゲームが組み立てられるような状態になっていくんじゃないかと思う。
実際にゼロからでも一週間でそれなりに形になるところまで作ることができたので、生産性はすごく高い。今回みたいなアイデアの検証のようなゲームであれば、自前のエンジンを使うよりもずっと手軽で効率的に作れそう。
結果としてスコアアタックができるようなゲームになったので、Twitterにスコアを投稿できるような仕組みを入れられないかと思って調べてみたのだけど、いいやり方が見つけられなかったのがちょっと残念。ランキングとかを作るのはどうしたらいいんだろう。
69400神ゲーだと思います。10万点とりたいです
Nao_uありがとうございます。楽しんでいただけたようで嬉しいです。
69400はスコアでしょうか?
ランキング機能を追加できなかったのがちょっと悔やまれます。
6940069400→112900に成長しました! スコア競えたら盛り上がりそうですね。
高レベルのキリングゾーンが完成した時のテンションがやばいです。
味方に吹き飛ばされた敵に命中死するなどの絶妙な理不尽さがすごくいいと思います。
69400うpしました
http://www.nicovideo.jp/watch/sm15496657
俺はワタシ自機の向きはマウスカーソルで変えられるけど移動ができませんでした。移動しようとすると左上に入力した文字が出るだけでムリポ。
解決策はいかに?
俺はワタシああ、移動できました。なんでもないです。失礼しました。
Nao_u動画投稿ありがとうございます!
こんな風に作ったものがどう遊ばれてるかを見る機会はめったにないので、詳細なプレイ記録がみられてとても参考になりました。感謝です。
通りすがり立方体の挙動が攻撃を当てても加速するだけでちょっと避けづらいと思う
Nao_u難度調整に関してはいろいろ失敗したなと思う部分がありますので、いずれ改善していきたいです
2011-08-12
■ グラデーション球のPerlinNoise変調で雲を描画

グラデーション球のPerlinNoise変調で雲を描画 - wonderfl build flash online
グラデーション付きの球を、2枚のPerlinNoiseでUVそれぞれに変調をかけて雲テクスチャを生成。画面中心にマウスカーソルを置くと変調なしの状態に。
カーソルキーの上下左右でスクロール速度を調整























http://gadget1.jus.or.jp/r5/
こちらのプログラムにて、ご紹介して頂きたいものをこのブログで拝見いたしました。
twitter アカウントをフォローさせていただきました。よろしければ、@Kazuma_Suzuki まで DM 頂けると幸いです。