図1は、実施形態のゲームシステム1の概略構成を示す。ゲームシステム1は、インターネットなどのネットワーク2に接続されたサーバ3と、複数の端末装置10を備える。実施形態の端末装置10は、携帯電話の基地局または無線LANルータである無線局4と無線通信する機能を有し、ネットワーク2経由でサーバ3と通信可能に接続できる。端末装置10は、ゲームプログラムをインストールした情報処理装置であって、ユーザによって操作される。実施形態の端末装置10はスマートフォンやタブレット端末などの携帯型の電子機器であってよいが、パーソナルコンピュータなどの据置型の電子機器であってもよい。
サーバ3は、ゲームシステム1におけるゲーム進行を支援する情報処理装置であり、端末装置10により要求されたデータを端末装置10に提供するとともに、端末装置10から提供されるデータを、別の端末装置10がアクセスできるようにする。実施形態のゲームシステム1では、ユーザが仮想空間内で様々な形状のブロック(以下、「部材オブジェクト」とも呼ぶ)を組み合わせて、敵の攻撃からユーザのキャラクタを防衛する城を作成する。ユーザは、自分が作成した城を構成するためのデータ(以下、「構造体データ」とも呼ぶ)をサーバ3にアップロードでき、また別のユーザがサーバ3にアップロードした構造体データを端末装置10にダウンロードできる。
ゲームシステム1においてユーザは、別のユーザが作成した構造体データをダウンロードして、自分が作成した城とどちらが堅牢であるか対戦するバトルゲームを楽しむことができる。サーバ3は、複数のユーザによりアップロードされた城を様々な観点からランキングして、ランキング結果を公開してもよい。なおゲームシステム1において、ユーザは城以外の構造体、たとえば邸宅などを作成してもよい。
図2は、端末装置10のハードウェア構成を示す。端末装置10は、入力部12、カメラ14、プロセッサ16、通信部18、表示部20、音声出力部22、記憶部24およびモーションセンサ26を備える。これらの構成は、バス28により接続されている。
入力部12は、ユーザが操作を入力するためのユーザインタフェースである。端末装置10がスマートフォンである場合、入力部12はタッチ入力を可能とするタッチスクリーンであってよく、端末装置10がパーソナルコンピュータであれば、入力部12はキーボードやマウスであってよい。いずれにしても入力部12は、ユーザがゲームプログラムに対して操作を入力できるものであればよい。
カメラ14は、現実空間を周期的に撮影する撮像装置である。カメラ14は、奥行き方向の情報を取得できるステレオカメラであってもよい。実施形態のゲームプログラムは、現実空間をカメラ14で撮影した現実画像にゲーム画像を合成して表示するAR(Augmented Reality:拡張現実)機能を有する。
プロセッサ16は、端末装置10の動作を統括して制御するユニットであり、典型的にはCPU(Central Processing Unit)を含んでよい。プロセッサ16は、記憶部24に記憶されたゲームソフトウェアを読み出して実行し、ゲーム画像およびゲーム音声を生成する。そのためプロセッサ16は、画像処理に特化したGPU(Graphics Processing Unit)を含むことが好ましい。
通信部18は無線通信機能を有し、無線局4およびネットワーク2を介してサーバ3と接続する。たとえば通信部18はサーバ3から、ゲームプログラムを含むゲームソフトウェアをダウンロードして、記憶部24に記憶してよい。また通信部18はサーバ3に、ユーザが作成した城の構造体データをアップロードしてよい。なお実施形態では通信部18が無線通信機能を有して、無線局4に無線接続する環境を想定しているが、通信部18はルータなどと有線ケーブルで接続して、サーバ3と通信可能に接続してもよい。
表示部20は、プロセッサ16が生成するゲーム画像を表示するディスプレイ装置である。実施形態のプロセッサ16は、カメラ14が撮影した現実空間の画像に、仮想ゲーム空間を仮想カメラが撮影したゲーム画像を合成して、拡張現実画像を表示部20から表示させる。つまりユーザは、表示部20に表示される拡張現実画像を見ながら、バトルゲームをプレイする。スマートフォンである端末装置10は、ディスプレイである表示部20と、タッチスクリーンである入力部12とを重ね合わせたタッチパネルを備えており、ユーザは、表示部20に表示されるGUI(グラフィカルユーザインタフェース)を直接タッチ操作できる。音声出力部22は、プロセッサ16が生成するゲーム音声を出力するスピーカである。
記憶部24は、揮発性メモリであるRAMおよび不揮発性メモリであるROMを含む記憶装置である。記憶部24は、サーバ3からダウンロードしたゲームソフトウェアを記憶する。また記憶部24は、ユーザが作成した城の構造体データを記憶する。なおユーザが、別のユーザが作成した城の構造体データをダウンロードすると、記憶部24は、別のユーザが作成した城の構造体データも記憶する。
モーションセンサ26は、3軸の加速度センサおよび3軸のジャイロセンサを含んでよい。モーションセンサ26が検出するセンサ情報は、端末装置10の位置および姿勢を検出するために利用される。
以下、ユーザが作成した城と、別のユーザが作成した城との堅牢さを対決させるバトルゲームについて説明する。以下では、城を単に「構造体」と呼ぶこともある。構造体の作成手法については後述する。なお対決する構造体は、別のユーザが作成したことを前提としているが、ゲームソフトウェアにおいて予め用意されたものであってもよい。
図3は、処理部100の機能ブロックを示す。処理部100は、操作受付部102、カメラ画像取得部104、センサ情報取得部106、ゲーム制御部110、ダウンロード処理部150、アップロード処理部152および画像合成部154を備える。ダウンロード処理部150は、サーバ3から、別のユーザが作成した構造体データをダウンロードして、記憶部24に記憶する。
操作受付部102は、入力部12に入力された、ゲームに対するユーザの操作を受け付け、ユーザの操作情報を他の機能ブロックに渡す。たとえば入力部12がタッチスクリーンである場合、操作受付部102は、入力部12から、タッチスクリーンのタッチ位置を示す座標値(xy座標値)を取得する。カメラ画像取得部104は、カメラ14が現実空間を所定の周期で撮影した現実画像を取得し、画像合成部154に供給する。センサ情報取得部106は、モーションセンサ26が所定の周期で検出したセンサ情報を取得し、ゲーム制御部110に供給する。
ゲーム制御部110は、ゲームプログラムを実行する実行部であって、構造体配置部112、攻撃指示受付部114、攻撃内容受付部116、視点設定部118、進行制御部120、選択画像生成部122、ゲーム画像生成部124、ゲーム音声生成部126およびゲームデータ保存部128を有する。進行制御部120は、ゲーム進行を制御して、構造体に関する物理演算を実行する機能を有する。ゲーム画像生成部124はゲーム画像を生成し、ゲーム音声生成部126はゲーム音声を生成する。
記憶部24はゲームソフトウェア30を記憶するとともに、構造体データを記憶する構造体データ記憶部32と、ゲーム進行を再現可能なゲームデータを記憶するゲームデータ記憶部34とを有する。構造体データ記憶部32には、ユーザが自分で作成した1つ以上の構造体データが記憶されるとともに、ダウンロード処理部150がサーバ3からダウンロードした別のユーザの構造体データも記憶される。
図3に示す各機能ブロックは、ハードウェア的には、コンピュータのプロセッサ16、記憶部24におけるメモリをはじめとする素子や電子回路、機械装置で実現でき、ソフトウェア的にはシステムソフトウェアやゲームプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。実施形態におけるゲームソフトウェア30は、記憶部24にインストールされており、端末装置10のプロセッサ16は、ゲームソフトウェア30をメインメモリに読み出して実行することにより、処理部100の各ブロックの機能を実現する。これらの機能ブロックがハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
実施形態のバトルゲームでは、自陣に配置された構造体と、敵陣に配置された構造体とが互いに向かい合って配置され、交互に攻撃を行って相手の構造体を崩し合う。それぞれの構造体には1体以上のキャラクタが載せられており、構造体が崩されて、全てのキャラクタが地面に落ちると負けになる。実施形態で対戦相手は、コンピュータ(ゲームプログラム)が操作するNPC(ノンプレイヤーキャラクタ)であるが、対戦相手が別のユーザであっても構わない。
構造体は、複数の部材オブジェクトを組み合わせて作成されており、各部材オブジェクトは、質量、大きさ、摩擦係数などの仮想的な物理量を有し、受けた攻撃に対する耐久力を設定されている。実施形態では1回の攻撃ターンで、相手の構造体に向けて、3つの大砲から順番に砲弾を発射する。なお砲弾は、発射されて遠方の目標を攻撃する飛翔体オブジェクト(つまり飛び道具)の一例であり、弓矢等であってもよい。進行制御部120は、受けた攻撃による構造体の挙動を物理演算し、リアリティのある挙動画像として表示部20に表示させる。
図4は、バトルゲームの開始画像を示す。ゲーム開始時、選択画像生成部122はゲーム開始画像として、ユーザが自分の構造体(城)を選択するための選択画像を生成し、表示部20に表示させる。図4に示す構造体は、後方に2体のキャラクタが配置され、前面に複数の部材オブジェクト(ブロック)を積み上げた城壁を備えている。この城壁は、後方のキャラクタを敵の砲弾から防御する役割をもつ。バトルゲームでは、砲弾により構造体が崩されて、ユーザの全てのキャラクタが、敵の全てのキャラクタよりも先に地面に落下すると負けになるため、キャラクタをできるだけ構造体の後方側に配置しようとするプレイヤは多い。なお構造体を作成する方針はプレイヤ次第であり、たとえば構造体の前方と後方にキャラクタを分散して配置して、前方のキャラクタをおとりとして敵に狙わせ、後方のキャラクタを最後まで生き残らせるようにしてもよい。
実施形態の端末装置10はスマートフォンであり、表示部20であるディスプレイと、入力部12であるタッチスクリーンとは重ねられている。したがってユーザは表示部20に表示されたGUIをタッチすることで、ゲームに対する操作を入力できる。ユーザが変更ボタン200aまたは200bをタッチ操作すると、選択画像生成部122は、構造体データ記憶部32から、ユーザが作成した別の構造体の表示画像を読み出して、表示部20に表示する。ユーザが決定ボタン202をタッチ操作すると、構造体の選択作業は終了し、画像合成部154が、カメラ画像取得部104が取得したカメラ画像を、表示部20に表示させる。
対戦相手は別のユーザが操作するプレイヤーキャラクタであってよいが、実施形態では対戦相手が、コンピュータ(ゲームプログラム)が操作するNPC(ノンプレイヤーキャラクタ)である。そのためユーザは、自分の構造体の選択に続いて、相手の構造体を選択してよい。このとき別のユーザが作成した構造体を選択することで、実際に別のユーザと対戦するような感覚を得られるようになる。構造体の選択が終了すると、次は、バトルゲームの開催場所を決定する。
図5は、表示されるカメラ画像の例を示す。拡張現実を利用したバトルゲームは、テーブルなどの平らな面で開催される必要がある。そのためユーザは平らな面を探して、カメラ14で撮影する。平らな面が撮影されると、ゲーム制御部110は、三次元の仮想ゲーム空間を作成して、仮想ゲーム空間を仮想カメラで撮影したゲーム画像を生成する。
図6は、表示されるゲーム画像の例を示す。構造体配置部112は、仮想的な重力が設定された三次元の仮想ゲーム空間内に、ユーザが複数の部材オブジェクトを積み上げて作成した第1構造体204と、複数の部材オブジェクトが積み上げられた第2構造体206とを配置する。視点設定部118は、仮想カメラの位置(視点位置)およびカメラ光軸方向(視線方向)を設定し、ゲーム画像生成部124は、仮想ゲーム空間を仮想カメラで撮影したゲーム画像を生成する。画像合成部154が、現実のカメラ14による撮影画像に、ゲーム画像生成部124が生成したゲーム画像を合成することで、拡張現実画像が表示部20に表示される。
最初のゲーム画面では、右側に自陣が設定されて、第1構造体204が配置され、左側に敵陣が設定されて、第2構造体206が配置される。ユーザは、カメラ14の姿勢や位置を変えることで、第1構造体204および第2構造体206を様々な視点および視線方向で見ることができる。このとき視点設定部118は、センサ情報取得部106からセンサ情報を取得して、端末装置10の位置変化および姿勢変化を算出し、端末装置10の位置変化および姿勢変化に応じて仮想カメラの視点位置および視線方向を変更する。これにより画像合成部154は、端末装置10の位置変化および姿勢変化に対応するゲーム画像を、カメラ画像に合成できる。
拡張現実画像には、ゲーム操作のための機能アイコン208a、208b、208cが表示される。各機能アイコン208には、プレイの選択肢を増やすための項目が設定されており、たとえば機能アイコン208bをタッチ操作すると、発射する砲弾の攻撃力を増大させるためのGUIが表示される。攻撃準備ボタン210は、第2構造体206を攻撃する準備を行うための攻撃指示を入力するためのボタンであり、ユーザが攻撃準備ボタン210をタッチ操作すると、攻撃指示受付部114が攻撃指示を受け付ける。攻撃指示受付部114が攻撃指示を受け付けたことを契機として、視点設定部118は、仮想カメラの視点位置および視線方向を変更し、ゲーム画像生成部124が、視点位置および視線変更を変更された仮想カメラで撮影したゲーム画像を生成する。このゲーム画像は画像合成部154に提供され、画像合成部154は、カメラ14が撮影した画像に、視点位置および視線方向を変更した仮想カメラで撮影したゲーム画像を合成する。
図7は、攻撃する準備を行うためのゲーム画像の例を示す。攻撃指示受付部114が攻撃指示を受け付けると、視点設定部118は、仮想カメラの視点位置を自陣側に移動し、視線方向を自陣から敵陣に向かう方向に設定する。これによりユーザは、敵の第2構造体206を真正面から見ることができるようになる。
ユーザは、敵の第2構造体206の構造を観察して、敵のキャラクタを地面に落とすために、第2構造体206を効果的に崩すためのポイントを探す。このバトルゲームでは、1回の攻撃ターンで、3つの砲弾を第2構造体206に当てることができるため、ユーザは、第2構造体206の3箇所のポイントを、砲弾で狙うターゲット位置として選択する。操作受付部102は、タッチ操作された3つの箇所の位置座標をゲーム制御部110に供給し、攻撃内容受付部116は、3つの位置座標から、第2構造体206に対する攻撃内容を受け付ける。具体的に攻撃内容受付部116は、3次元仮想ゲーム空間において3つの大砲から発射される砲弾の弾道を、タッチ操作されたターゲット位置に向かうように設定し、設定した3つの弾道を進行制御部120に提供する。進行制御部120は、提供された攻撃内容にしたがって第2構造体206を攻撃する。
図8は、大砲が砲弾を発射した様子を示す。上記したように砲弾は、飛び道具である飛翔体オブジェクトの一例である。進行制御部120は、攻撃内容受付部116により設定された弾道で、各大砲から順番に砲弾212をターゲット位置に向けて発射して第2構造体206を攻撃する。進行制御部120は、大砲から発射した砲弾を、設定された弾道で第2構造体206まで動かし、第2構造体206のターゲット位置に着弾させて、砲弾を部材オブジェクトに衝突させる。進行制御部120は、攻撃を受けた第2構造体206の挙動を物理演算により求める。具体的に進行制御部120は、砲弾212が衝突した部材オブジェクトに作用する物理量を演算し、その演算結果にもとづいて部材オブジェクトを変形、破壊または移動させる。
第1構造体204および第2構造体206は、様々な種類の部材オブジェクトを組み合わせて作成されているが、部材オブジェクト毎に、受けた攻撃に対する耐久力が設定されている。たとえば部材オブジェクトAは、1回の被弾により破壊され、部材オブジェクトBは、2回の被弾により破壊されることが設定されている。そのため進行制御部120は、部材オブジェクトAに砲弾212が1度着弾すると、部材オブジェクトAが破壊され、その結果、部材オブジェクトAの上に積み上がっている構造体が倒壊する挙動を物理演算により求める。一方で進行制御部120は、部材オブジェクトBに砲弾212が1度着弾しても、当該部材オブジェクトBは破壊されないことを判定する。このとき進行制御部120は、部材オブジェクトBおよびその上に積み上がっている構造体を被弾の衝撃で振動するように演出的に動かしてよいが、部材オブジェクトBは破壊されないため、基本的には構造体として倒壊しない挙動を算出する。なお、部材オブジェクトBは破壊されないものの、物理演算により部材オブジェクトBが移動する(元の位置からずれる)場合、ずれたことで全体のバランスが悪くなり、構造体として倒壊することは生じうる。なお倒壊し、地面に落下した部材オブジェクトは、消失するように制御される。
以上のように進行制御部120は、攻撃を受けた第2構造体206の部材オブジェクトの耐久力に応じた第2構造体206の挙動を決定し、その挙動に応じて第2構造体206の状態を変化させる。その結果、ゲーム画像生成部124は、攻撃を受けた第2構造体206の挙動を示す画像を生成し、画像合成部154が、その挙動画像を、現実の画像に合成する。
図9は、砲弾により構造体の一部が破壊された画像の例を示す。この例では、ユーザによる1回目の攻撃ターンで、敵キャラクタCが載せられていた構造体の部分が倒壊し、ゲーム画像生成部124は、第2構造体206が崩れる画像を生成する。ユーザによる1回目の攻撃ターンが終了すると、視点設定部118は、仮想カメラの視点位置および視線方向を変更し、ゲーム画像生成部124が、視点位置および視線変更を変更された仮想カメラで撮影したゲーム画像を生成する。このゲーム画像は画像合成部154に提供され、画像合成部154は、カメラ14が撮影した画像に、視点位置および視線方向を変更した仮想カメラで撮影したゲーム画像を合成する。
図10は、相手側の攻撃ターンで、第1構造体204に砲弾212が撃ち込まれた様子を示す。ユーザの攻撃ターンが終了すると、視点設定部118は、仮想カメラの視点位置を自陣と敵陣の間の位置に移動し、右側に自陣が、左側に敵陣が見えるような視線方向に設定する。これによりユーザは、第1構造体204が攻撃される様子を俯瞰的に見ることができるようになる。
上記したように対戦相手は、コンピュータ(ゲームプログラム)が操作するNPC(ノンプレイヤーキャラクタ)であり、具体的には進行制御部120が、第1構造体204の3箇所のポイントを砲弾で狙うターゲット位置として選択すると、攻撃内容受付部116が、各大砲から発射される砲弾の弾道を設定する。進行制御部120は、大砲から砲弾を発射すると、設定された弾道で砲弾を第1構造体204まで動かし、第1構造体204のターゲット位置に着弾させて、砲弾を部材オブジェクトに衝突させる。進行制御部120は、攻撃を受けた第1構造体204の部材オブジェクトの耐久力に応じた第1構造体204の挙動を決定し、その挙動に応じて第1構造体204の状態を変化させる。その結果、ゲーム画像生成部124は、攻撃を受けた第1構造体204の挙動を示す画像を生成し、画像合成部154が、その挙動画像を、現実の画像に合成する。物理演算により第1構造体204が倒壊することが算出されると、ゲーム画像生成部124は、第1構造体204が崩れる画像を生成する。
図11は、相手側の攻撃ターンが終了したときのゲーム画像を示す。互いに1回の攻撃ターンを終えたところ、敵のキャラクタCが消失し、一方でユーザのキャラクタA、Bは残っている。続いて2回目の攻撃ターンが開始する。ユーザが攻撃準備ボタン210をタッチ操作すると、攻撃指示受付部114が攻撃指示を受け付け、視点設定部118は、仮想カメラの視点位置および視線方向を変更する。
図12は、攻撃する準備を行うためのゲーム画像の例を示す。攻撃指示受付部114が攻撃指示を受け付けると、視点設定部118は、仮想カメラの視点位置を自陣側に移動し、視線方向を自陣から敵陣に向かう方向に設定する。これによりユーザは、敵の第2構造体206を真正面から見ることができるようになる。
ユーザは、第2構造体206の3箇所のポイントを、砲弾で狙うターゲット位置として選択する。攻撃内容受付部116は、3つの位置座標から、第2構造体206に対する攻撃内容を受け付け、進行制御部120は、攻撃内容受付部116から提供された攻撃内容にしたがって第2構造体206を攻撃する。以上のようにバトルゲームでは、互いに攻撃を繰り返す。
図13は、3回目の攻撃ターンで、残っていた敵キャラクタDを地面に落とした様子を示す。進行制御部120は、第2構造体206に載せられている敵キャラクタが、第1構造体204に載せられているユーザのキャラクタよりも先に落下すると、ユーザの勝利を決定する。なお上記の例ではユーザが先に攻撃を仕掛けていたため、敵が次の攻撃ターンでユーザの全てのキャラクタを地面に落とせなかったときに、ユーザの勝利となってもよい。
なお進行制御部120は、様々なルールによって勝敗を決定してよく、たとえばターン数やバトル時間を制限している場合には、バトル終了時に、ゲーム仮想空間において、より高い位置にキャラクタが存在している方を、勝者としてもよい。またバトル終了時に、残存しているブロック数が多い方や、残存しているブロック数と構造体で使用していたブロック数の比率が高い方を、勝者としてもよい。
ゲームデータ保存部128は、バトルにおけるゲーム進行を再現するためのゲームデータをゲームデータ記憶部34に記憶する。このゲームデータは、仮想ゲーム空間を構築していたデータと、各構造体に対する攻撃内容を特定するためのデータを少なくとも含む。仮想ゲーム空間を構築していたデータは、第1構造体204の構造体データと、第2構造体206の構造体データを含む。各構造体に対する攻撃内容を特定するためのデータは、ユーザが入力部12を操作した操作情報と、その操作時刻を示す時間情報とを少なくとも含み、進行制御部120が第1構造体204を攻撃したときの各種情報を含む。
ゲームデータの再生モードでは、進行制御部120が、ゲームデータを用いてゲームの進行を再現し、ゲーム画像生成部124が、仮想ゲーム空間を仮想カメラで撮影したゲームのリプレイ画像を生成する。画像合成部154は、リプレイ時にカメラ14で撮影している現実画像に、リプレイされるゲーム画像を合成して表示部20に表示する。このようにゲームデータ保存部128がゲームデータをゲームデータ記憶部34に記憶することで、ユーザは、いつでもゲームデータを再生して、過去のバトルの様子を視聴できる。たとえばアップロード処理部152が、ゲームデータをサーバ3にアップロードすることで、別のユーザに、自分のバトルの様子を視聴させることも可能となる。
実施形態のバトルゲームでは、ユーザが複数の部材オブジェクトを組み合わせた構造体を利用する。以下、ユーザが構造体を容易に作成するための作成ツールについて説明する。
図14は、処理部100の機能ブロックを示す。処理部100は、操作受付部102およびゲーム制御部110を備える。操作受付部102は、入力部12に入力されたユーザの操作を受け付け、ユーザの操作情報をゲーム制御部110に渡す。入力部12がタッチスクリーンである場合、操作受付部102は、入力部12から、タッチスクリーンのタッチ位置を示す座標値(xy座標値)を取得し、ゲーム制御部110に渡す。
ゲーム制御部110は、ゲームプログラムを実行する実行部であって、第1画像生成部130、第2画像生成部132、第3画像生成部134、第4画像生成部136、部材配置部140および視点設定部118を有する。記憶部24は、ゲームソフトウェア30を記憶する。
図14に示す各機能ブロックは、ハードウェア的には、コンピュータのプロセッサ16、記憶部24におけるメモリをはじめとする素子や電子回路、機械装置で実現でき、ソフトウェア的にはシステムソフトウェアやゲームプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。実施形態におけるゲームソフトウェア30は、記憶部24にインストールされており、端末装置10のプロセッサ16は、ゲームソフトウェア30をメインメモリに読み出して実行することにより、処理部100の各ブロックの機能を発揮する。これらの機能ブロックがハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
図15は、構造体を作成するための画面の例を示す。構造体の作成画面は、構造体を作成する仮想空間を表示する仮想空間表示エリア300、仮想空間に配置するための部材オブジェクトの選択肢を表示する部材表示エリア302、ユーザが操作する各種操作アイコンを表示する操作アイコン表示エリア304、306、308、および現在の作成状況を表示する作成状況表示エリア310を含む。
第1画像生成部130は、高さ方向の基準となる基準面312を有する三次元の仮想空間の画像を生成し、仮想空間表示エリア300に表示する。仮想空間がXYZ軸で表現される場合、高さ方向はZ軸で表現され、基準面312は、長さ有限のXY平面で表現される。具体的に第1画像生成部130は、三次元の仮想空間を仮想カメラが撮影した画像を、仮想空間表示エリア300に表示する。ユーザは、仮想空間表示エリア300をタッチした指を動かすことで、仮想カメラの視点位置および視線方向を変更して、表示される仮想空間の姿勢を変更できる。
第2画像生成部132は、仮想空間に配置するための部材オブジェクトの選択肢を示す画像を生成し、部材表示エリア302に表示する。部材オブジェクトは、複数のカテゴリにグルーピングされており、ここでは、土台、基本、装飾、EX(エクトラ)、キャラクタ、セットのカテゴリが用意されている。
仮想空間表示エリア300にユーザが構造体を組み立てるにあたり、基準面312には、土台オブジェクトのみが配置でき、土台オブジェクトの上に、様々な部材オブジェクトを積み上げられるようになっている。なお土台オブジェクトの上に、土台オブジェクトを積み上げることも可能である。構造体作成画面のデフォルトの状態では、基準面312の中央に、1つの土台オブジェクト320が配置されている。ユーザは、この土台オブジェクト320を別の土台オブジェクトに変更でき、また基準面312に、別の土台オブジェクトを追加で配置することもでき、また土台オブジェクト320の位置を動かすこともできる。
第1画像生成部130は、仮想空間表示エリア300においてユーザが操作可能な部材オブジェクトを、所定の目立つ態様で表現する。たとえば第1画像生成部130は、ユーザが操作可能なオブジェクトに特別な色を付して目立たせてよく、または当該オブジェクトを点滅させて目立たせてもよい。いずれにしても仮想空間表示エリア300において、ユーザが操作可能な部材オブジェクトは、目立つ態様で表示されており、ユーザは、操作可能な部材オブジェクトを容易に特定することができる。
なおユーザが操作可能な部材オブジェクトとは、仮想空間表示エリア300においてユーザが最後に操作した部材オブジェクトである。ユーザは別の部材オブジェクトを操作したければ、当該別のオブジェクトをタップすればよい。そうするとタップされた別のオブジェクトは、所定の目立つ態様で表示される。
ユーザは部材オブジェクトをドラッグすることで、仮想空間内で部材オブジェクトを移動できる。またユーザは、第3画像生成部134に表示される操作アイコンをタップすることでも、部材オブジェクトを移動できる。
第3画像生成部134は、ユーザが操作可能な部材オブジェクトを仮想空間内で移動させるための操作アイコンの画像を生成し、操作アイコン表示エリア304に表示する。操作アイコン表示エリア304において、方向インジケータ330は、仮想空間表示エリア300における仮想空間の基準面312の向きを示すとともに、部材オブジェクトを移動させるためのGUI機能を備えている。
前矢印アイコン330aは、部材オブジェクトを基準面312の前方向(基準面中心位置から3台並ぶ大砲のうち真ん中の大砲に向かう方向)に移動させるための操作アイコン、右矢印アイコン330bは、部材オブジェクトを基準面312の右方向(前方向に対して右を向く方向)に移動させるための操作アイコン、後矢印アイコン330cは、部材オブジェクトを基準面312の後方向(前方向に対して逆向きの方向)に移動させるための操作アイコン、左矢印アイコン330dは、部材オブジェクトを基準面312の左方向(前方向に対して左を向く方向)に移動させるための操作アイコンである。たとえばユーザが前矢印アイコン330aを1回タップすると、部材配置部140が、操作対象の部材オブジェクトを、所定量だけ前方向に移動させ、ユーザが右矢印アイコン330bを1回タップすると、部材配置部140が、操作対象の部材オブジェクトを、所定量だけ右方向に移動させる。
第3画像生成部134は、仮想カメラの視点位置および視線方向の変更に応じて、方向インジケータ330の向きを変更する。つまり第3画像生成部134は、前矢印アイコン330a、右矢印アイコン330b、後矢印アイコン330cおよび左矢印アイコン330dの矢印向きを、基準面312の前方向、右方向、後方向、左方向に合わせる。これによりユーザは、矢印アイコンを利用したオブジェクト移動を容易に行うことができる。
上矢印アイコン332は、部材オブジェクトを上の階層に移動させるための操作アイコン、下矢印アイコン334は、部材オブジェクトを下の階層に移動させるための操作アイコンである。操作対象である部材オブジェクトの現在のXY座標値に対して、Z軸(高さ)方向に配置可能な面(階層)が1つ以上存在している場合、ユーザは上矢印アイコン332または下矢印アイコン334を操作して、操作対象である部材オブジェクトを上の階層または下の階層に移動させることができる。
たとえば図15に示す基本カテゴリにおいて、広い面積をもつ板状オブジェクトが示されているが、基準面312から順に、第1土台オブジェクト、第1板状オブジェクト、第2土台オブジェクト、第2板状オブジェクト、第3土台オブジェクト、第3板状オブジェクトが積み重ねられた構造体が形成されている場合、3つの板状オブジェクトが高さ方向に間隔を空けて配置される。新しい部材オブジェクト(第2土台オブジェクト、第3土台オブジェクトの高さよりも薄いことを前提とする)を当該構造体に配置しようとした場合、この部材オブジェクトは第1板状オブジェクト、第2板状オブジェクト、第3板状オブジェクトのいずれにも配置できる。このような場合にユーザは、上矢印アイコン332または下矢印アイコン334を操作して、部材オブジェクトを、所望の板状オブジェクト上に配置する。
第3画像生成部134は、ファイル管理のための操作アイコンの画像を生成し、操作アイコン表示エリア306に表示する。また第3画像生成部134は、編集を効率化するための操作アイコンの画像を生成し、操作アイコン表示エリア308に表示する。配置面設定アイコン338は、基準面からの高さで定義される配置面を設定するための操作アイコンであり、ユーザは、所望の高さに配置面を設定できる。上記したように、高さ方向に複数の階層が存在する場合、ユーザが望んでいない階層に、部材オブジェクトが配置されることがある。そのため配置する階層が決まっていれば、ユーザは配置面設定アイコン338を操作して、その階層に配置面を設定することで、部材オブジェクトを配置面以外の高さに配置できないようにしてよい。このとき部材配置部140は、設定された配置面にのみ、部材オブジェクトを配置できるようにし、それ以外の高さに部材オブジェクトを配置できないようにする。特に当該階層に、多くの部材オブジェクトを配置する場合、配置面を設定することで、ユーザは所望の構造体を形成しやすくなる。
グルーピングアイコン340は、複数の部材オブジェクトをまとめたい場合に利用される操作アイコンである。これまで操作可能な部材オブジェクトは1つであることを前提としていたが、グルーピングアイコン340を利用することで、まとめて移動させたい複数の部材オブジェクトをグルーピングできる。回転アイコン342は、仮想空間を回転するための操作アイコンである。
図16は、部材オブジェクトを配置する様子を示す。部材配置部140は、ユーザ操作にしたがって、仮想空間の基準面312上に部材オブジェクトを配置する。部材配置部140は、タッチ操作するタッチスクリーン上の2次元座標値(xy座標値)を、仮想空間における基準面312上のXY座標値に変換して、移動する部材オブジェクトの基準面312上のXY座標値を算出する。ユーザは部材表示エリア302から1つの部材オブジェクトをドラッグして、仮想空間表示エリア300内に持っていく。ここでは基本カテゴリの中から、板状の基本オブジェクト350がドラッグされて、仮想空間表示エリア300内を移動している様子が示される。
図17は、基本オブジェクト350が土台オブジェクト320に積み重ねられた様子を示す。部材配置部140は、既に仮想空間内に配置された土台オブジェクト320に、別の基本オブジェクト350を重ねる。具体的に部材配置部140は、土台オブジェクト320が配置されているXY座標と、基本オブジェクト350のXY座標に重複がある場合に、土台オブジェクト320の上に基本オブジェクト350を重ねる。図示されるように基本オブジェクト350は、ユーザが操作可能なオブジェクトであるため、所定の目立つ態様で表現されている。ユーザは基本オブジェクト350の前後左右の位置を微調整するために、方向インジケータ330における矢印アイコンを操作してよい。
図18は、ユーザが画面を指でなぞって、仮想空間の姿勢を変化させた様子を示す。ユーザは基準面312の表示領域付近を指でなぞることで、基準面312の姿勢を変化できる。具体的には操作受付部102が指操作の軌跡を受け付け、視点設定部118が、指操作の軌跡にしたがって、仮想カメラの視点位置および視線方向を変更する。これにより第1画像生成部130は、視点位置および視線方向を変更された仮想空間の画像を生成して表示する。第3画像生成部134は、仮想カメラの視点位置の変更に応じて、方向インジケータ330の向きを変更する。具体的に第3画像生成部134は、前矢印アイコン330a、右矢印アイコン330b、後矢印アイコン330cおよび左矢印アイコン330dの矢印向きを、基準面312の前方、右方、後方、左方に合わせる。これによりユーザは、矢印アイコンを利用したオブジェクト移動を容易に行うことができる。
図19は、部材オブジェクトを積み上げている様子を示す。部材配置部140は、ユーザ操作にしたがって、既に仮想空間内に配置された部材オブジェクトに、新たな部材オブジェクトを重ねて配置する。ここでは基本オブジェクト352が積み重ねられて、所定の目立つ態様で表現されている。
高さ方向において、複数の階層が存在する場合の部材配置部140の処理について説明する。部材配置部140は、タッチ操作するタッチスクリーン上の2次元座標値(xy座標値)を、仮想空間における基準面312上のXY座標値に変換する。したがって高さ方向に複数の部材オブジェクトが間隔を空けて配置されている場合に、部材配置部140は、ユーザが配置操作する部材オブジェクトをいずれの階層に配置するか決定しなければいけない。
そこで部材配置部140は、ユーザが配置操作する部材オブジェクトを、最も高い位置に配置されている部材オブジェクトに重ねてよい。実施形態のバトルゲームでは、敵の砲弾を防御する防御壁が重要な役割を果たすため、ユーザは、部材オブジェクトを積み上げる操作をすることが多い。そこで部材配置部140は、複数の階層が存在する場合に、ユーザが配置操作する部材オブジェクトを、最も高い位置に配置されている部材オブジェクトに重ねることで、ユーザの配置作業をサポートしてよい。
なお部材配置部140は、高さ方向に複数の部材オブジェクトが間隔を空けて配置されている場合に、ユーザが配置操作する部材オブジェクトを重ねる部材オブジェクトを、仮想空間の姿勢に応じて決定し、決定した部材オブジェクトに重ねてよい。たとえば図18に示すように、基準面よりも下側に仮想カメラを配置している場合は、ユーザが、上の階層よりも下の階層に興味を有していることが推定される。したがって部材配置部140は、仮想カメラの視点位置が基準面よりも上であるか、下であるかに応じて、ユーザが配置操作する部材オブジェクトを重ねる階層を決定してもよい。
図20は、部材オブジェクトをさらに積み上げている様子を示す。ここでは基本オブジェクト354が最後に積み重ねられている。
以上のようにユーザは、自由に部材オブジェクトを積み上げて、構造体を作成できる。構造物作成画面における仮想空間では、仮想的な重力は作用させておらず、そのためユーザは高い自由度で構造体を作成できる。
一方、作成した構造体は、仮想的な重力が設定された三次元の仮想ゲーム空間内に配置されて、バトルゲームに利用される。つまり構造物作成画面ではユーザが自由に構造体を組み立てることができたが、バトルゲームの仮想ゲーム空間内では、構造体に作用する重力を無視できない。そのため重力を気にせずに作成した構造体をバトルゲームに利用すると、バトル開始の瞬間に構造体が崩れ落ちる、という事態も発生しうる。
そこで作成した構造体が、重力の作用を受けたときの影響を観測するためのモードが用意されている。ユーザが観測アイコン336をタッチ操作すると、第4画像生成部136が、重力観測モード画像を生成して、表示部20に表示する。
図21は、重力観測モード画像を示す。ユーザが重力ONボタン360をタッチ操作すると、進行制御部120(図3参照)が、部材オブジェクトを積み上げて作成した構造体が配置された仮想空間内に、基準面312に対して垂直方向の仮想的な重力を作用させる。具体的には進行制御部120が、物理量として構造体に重力を作用させたときの挙動を物理演算する。
図22は、構造体に重力を作用させた結果を表現する。進行制御部120が仮想重力を構造体に作用させたときの挙動を算出し、その挙動にしたがって構造体を状態変化させると、第4画像生成部136が、算出された挙動で構造体が崩れる画像を生成して、表示部20に表示する。ユーザは、構造体が崩れる画像を見ることで、作成した構造体が重力に耐えられないことを認識できる。
以上、本発明を実施形態をもとに説明した。この実施形態は例示であり、実施形態に記載の各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
実施形態では、土台オブジェクトのみが基準面312に配置でき、その他の部材オブジェクトを基準面312に配置できない制限が課されることについて説明したが、対戦以外の目的で構造体を作成する場合には、そのような制限を排除してよい。たとえば鑑賞するための構造体を作成する場合、ユーザは基準面312上に好きな部材オブジェクトを配置でき、また対戦目的の構造体を作成するよりも広い基準面312上に部材オブジェクトを配置できてもよい。ゲームソフトウェア30は構造体の作成を、対戦用構造体作成モードまたは観賞用構造体作成モードのいずれかで実行できるようにしてもよく、ユーザは目的に応じて構造体作成モードを選択して、構造体を作成してもよい。