本発明は、操作装置の姿勢情報を用いて表示装置に表示されるオブジェクトの動きを制御するプログラムおよび記録媒体に関する。
従来、ディスプレイを用いた家庭用のゲーム機のコントローラにおいて、角速度センサ若しくは加速度センサ等の姿勢を検出することができる姿勢センサを内蔵したコントローラが商品化されている。また、そのコントローラを用いたゲームプログラムも商品化されている。
角速度センサを内蔵したコントローラは、ゲーム機に角速度センサで検出した角速度の検出信号を出力する。角速度センサの検出信号は、コントローラに設定されたxyzの直交座標系における各座標軸の周りをコントローラが回転する角速度を検出した信号である。加速度センサの検出信号は、上記のxyzの各座標軸方向におけるコントローラの加速度を検出した信号である。
ゲーム機内では、角速度センサ若しくは加速度センサの検出信号を用いてコントローラの基準姿勢に対する相対的な姿勢の変化量を算出する。基準姿勢は、例えば、コントローラに設定されるxyz座標系のxz面が水平面に一致し、かつ、z軸がゲーム機に向いた姿勢である。姿勢の変化量は、コントローラの各座標軸周りの回転角の変化量若しくは各座標軸方向の変位量である。
そして、ゲーム機は、コントローラの姿勢の変化量の算出結果を用いて、ゲーム機のディスプレイに表示するキャラクタあるいはオブジェクトのディスプレイ上の動きを制御する。キャラクタは、例えば、使用者あるいはコンピュータが制御する動物あるいは人物などの画像である。なお、オブジェクトはキャラクタを含む概念であるが、以下では説明の便宜上、オブジェクトとキャラクタとを区別して説明する。
例えば、テニスゲームでは、使用者がテニスラケットを振るようにコントローラを振ると、そのときのコントローラの姿勢の変化に基づいて、ディスプレイに表示されたプレイヤキャラクタがテニスラケットを振る動きをする。プレイヤキャラクタは使用者の操作によってディスプレイ上の動作が制御されるキャラクタである。また、アクションゲームでは、使用者がコントローラの所定のボタンを押すと、プレイヤキャラクタが銃を構える動作をするとともに、その銃の狙っている位置を示す照準のオブジェトが表示される。そして、使用者がボタンを押した状態でコントローラを上下又は左右に振ると、そのときのコントローラの姿勢(向き)の変化に応じてディスプレイ上で照準の表示位置が変化する。
WO2009/084213A1公報には、仮想の三次元ゲーム空間でゲームが展開するアクションゲームにおいて、使用者がゲーム画像を通じてプレイヤキャラクタの周りの状況を見ることができるようにするために、以下の発明が記載されている。すなわち、上記公報には、角速度センサが内蔵されたコントローラの回転に応じて、三次元ゲーム空間上に配置される仮想カメラがプレイヤキャラクタを中心とする円周上で回転する発明が記載されている。
同公報に記載の発明は、プレイヤキャラクタが三次元ゲーム空間上で取得したトロフィーなどのアイテムの形状及びデザインの詳細を使用者が確認できるようにする場合にも適用することができる。この場合は、コンピュータは、コントローラの回転に応じて仮想カメラをアイテムの周りで回転する。コンピュータは、この仮想カメラの回転により、アイテムを360度全方向から見た映像を生成してディスプレイに表示する。
WO2009/084213A1公報
特開2009−101035号公報
特開2010−5332号公報
ディスプレイに表示されたキャラクタ及びオブジェクトの動きをコントローラのxyzの各座標軸周りの回転角に基づいて制御するためには、その回転角をできるだけ正確に検出する必要がある。しかしながら、角速度センサを用いてコントローラの基準姿勢からの回転角を検出する場合、回転角は、角速度センサから出力される角速度を積分して算出される(特開2009−101035号公報及び特開2010−5332号公報)。そのため、角速度の積分値に角速度センサのドリフトによる誤差が累積し、検出される回転角が時間の経過とともに不正確になるという問題がある。このため、ゲーム時間が長時間に亘る場合は、コントローラの姿勢の変化に基づいてディスプレイに表示されるキャラクタ及びオブジェクトの動きを適切に制御できない場合が生じる。
テニスゲームなどのようにゲーム開始からゲーム終了するまでの時間が比較的短いゲームソフトでは、例えば、新規にゲームを開始する毎に、使用者がコントローラの基準姿勢を再設定(リセット)するための所定の操作をしなければならないようになっている。この操作を「キャリブレーション操作」と言い、コンピュータが行うコントローラの基準姿勢を再設定(リセット)する処理を「キャリブレーション処理」という。
ディスプレイに表示された選択画面で、使用者がコントローラを振ることによってディスプレイに表示されたカーソルを所望の選択項目に移動させる制御を行う場合、使用者のコントローラの振り方によってはカーソルがディスプレイの画面外に出てしまい、カーソル位置が分からなくなる状態が生じる。そのため、使用者がキャリブレーション操作を行う必要がある。この場合には、例えば、使用者がコントローラをディスプレイに向けた状態でキャリブレーション操作として所定のボタンを押す操作をすると、その操作に基づいて、コンピュータがカーソルの表示位置をディスプレイの所定の位置にリセットする処理を行う。
しかしながら、例えば、「バイオハザード(登録商標)」のようなゲーム時間が長時間になるゲームで、コントローラの姿勢の変化を利用してディスプレイに表示されるキャラクタやオブジェクトの動きを制御しようとすると、コントローラの姿勢の変化に基づいてディスプレイに表示されるキャラクタやオブジェクトの動きを制御することができなくなる場合が生じる。コントローラに内蔵された角速度センサの検出角速度から算出される回転角の誤差が時間の経過とともに増大するからである。
この不都合を解消するためには、ゲーム中に定期的若しくは適当なタイミングでコンピュータがコントローラのキャリブレーション処理を行うようにすることが考えられる。しかし、ゲーム開始時に使用者が行うキャリブレーション操作をゲーム中にも行う場合、コンピュータはキャリブレーション処理のためにゲーム展開の制御を中断することになる。そのため、キャリブレーション操作がゲームに熱中している使用者にストレスとなり、ゲームの面白み、あるいはゲームへの興味が薄れるという問題が生じる。
また、一般にゲームでは、ゲームメディアからゲームソフトをゲーム機に読み込んでゲームができるようになるまでに、使用者が種々の選択操作や設定操作をしなければならず、そのために一定の時間を要する。ゲームをできるようするための操作にキャリブレーション操作も加えると、使用者にとっては煩わしさが増加する。従って、可能であれば、ゲーム中にコンピュータがキャリブレーション処理を自動的に行うようにすることが好ましい。しかし、従来、このような機能を備えたゲームソフトは提案されていない。
本発明は、姿勢を検出することができるセンサを備えたコントローラのキャリブレーション処理をゲーム中の使用者による所定の操作によって自動的に行うことができ、コントローラの姿勢の変化に基づくゲーム画面内のキャラクタやオブジェクトの動きを好適に制御することができるプログラム及びそのプログラムを記録した記録媒体を提供することを目的としている。
上記課題を解決するため、本発明では、次の技術的手段を講じている。
本発明の第1の側面によって提供されるコンピュータは、ゲームの操作装置に設けられた姿勢センサの検出値を受信し、この検出値に基づいて、前記操作装置の基準姿勢からの姿勢の変化量を算出する姿勢変化量算出部と、前記姿勢変化量算出部で算出される前記操作装置の姿勢の変化量に基づいて、前記ゲームのオブジェクトを制御するオブジェクト制御部と、前記ゲームの実行中に所定の条件が成立すると、前記姿勢変化量算出部の前記姿勢の変化量を算出するための前記操作装置の基準姿勢を再設定するリセット部と、して機能させることを特徴とする。
なお、操作装置は、コントローラなどのゲーム装置とは別体の操作装置だけでなく、携帯型ゲーム装置のようにゲーム装置本体に一体的に設けられた操作部材も含むものである。後者の場合は、ゲーム装置本体が使用者の操作する操作装置となる。同様に、表示装置は、テレビモニタなどのゲーム装置とは別体の表示装置だけでなく、携帯型ゲーム装置のようにゲーム装置本体に一体的に設けられたディスプレイも含むものである。
上記のプログラムと記録媒体において、前記所定の条件の成立は、使用者によってゲーム進行に使用される前記操作装置の所定の操作部材が操作されたことを示す操作信号を受け取ることにするとよい。
上記のコンピュータにおいて、前記所定の操作部材は、前記使用者による前記オブジェクトの操作開始を指示する第1の操作部材であり、前記オブジェクト制御部は、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記オブジェクトの操作終了を指示する第2の操作部材の操作信号を受け取るまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。
上記のコンピュータにおいて、前記オブジェクト制御部は、前記使用者による前記第1の操作部材の操作信号を受け取ると、前記リセット部によりリセットされた前記操作装置の姿勢の変化量に基づいて、前記オブジェクトを表示装置の表示画面の予め設定されている初期位置に表示する初期表示制御部と、リセット後に前記姿勢変化量算出部で算出される前記操作装置の姿勢の変化量に基づいて、前記使用者による前記第2の操作部材の操作信号を受け取るまで、前記表示画面に表示された前記オブジェクトの表示位置を制御する表示位置制御部と、を含むとよい。
上記のコンピュータにおいて、前記リセット部は、前記使用者による前記操作装置に設けられた前記第1の操作部材の操作信号を受け取ると、前記操作装置の基準姿勢を再設定し、前記オブジェクト制御部は、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記操作装置に設けられた前記第2の操作部材の操作信号を受け取るまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。
上記のコンピュータにおいて、前記第1の操作部材と前記第2の操作部材はモーメンタリー・オン−オフ・スイッチからなり、前記コンピュータが受け取る前記使用者による前記第1の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチを押下する操作信号であり、前記コンピュータが受け取る前記使用者による前記第2の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチの押下を解除する操作信号であるとよい。
上記のコンピュータにおいて、前記初期位置は、前記表示画面の中央位置であるとよい。
上記のコンピュータにおいて、前記姿勢センサは、角速度センサであり、前記姿勢変化量算出部は、前記角速度センサによる角速度検出値を積分演算した回転角を前記操作装置の前記基準姿勢からの姿勢の変化量として算出するとよい。
上記のコンピュータにおいて、前記オブジェクトは、前記表示装置に表示されるゲーム画面に対して前記使用者が前記操作装置から所定の操作情報を入力するときに当該操作を補助するために表示するオブジェクトであるとよい。また、前記ゲーム画面は、射撃の要素を含むゲーム画面であり、前記オブジェクトは、前記射撃の目標を示す照準オブジェクトであるとよい。
本発明の第2の側面によって提供される記録媒体は、コンピュータを、ゲームの操作装置に設けられた姿勢センサの検出値を受信し、この検出値に基づいて、前記操作装置の基準姿勢からの姿勢の変化量を算出する姿勢変化量算出手段と、前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記ゲームのオブジェクトを制御するオブジェクト制御手段と、前記ゲームの実行中に所定の条件が成立すると、前記姿勢変化量算出手段の前記姿勢の変化量を算出するための前記操作装置の基準姿勢を再設定するリセット手段と、して機能させるプログラムを記録したコンピュータ読み取り可能な記録媒体である。
上記の記録媒体において、前記所定の条件の成立は、使用者によってゲーム進行に使用される前記操作装置の所定の操作部材が操作されることにするとよい。また、前記所定の操作部材は、前記使用者による前記オブジェクトの操作開始を指示する第1の操作部材であり、前記オブジェクト制御手段は、前記使用者により前記第1の操作部材が操作されてから前記使用者により前記オブジェクトの操作終了を指示する第2の操作部材が操作されるまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。
上記の記録媒体において、前記使用者により前記第1の操作部材が操作されると、前記リセット手段によりリセットされた前記操作装置の姿勢の変化量に基づいて、前記オブジェクトを前記表示装置の表示画面の予め設定されている初期位置に表示する初期表示制御手段と、リセット後に前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記使用者により前記第2の操作部材が操作されるまで、前記表示画面に表示された前記オブジェクトの表示位置を制御する表示位置制御手段と、を含むとよい。
上記の記録媒体において、前記リセット手段は、前記使用者により前記操作装置に設けられた前記第1の操作部材が操作されると、前記操作装置の基準姿勢を再設定し、前記オブジェクト制御手段は、前記使用者により前記第1の操作部材が操作されてから前記使用者により前記操作装置に設けられた前記第2の操作部材が操作されるまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。
上記の記録媒体において、前記第1の操作部材と前記第2の操作部材はモーメンタリー・オン−オフ・スイッチからなり、前記使用者による前記第1の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチを押下する操作信号であり、前記使用者による前記第2の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチの押下を解除する操作信号であるとよい。
上記の記録媒体において、前記初期位置は、前記表示画面の中央位置であるとよい。また、前記姿勢センサは、角速度センサであり、前記姿勢変化量算出手段は、前記角速度センサによる角速度検出値を積分演算した回転角を前記操作装置の前記基準姿勢からの姿勢の変化量として算出するとよい。
上記の記録媒体において、前記オブジェクトは、前記表示装置に表示されるゲーム画面に対して前記使用者が前記操作装置から所定の操作情報を入力するときに当該操作を補助するために表示するオブジェクトであるとよい。また、前記ゲーム画面は、射撃の要素を含むゲーム画面であり、前記オブジェクトは、前記射撃の目標を示す照準オブジェクトであるとよい。
本発明によれば、ゲームを実行中に、操作装置の姿勢が変化すると、コンピュータは、姿勢センサによるその姿勢の変化の検出値を受信して操作装置の基準姿勢からの姿勢の変化量を算出する。そして、コンピュータは、その算出結果に基づいて表示装置へのオブジェクトの表示を制御する。すなわち、コンピュータは、操作装置の姿勢の変化量に応じて表示装置の表示画面におけるオブジェクトの表示位置を変化させる制御を行う。そして、ゲームの実行中に所定の条件が成立すると、コンピュータは、操作装置の基準姿勢を再設定し、その再設定した基準姿勢に対する姿勢の変化量を算出する。
例えば、使用者がゲーム進行に使用される所定の操作部材を操作すると、コンピュータは、操作装置の基準姿勢を再設定し、その再設定した基準姿勢に対する姿勢の変化量を算出する。例えば、プレイヤキャラクタが銃による攻撃を行うアクションを含むアクションゲームにおいて、使用者がゲームの実行中にプレイヤキャラクタに銃を構えさせるための所定の操作部材を操作すると、コンピュータは、その時の操作装置の姿勢を基準姿勢に再設定する。従って、その後にコンピュータが算出する操作装置の姿勢の変化量の誤差を抑制することができる。その結果、表示装置に表示された「照準」のオブジェクトの表示位置の制御が使用者の操作による操作装置の姿勢の変化量に基づいて好適かつ正確に行われる。
また、コンピュータは、操作装置の基準姿勢を再設定するキャリブレーション処理を所定の条件の成立を契機に行う。所定の条件の成立とは、例えば、ゲームの実行中に使用者が所定の操作部材を操作することである。この制御により、使用者に対して、操作装置のキャリブレーション処理のためにゲームが中断するというストレスを与えることがない。従って、使用者はゲームに集中することができる。
本発明のその他の特徴および利点は、添付図面を参照して以下に行う詳細な説明によって、より明らかとなろう。
図1は、ゲーム画面に表示されたプレイヤキャラクタに銃を構える動作をさせたときに銃の照準を示すオブジェクトが表示された状態を示す図である。
図2は、本実施形態に係るゲーム装置の構成を示す斜視図である。
図3は、本実施形態に係るゲーム装置の内部構成を示すブロック図である。
図4Aは、スティック型コントローラの構成を示す上面図である。
図4Bは、スティック型コントローラの構成を示す底面図である。
図5は、カメラに設定されたXYZ座標系におけるスティック型コントローラの位置を説明するための図である。
図6は、スティック型コントローラに設定されたUVW座標系と角速度センサで検出され角速度の関係を説明するための図である。
図7は、スティック型コントローラの指す方向とディスプレイの表示画面に表示されるカーソルの表示位置との関係を示す図である。
図8は、スティック型コントローラの姿勢の変化によりスティック型コントローラに設定されたUVW座標系が回転する様子を示す図である。
図9は、スティック型コントローラの内部構成を示すブロック図である。
図10は、スティック型コントローラの発光部の撮影画像からスティック型コントローラの現在の位置情報を取得する方法を説明するための図である。
図11は、カメラのXYZ座標系で算出されたスティック型コントローラの位置とディスプレイの表示画面に表示するオブジェクトの位置との関係を示す図である。
図12は、フレーム周期で各コマのゲーム画像を生成する際にそのゲーム画像に照準オブジェクトを表示させるための処理手順を示すフローチャートである。
図13は、数フレームに亘って図12のフローチャートが実行されたときのフレーム毎の処理内容の変化の一例を表した図である。
以下、本発明の好ましい実施の形態として、射撃の要素を含むアクションゲームのプログラムを家庭用のゲーム装置で実行する場合について、添付図面を参照して具体的に説明する。
本実施形態に係るアクションゲームには、三次元の仮想ゲーム空間上に使用者によって制御されるプレイヤキャラクタと、プレイヤキャラクタが対戦する敵キャラクタとが登場する。そして、使用者は、プレイヤキャラクタを多数の敵キャラクタと対戦させながら所定の目的を達成する。敵キャラクタは、CPU(Central Processing Unit)によって制御されるキャラクタである。前記所定の目的は、例えば、多数の敵キャラクタの中のボスを倒す、敵キャラクタに占拠された街を解放する、隠された秘宝を探索するなどである。
本実施形態に係るアクションゲームでは、一人の使用者がパッド型コントローラ及びスティック型コントローラの2種類のコントローラを用いて一のプレイヤキャラクタの動作を制御することができる。パッド型コントローラは、パッドに複数のボタンが設けられ、使用者がパッドを両手で保持して複数のボタンを操作するタイプのコントローラである。スティック型コントローラは、スティック型コントローラの姿勢を検出する姿勢センサとして角速度センサを内蔵した棒状のコントローラである。
プレイヤキャラクタが敵キャラクタを攻撃するための武器として、例えば、「ナイフ」、「銃」、「爆弾」などの複数の武器がある。使用者がパッド型コントローラとスティック型コントローラのいずれか若しくは両方を操作することで、プレイヤキャラクタが各武器によって敵キャラクタを攻撃することができる。
スティック型コントローラ4には姿勢センサが内蔵されている。そのため、銃による攻撃では、使用者はスティック型コントローラ4の姿勢を変化させる操作(コントローラ本体を傾けたり、移動させたりする操作)によってプレイヤキャラクタの銃による攻撃動作を制御することができる。
具体的には、使用者がスティック型コントローラ4に設けられた複数のボタンのうち、プレイヤキャラクタに銃を構える姿勢を指令するための所定のボタン(「構えボタン」)を押下すると、図1に示すように、プレイヤキャラクタPCが銃JOのオブジェクトを構えるとともに、その銃JOの銃口の向いている方向を示す照準AOのオブジェクトが表示される。
そして、使用者が構えボタンを押下した状態でスティック型コントローラ4を傾けたり、移動させたりすると、その動きによるスティック型コントローラ4の位置及び姿勢の変化に基づいて、ゲーム画面GにおけるプレイヤキャラクタPCの銃JOを構えた姿勢の向きと照準AOの表示位置が変化する。すなわち、使用者はスティック型コントローラ4の位置と姿勢を変化させることによって、プレイヤキャラクタPCが構える銃JOの銃口の方向を変化させることができる。
なお、スティック型コントローラ4の位置は、正確には、後述するカメラに設定されたXYZ座標系におけるスティック型コントローラ4の発光部の位置である。
一方、使用者が構えボタンの押下操作を解除すると、プレイヤキャラクタPCは構えの姿勢をやめ、ゲーム画面Gに表示されていた照準AOは非表示となる。すなわち、照準AOは、使用者の構えボタンの押下操作により、プレイヤキャラクタPCが銃JOを構えているときにだけゲーム画面Gに表示される。
そして、照準AOの表示位置が敵キャラクタECに重なったときに、使用者が所定のボタン(発射ボタン)を押下すると、プレイヤキャラクタPCが銃JOを撃つ。
ゲーム画面Gにおける照準AOの表示位置は、スティック型コントローラ4の位置情報と姿勢情報によって決まる。スティック型コントローラ4の現在の位置情報は、図2に示すように、カメラ7でスティック型コントローラ4を撮影した画像から取得することができる。
スティック型コントローラ4の姿勢情報は、スティック型コントローラ4に設定されたUVW座標系のU軸、V軸、W軸の各座標軸周りの回転角θu,θv,θwである。回転角θu,θv,θwは、内蔵の角速度センサで検出した上記各座標軸周りの角速度ωu,ωv,ωwを積分して得られる。スティック型コントローラ4の姿勢は、所定のタイミングで後述するキャリブレーション処理によって基準姿勢に設定される。従って、スティック型コントローラ4の現在の姿勢情報は、最新の基準姿勢におけるU軸、V軸、W軸に対して角速度センサの検出値を積分して得られる各座標軸周りの回転角θu,θv,θwである。
スティック型コントローラ4の基準姿勢からの角速度の積分時間が短い程、スティック型コントローラ4の姿勢情報(回転角θu,θv,θw)の誤差を抑制することができる。本実施形態では、スティック型コントローラ4の構えボタンが押される毎に姿勢情報(回転角θu,θv,θw)をゼロにリセットするキャリブレーション処理を行う。本実施形態のキャリブレーション処理は、構えボタンが押されたときのスティック型コントローラの姿勢を基準姿勢に設定し直す処理である。
照準AOの表示位置の制御は、構えボタンが押下されている期間にだけ行われる。本実施形態では、その期間の開始時のスティック型コントローラ4の姿勢が「基準姿勢」に設定し直される。そして、その基準姿勢からのスティック型コントローラ4の姿勢の変化情報とスティック型コントローラ4の現在の位置情報とを用いて照準AOの表示位置の制御が行われる。この制御ではスティック型コントローラ4の姿勢情報の誤差が抑制されるので、照準AOの表示位置を好適に制御することができる。
そこで、以下では、スティック型コントローラ4によってゲーム画面Gにおける照準AOの表示位置を制御する場合を例に本発明を説明する。
図2は、本実施形態に係るゲーム装置の構成を示す斜視図である。
ゲーム装置1は、ゲームのプログラムを実行する装置本体2、及び使用者Pが装置本体2にプログラムを実行するために必要な指令を入力するための操作部材であるコントローラ5等で構成されている。装置本体2には、プログラムを実行することによって生成したゲーム画像を表示するためのディスプレイ6が接続されている。コントローラ5にはパッド型コントローラ3とスティック型コントローラ4とが含まれる。使用者Pがスティック型コントローラ4を振る操作によって照準AOの表示制御をする際にカメラ7が必要となる。そのため、カメラ7も装置本体2に接続されている。
ディスプレイ6は、例えば、AVケーブルやHDMI(High-Definition Multimedia Interface)ケーブルなどのケーブル9で装置本体2に接続されている。カメラ7は、専用のケーブル10で装置本体2に接続されている。ディスプレイ6としては、例えば、液晶テレビやコンピュータ用のモニタなどが用いられる。カメラ7は、例えば、CCD(Charge-Coupled Device)カラーイメージセンサを用いたCCDカメラである。
パッド型コントローラ3及びスティック型コントローラ4は、無線通信によって装置本体2と接続される。この無線通信には、例えば、Bluetooth(登録商標)による通信方式が用いられる。なお、無線による通信方式には、Bluetooth(登録商標)以外の電波を利用した通信方式、光を利用した通信方式(例えば、IrDA通信方式)若しくは音波を利用した通信方式を用いてもよい。
また、パッド型コントローラ3は、専用のケーブルで装置本体2に接続してもよい。この場合、パッド型コントローラ3とスティック型コントローラ4とを無線通信で結合し、スティック型コントローラ4の操作情報を、パッド型コントローラ3を経由して装置本体2に送信するようにしてもよい。
装置本体2にはメディア挿入口2aが設けられている。このメディア挿入口2aに、プログラムが記録されたDVD−ROMあるいはCD−ROM等の光ディスクを用いたディスクメディア8が装填される。装置本体2にディスクメディア8が装填されると、CPUがそのディスクメディア8から初期ローディング用のプログラムとそのプログラムの実行に必要なデータ(画像のデータと音声のデータを含む)とを装置本体2内のRAM(Random Access Memory)に自動的に読み込む初期ローディング処理を行う。CPUは、初期ローディング処理の後、RAMに読み込んだプログラムを実行してゲームの初期画面(例えば、タイトル画面)をディスプレイ6の表示画面6aに表示する。
その後は、使用者Pのパッド型コントローラ3におけるボタンあるいはキーの押下操作、ジョイステックの回転操作又はスティック型コントローラ4を振る操作などに基づいて、CPUはプログラムを実行する。
なお、ディスクメディア8に記録されたプログラムには複数の独立したプログラムや相互に関連付けられた複数のプログラムが含まれている。本実施形態に係るアクションゲームにおいて、ゲーム空間は複数のフィールドで構成される。そして、フィールド単位でプレイヤキャラクタPCは多数の敵キャラクタECと対戦しながら所定の目的を達成する。従って、独立したプログラムには、各フィールドのゲーム進行を制御するプログラムも含まれる。また、照準AOをディスプレイ6の表示画面6aに表示させるための当該表示画面6aにおける表示位置を算出するプログラムも独立したプログラムに含まれる。
ゲーム進行を制御するプログラムには、複数の演算用のプログラムとグラフィック制御用のプログラムと音声制御用のプログラムとが含まれる。複数の演算用のプログラムには、例えば、複数の敵キャラクタECの動作を制御するためのプログラム、使用者Pの操作によってコントローラ5から入力される操作情報に基づいてプレイヤキャラクタPCの動作を制御するためのプログラム、及びプレイヤキャラクタPCの動作に基づいてゲーム空間上で発生する事象を制御するためのプログラムが含まれる。ゲーム空間上で発生する事象とは、例えば、対戦時におけるプレイヤキャラクタPC又は敵キャラクタECの負傷や死亡の発生、プレイヤキャラクタPCの破壊動作による建物などの損壊の発生などである。グラフィック制御用のプログラムは、上記の演算用のプログラムに基づく演算処理の処理結果をゲーム画像として描画する。音声制御用のプログラムは、効果音を発生させる。
プログラムを実行するために必要なデータには、例えば、上記の演算用のプログラムによる演算処理に必要な各種の数値のデータ、上記のグラフィック制御用のプログラムによる描画処理に必要な画像のデータ、及び上記の音声制御用のプログラムによる音声出力処理に必要な音声のデータが含まれる。数値のデータには、例えば、プレイヤキャラクタPCあるいはキャラクタECの体力もしくは攻撃/防御力を示すパラメータのデータ、両者の距離を演算するためのパラメータのデータ、及び各種のフラグのデータなどが含まれる。
画像のデータには、プレイヤキャラクタPCあるいは敵キャラクタECなどのキャラクタの画像を作成するためのデータ、対戦フィールドを構成する建物のオブジェクトや背景の画像を作成するためのデータ、ゲーム中のプレイヤキャラクタPCのステータスに関する情報を表示するためのデータ、及びプレイヤキャラクタPCが銃JOを構えたときに表示する照準AOのデータなどの各種のデータが含まれる。プレイヤキャラクタPCのステータスに関する情報には、例えば、体力値、装備している武器、防具、及びマップなどの情報が含まれる。
本実施形態では、ゲーム装置がプレイヤキャラクタPCの背後に配置した仮想カメラでプレイヤキャラクタPC側を撮影した仮想のゲーム空間の画像(透視投影法による二次元画像)を上記の画像のデータを用いて生成する。ゲーム装置は、生成した二次元画像をゲーム画像としてディスプレイ6に表示する。
音声データには、BGM、プレイヤキャラクタPCあるいは敵キャラクタECが発する音声、物体が衝突したときの衝突音、及び爆弾が爆発したときの爆発音などの各種の事象発生に対応した効果音のデータが含まれる。
相互に関連付けられた複数のプログラムは、例えば、1つの処理をするためのプログラムがメインルーチンとサブルーチンの関係にある複数のプログラムとで構成されている場合の両ルーチンのプログラムである。上記したフィールドのゲーム進行を制御するプログラムは、メインルーチンのプログラムとそのメインルーチンに関連付けられた複数のサブルーチンのプログラムとで構成されている。
各フィールドにおけるゲーム進行では、プレイヤキャラクタPCが多数の敵キャラクタECと対戦する処理が含まれる。その対戦にはプレイヤキャラクタPCが敵キャラクタECを銃撃する攻撃処理が含まれる。この攻撃処理は、メインルーチンに関連付けられたサブルーチンの処理として実行される。すなわち、コントローラ5からプレイヤキャラクタPCが敵キャラクタECを銃撃するための一連の操作情報が装置本体2に入力されると、攻撃処理のサブルーチンが実行されることによって、プレイヤキャラクタPCが銃JOを構え、照準AOが敵キャラクタECに合わさる。その後、弾が発射されるという一連の動作が行われる。
図3は、図2に示すゲーム装置1の内部構成を示すブロック図である。
装置本体2は、制御部201、描画処理部202、音声処理部203、I/Oインターフェース部205、ディスクドライブユニット206、メモリカード接続ユニット207、及び信号受信部208を備えている。制御部201には、描画処理部202、音声処理部203、及びI/Oインターフェース部205が接続されている。また、I/Oインターフェース部205には、ディスクドライブユニット206、メモリカード接続ユニット207、及び信号受信部208が接続されている。また、I/Oインターフェース部には、ケーブル9を介してディスプレイ6が接続され、ケーブル10を介してカメラ7が接続されている。
I/Oインターフェース部205は、ディスクドライブユニット206、メモリカード接続ユニット207、信号受信部208、ディスプレイ6及びカメラ7と、制御部201との間のデータ及び信号の送受を仲介する。
ディスクドライブユニット206は、制御部201からのローディング指令に基づき、ディスクメディア8からプログラムやデータを読み出すユニットである。ローディング指令は、ローディングすべきプログラムとそのプログラムの実行に必要なデータとを指定した読出指令である。ディスクドライブユニット206は、光ディスクドライブで構成される。
メモリカード接続ユニット207は、メモリカード11への情報の書き込みとメモリカード11からの情報の読み出しとを行う。メモリカード11は、前回のゲーム終了時の状態からゲームを再開できるようにするために、予め設定されたゲーム進行に関するデータを保存する。メモリカード11に保存されるデータには、例えば、ゲームの進行状況を示すデータ、使用者が設定したプレイヤキャラクタに関するデータ、ゲーム中に獲得したポイント及びアイテムなどの各種の特典のデータなどが含まれる。メモリカード11には、例えば、フラッシュメモリやSDカードなどが用いられる。
制御部201は、ゲームの開始時にプログラムをディスクメディア8から読み出した後、メモリカード接続ユニット207にデータ読出指令を出力する。メモリカード接続ユニット207は、そのデータ読出指令に基づき、メモリカード11から保存されているゲーム進行に関するデータを制御部201に読み出す。また、制御部201は、ゲーム進行中やゲーム終了時にパッド型コントローラ3から「データのセーブ」の操作情報が入力されると、メモリカード接続ユニット207にデータ書込指令を出力する。メモリカード接続ユニット207は、そのデータ書込指令に基づき、保存すべきゲーム進行に関するデータをメモリカード11に書き込む。
信号受信部208は、パッド型コントローラ3及びスティック型コントローラ4から短距離無線通信により送信される信号を受信する。信号受信部208は、受信した信号に含まれる両コントローラの操作情報及びスティック型コントローラ4に内蔵された角速度センサから出力される角速度情報を抽出し、制御部201に入力する。
プログラムは、主として制御部201、画像処理部202及び音声処理部203によって実行される。これらの処理部で処理された結果はI/Oインターフェース部205とケーブル9を介してディスプレイ6に出力される。処理結果に含まれる画像のデータはディスプレイ6の表示画面6aに表示される。また、処理結果に含まれる音声のデータはディスプレイ6のスピーカ6bから出力される。
制御部201が実行するプログラム及びデータは、ディスクドライブユニット206によってディスクメディア8から制御部201に読み込まれる。なお、データがメモリカード11に保存されている場合は、制御部201がメモリカード接続ユニット207を介してメモリカード11からデータを読み込む。また、コントローラ5の操作情報は、当該コントローラ5が操作される毎に信号受信部208を介して制御部201に入力される。
スティック型コントローラ4内の角速度センサで検出される角速度情報は、所定の周期で信号受信部208を介して制御部201に入力される。この周期は、描画処理部202が描画処理を行うフレーム周期より非常に短い(例えば、12ミリ秒)。フレーム周期は、フレームレートをN枚/秒とすると、1/N秒であり、通常1/30秒である。角速度情報の検出周期は、例えば、12ミリ秒である。制御部201は、スティック型コントローラ4から角速度情報が入力される毎に積分演算を行って回転角を算出する。この回転角は、スティック型コントローラ4の基準姿勢におけるUVW座標系の各軸周りの角度の変化量の累積値である。制御部201は、算出した回転角を姿勢情報としてオブジェクト位置算出部204に転送する。
また、ディスプレイ6及びカメラ7は、それぞれケーブル9及びケーブル10によってI/Oインターフェース部205に接続されている。ゲームが開始されると、カメラ7のスティック型コントローラ4を撮影した撮影画像のデータが、所定の周期でI/Oインターフェース部205を介して制御部201に入力される。この周期もフレーム周期より非常に短く、例えば、スティック型コントローラ4が角速度情報を送信する周期と同程度である。制御部201は、撮影画像のデータが入力される毎にそのデータをオブジェクト位置算出部204に転送する。オブジェクト位置算出部204は、カメラ7の撮影画像とスティック型コントローラ4の姿勢情報とを用いて、表示画面6aに照準AOを表示する位置を演算する。
制御部201は、装置本体2の全体動作を制御するマイクロコンピュータを有している。マイクロコンピュータは、CPU201a、ROM(Read Only Memory)201b及びRAM201c等を備えている。ROM201b及びRAM201cは、バスラインでCPU201aに接続されている。
CPU201aは、制御部201内で制御の主体であり、プログラム(特に演算用のプログラム)に従って演算処理を行う。ROM201bは、装置本体2の電源がオンになったときに当該装置本体2を所定の初期状態に設定したり、メディア挿入口2aにディスクメディア8が装填されたときに初期ローディング処理を行ってゲームを開始できる状態に設定したりするために、CPU201aに実行させる基本的なプログラムを記憶する。また、RAM201cは、CPU201aがROM201bに記憶されたプログラムやディスクメディア8から読み出したプログラムに従って演算処理をするために、プログラムやデータを一時的に記憶する。
CPU201aは、ディスクドライブユニット206によってディスクメディア8から読み出されたプログラムあるいはデータ、またはメモリカード接続ユニット207によってメモリカード11から読み出されたデータをRAM201cに一旦保存する。また、CPU201aは、RAM201cの作業エリアを用いてプログラムを実行する。さらにCPU201aは、主としてゲーム空間上で生じる事象の変化を演算し、その演算結果をゲーム画像及び効果音の変化やプレイヤキャラクタPCや敵キャラクタECのステータスの変化に反映する処理をする。これにより、CPU201aは、ゲームの進行状況を統括的に制御する。
ゲーム画像の生成は描画処理部202によって行われる。効果音の生成は音声処理部203によって行われる。
描画処理部202は、CPU201aからフレーム周期毎に出力される描画指令に基づいて各コマのゲーム画像(二次元画像)を生成する。CPU201aは、上記の演算処理によりディスプレイ6に表示すべきゲーム画像を決定する。CPU201aは、決定したゲーム画像の描画に必要なデータ(キャラクタあるいはオブジェクトのポリゴンデータ、および背景画像のデータ等)及び光源データ等をRAM201cから読み出して描画指令とともに描画処理部202に供給する。また、CPU201aは、プレイヤキャラクタPC及び敵キャラクタECのゲーム空間における位置のデータ等を描画処理部202に供給する。さらに、CPU201aは、スティック型コントローラ4で照準AOの表示又は非表示が必要な操作が行われると、描画処理部202に照準AOの表示指令又は非表示指令を出力する。
描画処理部202は、CPU201aからの描画命令に基づいて画像のデータ等を用いて、描画に必要なデータの演算等を行う。また、描画処理部202は、その演算結果に基づいて描画処理部202内のVRAM(図示せず)に1コマ(1フレーム)分のゲーム画像を生成する。描画に必要なデータには、プレイヤキャラクタPC、敵キャラクタEC、各オブジェクト、背景の位置関係、ディスプレイ6の画面上における各オブジェクトを構成するポリゴンの座標、各ポリゴンに対応するテクスチャ、並びに各ポリゴンの反射特性等のデータが含まれる。
また、描画処理部202は、CPU201aからの表示指令に基づいて照準AOをディスプレイ6の表示画面6aに表示するための描画処理を行う。生成されたゲーム画像は、フレーム周期毎に映像信号に変換されてディスプレイ6の表示画面6aに表示される。
音声処理部203は、CPU201aからの音声指令に基づいて効果音やBGMのデータを生成する。CPU201aは、ディスプレイ6のスピーカ6bから出力すべき効果音やBGMの音響内容を決定する。また、CPU201aは、その内容を音声指令とともに音声処理部203に出力する。音声処理部203は、指令された音響内容に基づき、RAM201cから効果音及びBGMのデータを読み出し、所定の加工処理とD/A変換処理とを行って音声信号を生成する。音声処理部203は、生成した音声信号をディスプレイ6のスピーカ6bから出力する。
オブジェクト位置算出部204は、カメラ7から入力されるスティック型コントローラ4の撮影画像のデータとスティック型コントローラ4から入力される姿勢情報とを用いて、ディスプレイ6の表示画面6aに照準AOを表示する位置を算出する。
すなわち、オブジェクト位置算出部204は、撮影画像からカメラ7に設定されるXYZ座標系におけるスティック型コントローラ4の発光部402の位置座標(Xc,Yc,Zc)(図5参照)を算出する。オブジェクト位置算出部204は、さらにその算出値のXY座標(Xc,Yc)をスティック型コントローラ4から入力される姿勢情報を用いて補正する。その後オブジェクト位置算出部204は、その補正値(Xcs,Ycs)を表示画面6aのIJ座標系(単位はピクセル)の座標(Ics,Jcs)に変換する処理(図11参照)を行う。変換された座標(Ics,Jcs)は表示画面6aにおける照準AOの表示位置である。
オブジェクト位置算出部204は、スティック型コントローラ4の照準AOを表示させるためのボタン(図4Bのボタン409参照)が操作されると、撮影画像と姿勢情報が入力される毎に上記の演算処理を行う。オブジェクト位置算出部204による照準AOの表示位置の演算処理の詳細は後述する。
パッド型コントローラ3は、低背の筐体の上面と前側の側面に操作部材が配置されたゲーム専用の周知のコントローラである。パッド型コントローラ3の上面の左端部及び右端部に4つのキー及び4つのボタン(□、△、○、×のマークが付されたボタン)が設けられている。4つのキーの右下側及び4つのボタンの左下側には、一対のスティックRが設けられている。また、パッド型コントローラ3の前側面の両端部にもボタンが設けられている。
使用者Pは、パッド型コントローラ3のキー及びボタンを操作してプレイヤキャラクタPCの動作を制御し、ゲームを進行させることができる。
図4A及び図4Bは、スティック型コントローラ4の構造を示す図である。図4Aは上面図、図4Bは底面図である。
スティック型コントローラ4は、円筒状の筐体401の先端に球状の発光部402が設けられた棒状のコントローラである。発光部402はLEDなどの発光源402aを内蔵している。発光源402aから発する光によって発光部402が球状に発光する。発光部402は、カメラ7によって撮影される。その撮影画像を用いて、図5に示すように、カメラ7に設定されたXYZ座標系におけるスティック型コントローラ4の座標(正確には発光部402の座標(Xc,Yc,Zc))が算出される。
また、筐体401は角速度センサ403を内蔵している。角速度センサ403には、例えば、MEMS(Micro Electro Mechanical System)ジャイロスコープが用いられる。角速度センサ403は、使用者Pによってスティック型コントローラ4が振られたときに、図6に示すように、基準姿勢においてスティック型コントローラ4に設けられたUVW座標系のU軸、V軸、W軸の各軸周りの角速度ωu,ωv,ωwを検出する。W軸は筐体401の長手方向に平行な方向である。V軸はW軸に対して上方向(ボタン405の方向)に直交する方向である。U軸はW軸に対して右方向(ボタン407の方向)に直交する方向である。制御部201は、角速度センサ403によって検出された角速度ωu,ωv,ωwを積分してスティック型コントローラ4の各軸周りの回転角θu,θv,θwを算出する。
スティック型コントローラ4の位置の情報及びスティック型コントローラ4の回転角の情報(スティック型コントローラ4の姿勢情報)は、図7に示すように、ディスプレイ6の表示画面6aに照準AOを表示させるときに当該表示画面6aにおける表示位置(Ics,Jcs)の演算に用いられる。この演算方法については後述する。
なお、図8に示すように、スティック型コントローラ4を姿勢1から姿勢2に傾けると、スティック型コントローラ4に設定されたUVW座標系が回転する。従って、姿勢1を基準にした姿勢2のU軸、V軸、W軸の各軸周りの回転角(θu,θv,θw)は、スティック型コントローラ4を姿勢1から姿勢2に変化させたときの姿勢の変化量を示す。この場合、姿勢1が基準姿勢である。
スティック型コントローラ4の姿勢の変化量は、基準姿勢におけるU軸、V軸、W軸の各軸の方向を基準とした各軸周りの回転角(θu,θv,θw)として定義される変化量である。従って、基準姿勢を変更すると、回転角(姿勢の変化量)が変化する。すなわち、図8において、スティック型コントローラ4を姿勢2からさらに姿勢3に傾けると、スティック型コントローラ4の姿勢の変化量は姿勢1に対する回転角として算出される。この場合、スティック型コントローラ4が姿勢2になった時点で基準姿勢を姿勢2に変更すると、スティック型コントローラ4の姿勢の変化量は姿勢2に対する回転角として算出される。これにより、スティック型コントローラ4の姿勢の変化量は変化する。
上述したように、角速度センサ403により検出される角速度を積分してU軸、V軸、W軸の各軸周りの回転角θu,θv,θwを算出すると、角速度センサ403のドリフトに起因する誤差が積算される。その結果、各回転角θu,θv,θwの精度が低下する。本実施形態では、精度低下を抑制するために、後述するように、使用者Pがスティック型コントローラ4の構えボタンを押下する毎に、角速度センサ403により検出される角速度の積分値をゼロにリセットするキャリブレーション処理を行う。
図8の例では、姿勢1の時に使用者Pがスティック型コントローラ4の構えボタンを押下すると、キャリブレーション処理が行われる。そして、角速度センサ403により検出される角速度の積分値がゼロにリセットされる。これにより、姿勢1が基準姿勢となる。その後は姿勢1におけるU軸、V軸、W軸の各方向を基準にして回転角θu,θv,θwが算出される。しかし、使用者Pが構えボタンの押下操作を解除した後、姿勢2の時に再度構えボタンを押下すると、再度キャリブレーション処理が行われる。そして、その時までに算出された回転角θu,θv,θwはそれぞれ「0」にリセットされる。これにより、姿勢2が新たに基準姿勢となる。その後は、姿勢2におけるU軸、V軸、W軸の各方向を基準にして新たに回転角θu,θv,θwが算出される。
上記のキャリブレーション処理により、ゲーム中にスティック型コントローラ4の回転角の算出値の誤差が増大してスティック型コントローラ4により照準AOの表示位置をモーションコントロールできなくなるという不都合が生じないようになる。なお、キャリブレーション処理の内容については後述する。
図4Aに示すとおり、筐体401の上面のほぼ中央には、電源用のボタン404が設けられている。筐体401の上面においてボタン404の上側には、ボタン405が設けられ、ボタン405の両側には、ボタン406a、ボタン406b,ボタン406c、ボタン406dを含む4つのボタン406が設けられている。また、筐体401の左右の側面には、ボタン407とボタン408が設けられ、筐体401の背面のボタン405に対向する位置には、ボタン409が設けられている。
ボタン404、ボタン405、ボタン406、ボタン407、ボタン408及びボタン409にはそれぞれモーメンタリー・オン−オフ・スイッチが設けられている。使用者Pが上記のボタンを押下すると、押下している状態の信号がスティック型コントローラ4から装置本体2に入力される。例えば、ボタンを押下していない状態にローレベル信号を割り当て、ボタンを押下している状態にハイレベル信号を割り当てている場合、使用者Pがボタンを押下していなければ、制御部201内のCPU201aにはローレベル信号が入力される。一方、使用者Pがボタンを押下すると、押下している期間だけハイレベル信号が入力される。
ボタン404、4つのボタン406、ボタン407及びボタン408は、コントローラのボタンとして周知である。従って、これらのボタンの説明は省略し、以下では、本発明に係るプレイヤキャラクタPCに銃撃を行わせる操作に関係するボタン405及びボタン409について説明する。
図1のゲーム画面Gにおいて、プレイヤキャラクタPCが銃撃するには、使用者Pは、(1)プレイヤキャラクタPCが銃JOを構える、(2)使用者Pが銃JOの発射方向(ターゲット)を決定する、(3)プレイヤキャラクタPCが銃JOから弾を発射する、の3段階の操作を行う必要がある。使用者Pが3段階の操作をすることで、プレイヤキャラクタPCは銃を構えた状態で敵を探査し、銃の照準を敵に合せた後に弾を発射する動作を行う。
本実施形態では、ボタン409がプレイヤキャラクタPCに銃JOを構える姿勢を指令する「構えボタン」に割り当てられている。また、ボタン405が銃JOを発射する動作を指令する「発射ボタン」に割り当てられている。
従って、スティック型コントローラ4では、ボタン409が押下されると、プレイヤキャラクタPCが銃JOを構えると同時に照準AOが表示される。そして、ボタン409を押下した状態でスティック型コントローラ4が振られると、ディスプレイ6の表示画面6a上で当該スティック型コントローラ4の振られた方向に照準AOが移動する。更に、ボタン409を押下した状態でボタン405が押下されると、銃JOから弾が照準AOの方向に発射される。
使用者Pがボタン409を押下すると、プレイヤキャラクタPCが銃JOを構えるとともに、照準AOがゲーム画面Gに表示される。その後、使用者Pがボタン409の押下操作を継続していれば、照準AOの表示は継続される。一方、ボタン409の押下操作を解除すると、照準AOは非表示となる。このため、ボタン409は、プレイヤキャラクタPCに銃JOを構える姿勢を指令する操作部材であるとともに、照準AOの表示を指令する操作部材である。
図9は、スティック型コントローラ4の内部構成を示すブロック図である。なお、図4A及び図4Bに示した部材及び同一部材には同一の番号が付されている。
スティック型コントローラ4には、制御部410、当該制御部410にI/Oインターフェース部411を介して相互に接続されている姿勢検出部412、操作部413及び信号送信部414が設けられている。制御部410は、マイクロコンピュータで構成され、スティック型コントローラ4の全体動作を制御する。マイクロコンピュータは、周知のCPU410aにROM410b及びRAM410cが相互に接続されている。I/Oインターフェース部411は、制御部410と姿勢検出部412、操作部413、信号送信部414及び発光部402との間のデータ及び信号の送受を仲介する。
姿勢検出部412は、角速度センサ403を含む。姿勢検出部412は、角速度センサ403から出力される信号を所定の周期(例えば、12ミリ秒)でサンプリングしてUVW座標系のU軸、V軸、W軸の各軸周りの角速度ωu,ωv,ωwを検出する。姿勢検出部412は、検出した角速度ωu,ωv,ωwの情報を信号送信部414を介して装置本体2に送信する。
操作部413は、ボタン404、ボタン405、ボタン406、スタートボタン407、セレクトボタン408及びボタン409の操作情報を制御部410に入力する。信号送信部414は、姿勢検出部412で検出されるスティック型コントローラ4の角速度情報及び操作部413から入力される操作情報を短距離無線通信によって装置本体2に送信する。
次に、ディスプレイ6の表示画面6aに表示される照準AOの表示位置の制御方法について説明する。
ディスプレイ6の表示画面6aにおける照準AOの表示位置は、図11に示すように、カメラ7に設定されたXYZ座標系におけるスティック型コントローラ4の位置座標(Xcs,Ycs)をディスプレイ6の表示画面6aに設定されたIJ座標系(単位はピクセル)の位置座標(Ics,Jcs)に変換することによって決定される。
スティック型コントローラ4の位置座標(Xcs,Ycs)は、カメラ7の撮影画像から取得されるスティック型コントローラ4の位置座標(Xc,Yc,Zc)(図5参照)を補正することによって算出される。スティック型コントローラ4の位置座標(Xc,Yc,Zc)は、スティック型コントローラ4の姿勢情報(θu,θv,θw)から算出される姿勢ベクトルの座標(Xs,Ys,Zs)を用いて補正される。
まず、カメラ7の撮影画像からスティック型コントローラ4の現在の位置座標を取得する方法について、図10を用いて説明する。
図10に示すように、カメラ7の撮影レンズ701から距離Dの前方位置にある物体面にスティック型コントローラ4の発光部402がある。また、撮影レンズ701から距離d(焦点距離)の後方位置に撮像面がある。例えば、物体面における発光部402のY座標Ycと撮像面における発光部402の光像のY座標ycとの間にはYc×d=yc×Dの関係が成立する。Y座標Ycは、撮像面における発光部402の光像のY座標ycを用いて、Yc=yc×D/dの演算式により求めることができる。同様に、物体面における発光部402のX座標Xcは、撮像面における発光部402の光像のX座標xcを用いて、Xc=xc×D/dの演算式により求めることができる。
なお、撮像面における発光部402の光像のXY座標(xc,yc)は、発光部402の光像が円形になる。そのため、その光像の中心座標を求めることにより、発光部402の光像のXY座標(xc,yc)を取得することができる。発光部402の発光色は予め装置本体2とスティック型コントローラ4との間で設定される。そのため、カメラ7の撮影画像の中から発光部402の発光色を有する円形画像を抽出して撮像面における円形画像の中心位置を算出することにより、発光部402の光像のXY座標(xc,yc)を取得することができる。
上記の式において、距離dはカメラ7の焦点距離(既知)である。また、X座標xc及びY座標ycは、撮影画像の中心にXYの直交座標を設定していれば、そのXY座標系における発光位置を算出することにより得られる。また、距離Dは、撮影レンズ701から物体面までの距離であるから、発光部402のZ座標Zcに相当する。発光部402を予め設定した基準位置(Xc0,Yc0,Zc0)に置いたときの撮像画像における発光位置の座標を(xc0,yc0)とすると、Yc0=yc0×Zc0/dの関係式が成立する。この関係式から得られるd=yc0×Zc0/Yc0をYc=yc×D/dに代入すると、Z座標Zcは、Zc=D=Zc0×(Yc/yc)×(yc0/Yc0)により算出することができる。すなわち、K=Zc0×yc0/Yc0を予め算出しておけば、Z座標ZcはZc=K×Yc/ycにより算出することができる。なお、Kは、K=Zc0×xc0/Xc0でも算出することができ、Zcは、Zc=K×Xc/xcでも算出することができる。
撮像面における発光部402の光像の面積はその光像に含まれるピクセル数により算出することができる。予め設定した標準の距離D0及び距離D0における発光部402の光像の面積s0のデータが、距離Dの算出用のデータとして記憶されている。あとは、距離Dにおける発光部402の光像の面積sが算出されれば、発光部402の任意の距離DはD=s×D0/s0を演算することにより算出することができる。
次に、スティック型コントローラ4の位置座標(Xc,Yc,Zc)を姿勢検出部412の検出値から取得されるスティック型コントローラ4の姿勢情報(θu,θv,θw)を用いて補正することにより位置座標(Xcs,Ycs)を算出する方法について説明する。
まず、スティック型コントローラ4の現在の姿勢ベクトルが算出される。現在の姿勢ベクトルは、基準姿勢におけるスティック型コントローラ4の姿勢ベクトルを姿勢検出部412の検出値から算出される回転角θu,θv,θwの分だけ回転させることによって得られる。現在の姿勢ベクトルは、XYZ座標系において、スティック型コントローラ4が現在指している方向を示す。
次に、スティック型コントローラ4の現在の位置情報(Xc,Yc)に現在の姿勢情報に基づく補正値(Xs×t,Ys×t)が加算される処理が行われて現在の位置情報(Xc,Yc)が補正される。すなわち、姿勢ベクトルのカメラ7のXYZ座標系における成分を(Xs,Ys,Zs)とすると、
Xcs=Xc+(Xs×t) …(1)
Ycs=−Yc+(Ys×t) …(2)
t=−Zc/Zs
の演算処理をすることにより、補正された現在の位置情報(Xcs,Ycs)が算出される。
上記(1),(2)式による補正処理は、カメラ7のXYZ座標系におけるスティック型コントローラ4の位置情報に基づく表示画面6aにおける照準AOの移動制御の精度を向上させる。例えば、スティック型コントローラ4を発光部402が上となる縦向きの姿勢にして当該発光部402が前後に移動するようにスティック型コントローラ4を振った場合、スティック型コントローラ4のX座標XcとY座標Ycは殆ど変化しない。この場合は、スティック型コントローラ4を振っても照準AOは表示画面6a上で移動しない。従って、この場合は、スティック型コントローラ4の位置や姿勢の変化に基づく表示画面6aにおける照準AOの移動制御の精度が低下する。
上記(1),(2)式は、カメラ7から見たスティック型コントローラ4の位置の変化にスティック型コントローラ4の姿勢の変化を加味してXYZ座標系におけるスティック型コントローラ4の現在の位置座標(Xcs,Ycs)を決定する演算処理である。この演算処理によって、カメラ7から見たスティック型コントローラ4の位置の変化だけでXYZ座標系におけるスティック型コントローラ4の現在の位置座標(Xc,Yc)を決定する場合よりも、スティック型コントローラ4の位置及び姿勢の微小な変化を照準AOの移動制御に反映することができる。
なお、(1),(2)式における姿勢ベクトルの座標(Xs,Ys)に対してt=−Zc/Zsの係数tを乗じる補正により、スティック型コントローラ4の姿勢の変化が位置情報(Xc,Yc)に与える影響が調整される。本実施形態では、スティック型コントローラ4がモニタ(カメラ7)から遠い位置にある場合に、近い位置にある場合よりもスティック型コントローラ4の姿勢の変化の影響力を大きくする等のために、係数tがt=−Zc/Zsである。スティック型コントローラ4がカメラ7から遠い位置にある場合、近い位置にある場合に比べて発光部402の移動がカメラ7で正確に検出され難いからである。なお、位置情報(Xc,Yc)の調整は、他の補正の方法で調整してもよい。あるいは係数tによる補正で位置情報(Xc,Yc)の調整をしなくてもよい。すなわち、Xcs=Xc+Xs、Ycs=−Yc+Ysによって位置座標(Xcs,Ycs)を算出するようにしてもよい。
次に、補正したスティック型コントローラ4の位置座標(Xcs,Ycs)が表示画面6a上の表示位置に変換される。この変換処理は、表示画面6aの表示位置の原点Oを、例えば、図11に示すように、表示画面6aの左下隅に設定する。また、変更処理は、横方向のピクセル位置をI座標、縦方向のピクセル位置をJ座標とした場合、カメラ7のXYZ座標系におけるスティック型コントローラ4の位置座標(Xcs,Ycs)が表示画面6aのIJ座標系の位置座標(Ics,Jcs)に変換される。
この変換処理では、表示画面6aの解像度をn×m(ピクセル)(但し、n,mは偶数)とすると、スティック型コントローラ4に対してキャリブレーション処理を行ったときに上記(1),(2)式によって算出される当該スティック型コントローラ4の位置座標(Xcs,Ycs)が表示画面6aの中央の位置(n/2,m/2)となるように変換される。すなわち、スティック型コントローラ4に対してキャリブレーション処理が行われると、照準AOの表示画面6aにおける表示位置が画面中央にリセットされる。
キャリブレーション処理が行われると、後述するように、姿勢ベクトルのカメラ7のXYZ座標系におけるX座標Xs及びY座標Ysはいずれもゼロにリセットされる。このため、その時に上記(1),(2)式によって算出されるスティック型コントローラ4の位置座標(Xcs,Ycs)は(Xc,−Yc)である。従って、キャリブレーション処理が行われたときの位置座標(Xcs,Ycs)=(Xc,−Yc)を表示画面6aの中央の位置(n/2,m/2)に変換する変換式は、
Ics=Xcs−Xc+n/2 …(3)
Jcs=Ycs−(−Yc)+m/2 …(4)
である。
上記(3),(4)式において、位置座標(Xcs,Ycs)から(Xc,−Yc)を引く処理は、位置座標(Xcs,Ycs)に対して(Xc,−Yc)のオフセットをかける処理に相当する。従って、そのオフセット値を(Xos,Yos)とすると、表示位置の変換式(3),(4)は、
(i)キャリブレーション処理が行われたときにカメラ7の撮影画像から取得されるスティック型コントローラ4の位置座標(Xc,Yc)を用いて、オフセット値(Xos,Yos)=(Xc,−Yc)を設定する。
(ii)上記(1),(2)式を用いて算出されるスティック型コントローラ4の位置座標(Xcs,Ycs)をオフセット値(Xos,Yos)で補正する。
(iii)補正されたX,Y座標にそれぞれn/2とm/2を加算する。
の処理をすることを意味している。
したがって、カメラ7のXYZ座標系におけるスティック型コントローラ4の位置座標(Xcs,Ycs)を表示画面6aのIJ座標系の位置座標(Ics,Jcs)に変換する変換式は、
Ics=Xcs−Xos+n/2 …(5)
Jcs=Ycs−Yos+m/2 …(6)
である。
次に、キャリブレーション処理について説明する。
キャリブレーション処理は、使用者Pがボタン409を押下することによって実行される。キャリブレーション処理により、その時のスティック型コントローラ4の姿勢情報(θu,θv,θw)がゼロにリセットされ、ディスプレイ6の表示画面6aにおける照準AOの表示位置が画面中央(n/2,m/2)にリセットされる。
ボタン409が押下されると、その時のスティック型コントローラ4の姿勢情報(θu,θv,θw)が(0,0,0)にリセットされ、姿勢ベクトルの座標(Xs,Ys)は(0,0)となる。これにより、スティック型コントローラ4の位置座標(Xcs,Ycs)は、上記(1),(2)式より(Xcs,Ycs)=(Xc,−Yc)となる。
従って、キャリブレーション処理では、ボタン409が押下された時にカメラ7の撮影画像から取得されるスティック型コントローラ4の位置座標(Xc,Yc,Zc)から(Xc,−Yc)の値がオフセット値(Xos,Yos)に設定される。そして、そのオフセット値(Xos,Yos)を上記(1),(2)式によって算出される位置情報(Xcs,Ycs)から引くことによって、その位置情報(Xcs,Ycs)が(0,0)にリセットされる。
位置情報(Xcs,Ycs)=(0,0)は、図5において、発光部402がXYZ座標系のZ軸上にある状態に相当する。従って、キャリブレーション処理は、仮想的にカメラ7に対して発光部402がXYZ座標系のZ軸上に位置するようにスティック型コントローラ4を配置する。すなわち、キャリブレーション処理により、その時のスティック型コントローラ4の姿勢が基準姿勢に設定される。
ゲーム中においては、使用者Pは、XYZ座標系の空間でスティック型コントローラ4を自由に移動してその姿勢を自由に変化させることができる。しかし、使用者Pが任意のタイミングでボタン409を押下すると、その時のXYZ座標系における発光部402の位置が仮想的にXYZ座標系のZ軸上に移動し(以下、この移動した位置を「基準位置」という。)、かつ、その時のスティック型コントローラ4の姿勢が基準姿勢に設定される。従って、ボタン409の押下操作が継続されているときには、基準位置の基準姿勢におけるスティック型コントローラ4に対する当該スティック型コントローラ4の位置及び姿勢の変化に基づいて、ディスプレイ6の表示画面6aにおける照準AOの表示位置の制御が行われる。
例えば、表示画面6aの解像度を1280×720(ピクセル)とし、使用者Pがボタン409を押下した時のスティック型コントローラ4の位置座標(Xcs,Ycs)を(500,600)とした場合、オフセット値(Xos,Yos)は(500,600)である。この時のディスプレイ6の表示画面6aにおける照準AOの表示位置(Ics,Jcs)はIcs=500−500+1280/2=640、Jcs=600−600+720/2=360である。
その後、使用者Pがボタン409を押した状態でスティック型コントローラ4を振ることにより、スティック型コントローラ4の位置座標(Xcs,Ycs)が(600,650)に移動すると、照準AOの表示位置は表示画面6aの(740,410)(ピクセル)の位置に移動する。これは、Ics=600−500+1280/2=740、Jcs=650−600+720/2=410となるからである。従って、照準AOの表示位置は、画面中央から(+100,+50)だけ移動する。
次に、ディスプレイ6の表示画面6aに照準AOを表示し、スティック型コントローラ4のモーションコントロールにより照準AOの表示位置を制御する処理について説明する。
図12は、フレーム周期で各コマのゲーム画像を生成する際にそのゲーム画像に照準AOを表示させるための処理手順を示すフローチャートである。このフローチャートは、フレーム周期をT(秒)とすると、CPU201aがT(秒)間隔で行う処理である。
CPU201aは、まず、スティック型コントローラ4のボタン409の状態を判別する。すなわち、CPU201aは、ボタン409が押下されているか否か(ボタン409の操作信号がローレベルからハイレベルに反転したか否か)を判断する(S1)。また、CPU201aは、ボタン409の押下操作が継続しているか否か(ボタン409の操作信号がハイレベルを維持しているか否か)を判別する(S2)。
CPU201aは、ボタン409の押下操作が解除された若しくはその解除された状態が継続していると判別すると(S1,S2:NO)、描画処理部202に照準AOを非表示にするオブジェクト非表示指令が出力され(S12)、処理が終了される。このオブジェクト非表示指令により描画処理部202は照準AOの表示処理を停止する。従って、ディスプレイ6の表示画面6aには照準AOが表示されなくなる。
なお、CPU201aは、例えば、ボタン409の操作信号が前回の判別時はハイレベルだったが今回の判別時はローレベルに反転している場合、ボタン409の押下操作が解除されたと判別する。また、CPU201aは、ボタン409の操作信号が前回の判別時も今回の判別時もローレベルである場合、ボタン409の押下操作の解除が維持されていると判別する。
一方、CPU201aは、ボタン409の押下操作があったと判別すると(S1:YES)、リセットフラグRFを「1」にセットする(S3)。また、CPU201aは、ボタン409の押下操作が維持されていると判別すると(S2:YES)、リセットフラグRFを「0」にリセットする(S4)。その後、CPU201aは、ステップS5以降でディスプレイ6の表示画面6aへの照準AOの表示指令の処理を行う。
なお、CPU201aは、ボタン409の操作信号が前回の判別時はローレベルだったが今回の判別時はハイレベルに反転している場合、ボタン409の押下操作がされたと判別する。また、CPU201aは、ボタン409の操作信号が前回の判別時も今回の判別時もハイレベルである場合、ボタン409の押下操作が維持されていると判別する。
リセットフラグRFは、スティック型コントローラ4のキャリブレーション処理を制御する。リセットフラグRFが「1」のときは、キャリブレーション処理を行うことを示し、リセットフラグRFが「0」のときはキャリブレーション処理を行わないことを示す。
CPU201aは、ボタン409の押下操作が解除された若しくはその解除された状態が継続していると判別したとき(S2でNOのとき)には、リセットフラグRFの設定処理をしない。この場合は照準AOをディスプレイ6の表示画面6aに表示させる処理をしないので、リセットフラグRFを前回の判別時に設定された状態から変更する必要がないからである。なお、リセットフラグRFの論理は上記の内容と逆であってもよい。
ステップS5に移行すると、CPU201aは、リセットフラグRFが「1」にセットされているか否かを判別する。リセットフラグRFが「1」にセットされていれば(S5:YES)、CPU201aは、スティック型コントローラ4のキャリブレーション処理を行う(S6)。リセットフラグRFが「0」にセットされていれば(S5:NO)、CPU201aは、スティック型コントローラ4のキャリブレーション処理を行うことなく、ステップS7に移行する。
キャリブレーション処理では、CPU201aは、スティック型コントローラ4から送信される角速度情報(ωu,ωv,ωw)を積分演算して得られる姿勢情報(θu,θv,θw)を(0,0,0)にリセットする。また、CPU201aは、上記(1),(2)式で算出されるスティック型コントローラ4の位置情報(Xcs,Ycs)=(Xc,−Yc)をオフセット値(Xos,Yos)に設定する(S6)。
なお、オフセット値(Xos,Yos)は、ゲーム開始時のキャリブレーション処理で初期設定されている。使用者Pは、ゲーム開始時にカメラ7のほぼ正面の位置で発光部402を当該カメラ7に向けてキャリブレーション処理のための所定の操作を行う。このキャリブレーション処理で取得される位置座標(Xcs,Ycs)は(0,0)であるので、初期設定時のオフセット値(Xos,Yos)は(0,0)である。使用者Pがゲームを開始した後、ゲーム中に最初にボタン409を押すと、CPU201aは、ステップS6でオフセット値(0,0)をその時に算出されるスティック型コントローラ4の位置情報(Xc,−Yc)に変更する。
ステップS7に移行すると、CPU201aは、オブジェクト位置算出部204から、その時の発光部402のXYZ座標系のXY平面における座標(Xcs,Ycs)を取得する。この座標(Xcs,Ycs)は、オブジェクト位置算出部204で、発光部402のXYZ座標系における座標(Xc,Yc,Zc)と、スティック型コントローラ4の姿勢ベクトルのXYZ座標系における座標(Xs,Ys,Zs)と用いて、上記(1),(2)式を演算することにより算出される。
続いて、CPU201aは、ステップS7で取得した位置情報(Xcs,Ycs)からオフセット値(Xos,Yos)を差し引いて位置情報(Xcs,Ycs)の補正を行う(S8)。
CPU201aは、ボタン409が押下された時はキャリブレーション処理を行う。CPU210aは、スティック型コントローラ4の位置情報(Xcs,Ycs)を(Xc,−Yc)とし、この位置情報をオフセット値(Xos,Yos)に設定する。従って、スティック型コントローラ4の位置情報(Xcs,Ycs)の補正値(Xcs’,Ycs’)は(0,0)である。一方、キャリブレーション処理の後にスティック型コントローラ4の姿勢が変化したときは、CPU201aは、スティック型コントローラ4の位置情報(Xcs,Ycs)を上記(1),(2)式よりXcs=Xc+(Xs×t)(Xs≠0)、Ycs=−Yc+(Ys×t)(Ys≠0)に変化させる。従って、スティック型コントローラ4の位置情報(Xcs,Ycs)の補正値(Xcs’,Ycs’)は(Xcs−Xc,Ycs+Yc)である。
続いて、CPU201aは、補正後の位置座標Xcs’,Ycs’のそれぞれに「n/2」と「m/2」を加算してディスプレイ6の表示画面6a上に照準AOを表示させる位置座標(Ics,Jcs)(単位ピクセル)を算出する(S9)。
続いて、CPU201aは、算出した位置座標(Ics,Jcs)に照準AOを表示するオブジェクト表示指令を描画処理部202に出力し(S10)、処理を終了する。このオブジェクト表示指令により描画処理部202はディスプレイ6の表示画面6aの位置座標(Ics,Jcs)に照準AOを表示する処理を行う。これによりディスプレイ6の表示画面6aには照準AOが表示される。
図13は、CPU201aが数フレームに亘って図12のフローチャートを実行したときの各処理内容の変化の一例を表した図である。
同図において、t1,t2,…,t6,t7は描画処理部202がゲーム画像を生成するタイミングである。タイミングの間隔がフレーム周期であり、この間隔期間にゲーム画像の生成処理が行われる。照準AOの表示が必要になると、そのゲーム画像の生成処理に併せて照準AOの表示処理が行われる。なお、T1,T2,…,T6は、各フレーム周期を識別するために付した符号である。
同図の「ボタンの変化」の欄では、「信号」の欄はボタン409の操作信号のレベル変化を示す。「OFF−OFF」、「OFF−ON」、「ON−ON」、「ON−OFF」の各欄は、各フレーム周期におけるボタン409の操作信号の変化がいずれの状態に該当するかを示している。
フレーム周期T1の期間が「OFF−ON」の欄に〇印が付いているのは、この期間にボタン409の操作信号がローレベル(OFF状態)からハイレベル(ON状態)に変化したことを示している。また、フレーム周期T2,T3,T4の期間が「ON−ON」の欄に〇印が付いているのは、この期間はボタン409の操作信号がハイレベル(ON状態)に維持されていることを示している。また、フレーム周期T5の期間が「ON−OFF」の欄に〇印が付いているのは、この期間にボタン409の操作信号がハイレベル(ON状態)からローレベル(OFF状態)に変化したことを示している。
「リセットフラグRF」の欄は、リセットフラグRFの内容を示している。フレーム周期T1,T4〜T6のリセットフラグRFが「0」になっているのは、フレーム周期T1,T4,T5,T6では各フレーム周期の直前のフレーム周期のリセットフラグRFの状態が維持されているからである。一方、フレーム周期T2のリセットフラグRFが「1」になっているのは、フレーム周期T2でボタン409が押下されたことがフレーム周期T2で検出され、t3タイミングでのゲーム画像の生成処理でキャリブレーション処理が行われたからである。また、フレーム周期T3のリセットフラグRFが「0」になっているのは、キャリブレーション処理はボタン409が押下されたときにだけ行われるため、フレーム周期T2で「1」にセットされたリセットフラグRFがフレーム周期T3ではリセットされるためである。
「照準オブジェクトの表示」の欄は、ディスプレイ6の表示画面6aにおける照準AOの表示位置の一例である。「指令」の欄は、CPU201aから描画処理部202に出力される照準AOの表示に関する指令内容を示している。また、「オフセット値」の欄は、各フレーム周期におけるオフセット値(Xos,Yos)の内容を示している。
図13に示すように、ボタン409が押下されたこと及びその状態が継続されていることが検出されているフレーム周期T2〜T5の期間だけディスプレイ6の表示画面6aに照準AOが表示される。ボタン409の押下操作が検出された直後のフレーム周期T2において照準AOが初めてディスプレイ6の表示画面6aの中央に表示される。その後、照準AOの表示画面6aにおける表示位置は、ボタン409が押下された状態でスティック型コントローラ4が振られるのに応じて中央から移動する。
ボタン409が押下されていないフレーム周期T1ではリセットフラグRFが「0」にリセットされているので、オフセット値(Xos,Yos)は初期値の(0,0)に保持されている。しかし、フレーム周期T2でボタン409の押下操作が検出されてリセットフラグRFが「1」にセットされるのに応じて、オフセット値(Xos,Yos)は、その時に算出されるスティック型コントローラ4の位置座標(Xc,−Yc)で更新される。そして、その後は再度ボタン409の押下操作が検出されるまで、そのオフセット値(Xc,−Yc)が保持される。
上記のように、本実施形態によれば、使用者Pがボタン409を押下してディスプレイ6の表示画面6aに照準AOが表示される時に、その時のスティック型コントローラ4の姿勢情報(θu,θv,θw)をゼロにリセットするキャリブレーション処理が行われる。従って、使用者Pは、ゲーム中にゲーム操作には関係のないキャリブレーション処理をするための操作を行う必要がなく、ゲームに集中することができる。
また、キャリブレーション処理のためにゲームを中断することがないので、使用者Pにゲームが中断されることのストレスを与えることもない。
また、キャリブレーション処理を実行すると、照準AOが表示画面6aの中央に移動する。従って、使用者Pはキャリブレーション処理が確実に行われていることを容易に確認することができる。
また、プレイヤキャラクタPCが銃JOを構える操作をキャリブレーションを行うための操作に兼用している。そのため、使用者Pは、コントローラ5にスティック型コントローラ4のキャリブレーション処理のための操作を別途設定する必要がない。従って、コントローラ5のボタン又はキーの操作の多重化を低減することができる。
また、ディスプレイ6の表示画面6aに照準AOが表示される時にキャリブレーション処理を行う。これにより、その後のスティック型コントローラ4の姿勢情報(U軸,V軸,W軸の各軸周りの回転角θu,θv,θw)の誤差を抑制することができる。特に、本実施形態では、照準AOの表示処理をする毎にキャリブレーション処理を行う。そのため、スティック型コントローラ4の姿勢情報の誤差が累積することがない。従って、表示画面6aにおける照準AOの移動を使用者Pのスティック型コントローラ4を振る操作に基づいて可及的正確に制御することができる。
なお、スティック型コントローラ4内の姿勢検出部412で角速度センサ403によって検出した角速度情報(ωu,ωv,ωw)の積分演算を行って姿勢情報(θu,θv,θw)を算出し、スティック型コントローラ4からその姿勢情報を装置本体2に送信してもよい。
この場合は、ボタン409が押下されると、姿勢検出部412は姿勢情報(θu,θv,θw)のリセットを行う。また、装置本体2では、スティック型コントローラ4からのボタン409の押下操作の信号の受信によりスティック型コントローラ4でキャリブレーション処理が行われたことを認識するようにすればよい。あるいは、スティック型コントローラ4からキャリブレーション処理を行ったことを示す信号を装置本体2に送信し、その信号によってキャリブレーション処理を認識させるようにしてもよい。逆に、装置本体2がスティック型コントローラ4からのボタン409の押下操作の信号を受信すると、スティック型コントローラ4にキャリブレーション処理の実行命令を送信するようにしてもよい。
また、上記実施形態では、キャブレーション処理を行わせるボタンをスティック型コントローラ4に設けられたボタンに設定していたが、パッド型コントローラ3に設けられたボタンに設定してもよい。また、キャブレーション処理を行うには、ボタン409のような押しボタンスイッチのボタンを押下するのではなく、パッド型コントローラ3に設けられたアナログステッィクを操作するのであってもよい。
また、上記実施形態では、照準AOの表示を指令するボタンと照準AOの非表示を指令するボタンを同一のボタン(スティック型コントローラ4のボタン409)で共用していたが、両ボタンは異なっていてもよい。
また、使用者Pがパッド型コントローラ3とスティック型コントローラ4の両方を操作してゲームを行うアクションゲームについて説明したが、本発明はこれに限られない。すなわち、本発明は、スティック型コントローラ4だけを用いるゲームにも適用することができる。
また、上記実施形態では、照準AOがディスプレイ6の表示画面6aに表示され、その照準AOが表示画面6a上で移動する例を説明した。しかし、本発明は、姿勢を検出できるセンサを備えたコントローラの位置や姿勢を変化させることによって表示画面6aに表示されるキャラクタ又はオブジェクトを操作するゲームにおいて、ゲーム中にコントローラの位置や姿勢を変化させる操作によってキャラクタやオブジェクトの操作が可能になるタイミングでキャリブレーション処理を行う構成のゲームに広く適用することができる。
また、上記実施形態では、コントローラがゲーム装置の本体と別体となっていたが、本発明はこれに限られない。すなわち、携帯型ゲーム装置、携帯型電話装置若しくはノート型パソコンのようにコントローラとディスプレイとが装置本体に一体となっているゲームが可能な装置において、装置本体に姿勢が検出できるセンサが設けられている装置にも本発明が適用できることは言うまでもない。この場合は、装置本体がコントローラと考えることができる。
従って、本発明は、上記実施形態のように、キャリブレーション処理のトリガーとして、キャラクタ又はオブジェクトの表示を指令するボタンの操作を必要とするものではない。本発明では、ディスプレイ6の表示画面6aにキャラクタ又はオブジェクトが表示されている状態で、そのキャラクタやオブジェクトに対してコントローラの位置や姿勢を変化させる操作による制御が可能になる条件が成立すると、その条件成立時にキャリブレーション処理を行うことができる。
上記の条件としては、使用者Pによってコントローラ(ゲーム装置とは別体のコントローラ及びゲーム装置と一体となっているコントローラを含む)に設けられた特定のボタンが操作されること、或いは使用者Pの操作には関係なくゲーム場面が特定の場面になることなどが考えられる。
特定のボタンが操作される条件としては、例えば、アクションゲームにおいて、敵キャラクタからプレイヤキャラクタに対してミサイル攻撃が行われたとき、使用者がコントローラの特定のボタンを押下すると、コントローラの位置又は姿勢を変化させる操作によってプレイヤキャラクタの姿勢を変化させてミサイルを回避することができる構成が考えられる。この構成では、特定のボタンの押下操作が条件であるから、使用者が特定のボタンを押下すると、キャリブレーション処理が行われる。そして、その後に使用者がコントローラを前後左右に傾ける操作をすると、その操作に応じて表示画面上のプレイヤキャラクタが上半身を上下左右に傾ける動作をしてミサイルを回避することができる。
また、ゲーム場面が特定の場面になる条件としては、例えば、上記のアクションゲームにおいて、敵キャラクタがミサイル攻撃などの特定種類の攻撃をすると、その攻撃が終了するまでの期間が自動的にゲームの操作装置の姿勢変化操作が可能になる構成が考えられる。攻撃が終了するとは、例えば、ミサイルがプレイヤキャラクタPC若しくは他のオブジェクトに当たるか、何処にも当たらずに消滅するなどの場合である。
この構成では、敵キャラクタがミサイル攻撃などの特定種類の攻撃を行うことが条件になる。つまり、敵キャラクタがミサイル攻撃を行うと、キャリブレーション処理が行われる。そして、その後に使用者がコントローラを前後左右に傾ける操作をすると、その操作に応じて表示画面上のプレイヤキャラクタが上半身を上下左右に傾ける動作をしてミサイルを回避することができる。
また、他のジャンルのゲームとしては、ディスプレイに表示された迷路でコントローラの姿勢を変化させてボールなどのオブジェクトを移動させるゲームが考えられる。この種のゲームには、予め決められた一定時間内にボールを迷路のスタート地点からゴール地点に移動させることを目的とするもの、或いは他の使用者とボールの移動時間を競う競技タイプのものが含まれる。この種のゲームでは、いずれのタイプでもボールが迷路のスタート地点にセットされる。この場合は、移動開始の条件が成立してからボールがゴール地点に到達するまでの期間(一定時間内にボールがゴール地点に到達しない場合は、一定時間が経過するまで期間)は、コントローラの位置及び姿勢を変化させる操作が可能である。
例えば、競技タイプのボールの移動開始の条件としては、ボールが迷路のスタート地点にセットされた後に、使用者が特定のボタンを操作することが考えられる。この場合は、ゲームが開始された後に使用者が任意のタイミングで特定のボタンを操作すると、そのタイミングでキャリブレーション処理が行われる。この場合は、ゲーム開始後に使用者が特定のボタンを操作することがキャリブレーション処理の条件となる。
また、別の条件としては、ボールが迷路のスタート地点にセットされた後にコンピュータがカウントダウンを行い、そのカウントダウンが終了することが考えられる。この場合は、ゲームが開始されてコンピュータがボールを迷路のスタート地点にセットするなどの所定の画面処理を行った後にカウントダウンの処理を終了すると、キャリブレーション処理が行われる。従って、この場合は、ゲーム開始後にコンピュータが使用者にボールの移動時間の計時開始を報知する処理をしたことがキャリブレーション処理の条件となる。
また、上記実施形態では、姿勢センサとして角速度センサを用いた例を説明したが、本発明はこれに限られない。すなわち、例えば、加速度計などの他の種類のセンサを用いてスティック型コントローラ4の姿勢の変化を検出する場合にも本発明を適用できることはいうまでもない。
また、上記実施形態では、アクションゲームを例に説明したが、例えば、RPG(ロールプレイングゲーム)、シューティングゲーム、格闘ゲーム、アドベンチャーゲームなどの様々なジャンルのゲームにおいても、本発明を適用することができる。また、「SECOND LIFE(登録商標)」、或いは「PlayStaion(登録商標)Home」等で提供されるバーチャル世界にアバターと呼ばれる使用者の分身を登場させて仮想世界での生活を体験するゲームにも適用することができる。
また、本発明は、複数の使用者の操作するキャラクタ若しくはCPUの制御するキャラクタがチームを組んで協同して敵キャラクタと対戦するようなゲーム、或いは他の使用者の操作するキャラクタを敵キャラクタとして対戦するようなゲームにも適用することができる。
また、上記実施形態では、オフラインタイプのゲーム装置について説明したが、本発明はオンラインタイプのゲームにも適用できることは言うまでもない。
また、上記実施形態では、家庭用ゲーム装置や携帯型ゲーム装置でゲームを実施する場合について説明したが、本発明はこれに限定されない。すなわち、本発明は、例えば、アーケードゲーム装置、或いはゲームソフトが搭載されているパーソナルコンピュータ等でゲームを実施する場合にも適用することができる。
本発明は、操作装置の姿勢情報を用いて表示装置に表示されるオブジェクトの動きを制御するプログラムおよびゲームシステムに関する。
従来、ディスプレイを用いた家庭用のゲーム機のコントローラにおいて、角速度センサ若しくは加速度センサ等の姿勢を検出することができる姿勢センサを内蔵したコントローラが商品化されている。また、そのコントローラを用いたゲームプログラムも商品化されている。
角速度センサを内蔵したコントローラは、ゲーム機に角速度センサで検出した角速度の検出信号を出力する。角速度センサの検出信号は、コントローラに設定されたxyzの直交座標系における各座標軸の周りをコントローラが回転する角速度を検出した信号である。加速度センサの検出信号は、上記のxyzの各座標軸方向におけるコントローラの加速度を検出した信号である。
ゲーム機内では、角速度センサ若しくは加速度センサの検出信号を用いてコントローラの基準姿勢に対する相対的な姿勢の変化量を算出する。基準姿勢は、例えば、コントローラに設定されるxyz座標系のxz面が水平面に一致し、かつ、z軸がゲーム機に向いた姿勢である。姿勢の変化量は、コントローラの各座標軸周りの回転角の変化量若しくは各座標軸方向の変位量である。
そして、ゲーム機は、コントローラの姿勢の変化量の算出結果を用いて、ゲーム機のディスプレイに表示するキャラクタあるいはオブジェクトのディスプレイ上の動きを制御する。キャラクタは、例えば、使用者あるいはコンピュータが制御する動物あるいは人物などの画像である。なお、オブジェクトはキャラクタを含む概念であるが、以下では説明の便宜上、オブジェクトとキャラクタとを区別して説明する。
例えば、テニスゲームでは、使用者がテニスラケットを振るようにコントローラを振ると、そのときのコントローラの姿勢の変化に基づいて、ディスプレイに表示されたプレイヤキャラクタがテニスラケットを振る動きをする。プレイヤキャラクタは使用者の操作によってディスプレイ上の動作が制御されるキャラクタである。また、アクションゲームでは、使用者がコントローラの所定のボタンを押すと、プレイヤキャラクタが銃を構える動作をするとともに、その銃の狙っている位置を示す照準のオブジェトが表示される。そして、使用者がボタンを押した状態でコントローラを上下又は左右に振ると、そのときのコントローラの姿勢(向き)の変化に応じてディスプレイ上で照準の表示位置が変化する。
WO2009/084213A1公報には、仮想の三次元ゲーム空間でゲームが展開するアクションゲームにおいて、使用者がゲーム画像を通じてプレイヤキャラクタの周りの状況を見ることができるようにするために、以下の発明が記載されている。すなわち、上記公報には、角速度センサが内蔵されたコントローラの回転に応じて、三次元ゲーム空間上に配置される仮想カメラがプレイヤキャラクタを中心とする円周上で回転する発明が記載されている。
同公報に記載の発明は、プレイヤキャラクタが三次元ゲーム空間上で取得したトロフィーなどのアイテムの形状及びデザインの詳細を使用者が確認できるようにする場合にも適用することができる。この場合は、コンピュータは、コントローラの回転に応じて仮想カメラをアイテムの周りで回転する。コンピュータは、この仮想カメラの回転により、アイテムを360度全方向から見た映像を生成してディスプレイに表示する。
WO2009/084213A1公報
特開2009−101035号公報
特開2010−5332号公報
ディスプレイに表示されたキャラクタ及びオブジェクトの動きをコントローラのxyzの各座標軸周りの回転角に基づいて制御するためには、その回転角をできるだけ正確に検出する必要がある。しかしながら、角速度センサを用いてコントローラの基準姿勢からの回転角を検出する場合、回転角は、角速度センサから出力される角速度を積分して算出される(特開2009−101035号公報及び特開2010−5332号公報)。そのため、角速度の積分値に角速度センサのドリフトによる誤差が累積し、検出される回転角が時間の経過とともに不正確になるという問題がある。このため、ゲーム時間が長時間に亘る場合は、コントローラの姿勢の変化に基づいてディスプレイに表示されるキャラクタ及びオブジェクトの動きを適切に制御できない場合が生じる。
テニスゲームなどのようにゲーム開始からゲーム終了するまでの時間が比較的短いゲームソフトでは、例えば、新規にゲームを開始する毎に、使用者がコントローラの基準姿勢を再設定(リセット)するための所定の操作をしなければならないようになっている。この操作を「キャリブレーション操作」と言い、コンピュータが行うコントローラの基準姿勢を再設定(リセット)する処理を「キャリブレーション処理」という。
ディスプレイに表示された選択画面で、使用者がコントローラを振ることによってディスプレイに表示されたカーソルを所望の選択項目に移動させる制御を行う場合、使用者のコントローラの振り方によってはカーソルがディスプレイの画面外に出てしまい、カーソル位置が分からなくなる状態が生じる。そのため、使用者がキャリブレーション操作を行う必要がある。この場合には、例えば、使用者がコントローラをディスプレイに向けた状態でキャリブレーション操作として所定のボタンを押す操作をすると、その操作に基づいて、コンピュータがカーソルの表示位置をディスプレイの所定の位置にリセットする処理を行う。
しかしながら、例えば、「バイオハザード(登録商標)」のようなゲーム時間が長時間になるゲームで、コントローラの姿勢の変化を利用してディスプレイに表示されるキャラクタやオブジェクトの動きを制御しようとすると、コントローラの姿勢の変化に基づいてディスプレイに表示されるキャラクタやオブジェクトの動きを制御することができなくなる場合が生じる。コントローラに内蔵された角速度センサの検出角速度から算出される回転角の誤差が時間の経過とともに増大するからである。
この不都合を解消するためには、ゲーム中に定期的若しくは適当なタイミングでコンピュータがコントローラのキャリブレーション処理を行うようにすることが考えられる。しかし、ゲーム開始時に使用者が行うキャリブレーション操作をゲーム中にも行う場合、コンピュータはキャリブレーション処理のためにゲーム展開の制御を中断することになる。そのため、キャリブレーション操作がゲームに熱中している使用者にストレスとなり、ゲームの面白み、あるいはゲームへの興味が薄れるという問題が生じる。
また、一般にゲームでは、ゲームメディアからゲームソフトをゲーム機に読み込んでゲームができるようになるまでに、使用者が種々の選択操作や設定操作をしなければならず、そのために一定の時間を要する。ゲームをできるようするための操作にキャリブレーション操作も加えると、使用者にとっては煩わしさが増加する。従って、可能であれば、ゲーム中にコンピュータがキャリブレーション処理を自動的に行うようにすることが好ましい。しかし、従来、このような機能を備えたゲームソフトは提案されていない。
本発明は、姿勢を検出することができるセンサを備えたコントローラのキャリブレーション処理をゲーム中の使用者による所定の操作によって自動的に行うことができ、コントローラの姿勢の変化に基づくゲーム画面内のキャラクタやオブジェクトの動きを好適に制御することができるプログラム及びゲームシステムを提供することを目的としている。
上記課題を解決するため、本発明では、次の技術的手段を講じている。
本発明の第1の側面によって提供されるプログラムは、コンピュータを、ゲームの操作装置に設けられた姿勢センサの検出値を受信し、この検出値に基づいて、前記操作装置の基準姿勢からの姿勢の変化量を算出する姿勢変化量算出手段と、前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記ゲームのオブジェクトを制御するオブジェクト制御手段と、前記ゲームの実行中に所定の条件が成立すると、前記姿勢変化量算出手段の前記姿勢の変化量を算出するための前記操作装置の基準姿勢を再設定するリセット手段と、して機能させることを特徴とする。
なお、操作装置は、コントローラなどのゲーム装置とは別体の操作装置だけでなく、携帯型ゲーム装置のようにゲーム装置本体に一体的に設けられた操作部材も含むものである。後者の場合は、ゲーム装置本体が使用者の操作する操作装置となる。
上記のプログラムにおいて、前記所定の条件の成立は、使用者によってゲーム進行に使用される前記操作装置の所定の操作部材が操作されたことを示す操作信号を受け取ることにするとよい。
上記のプログラムにおいて、前記所定の操作部材は、前記使用者による前記オブジェクトの操作開始を指示する第1の操作部材であり、前記オブジェクト制御手段は、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記オブジェクトの操作終了を指示する第2の操作部材の操作信号を受け取るまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。
上記のプログラムにおいて、前記オブジェクト制御手段は、前記使用者による前記第1の操作部材の操作信号を受け取ると、前記リセット手段によりリセットされた前記操作装置の姿勢の変化量に基づいて、前記オブジェクトを表示装置の表示画面の予め設定されている初期位置に表示する初期表示制御手段と、リセット後に前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記使用者による前記第2の操作部材の操作信号を受け取るまで、前記表示画面に表示された前記オブジェクトの表示位置を制御する表示位置制御手段と、を含むとよい。なお、表示装置は、テレビモニタなどのゲーム装置とは別体の表示装置だけでなく、携帯型ゲーム装置のようにゲーム装置本体に一体的に設けられたディスプレイも含むものである。
上記のプログラムにおいて、前記初期位置は、前記表示画面の中央位置であるとよい。また、前記リセット手段は、前記使用者による前記操作装置に設けられた前記第1の操作部材の操作信号を受け取ると、前記操作装置の基準姿勢を再設定し、前記オブジェクト制御手段は、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記操作装置に設けられた前記第2の操作部材の操作信号を受け取るまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。
上記のプログラムにおいて、前記第1の操作部材と前記第2の操作部材はモーメンタリー・オン−オフ・スイッチからなり、前記コンピュータが受け取る前記使用者による前記第1の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチを押下する操作信号であり、前記コンピュータが受け取る前記使用者による前記第2の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチの押下を解除する操作信号であるとよい。
上記のプログラムにおいて、前記姿勢センサは、角速度センサであり、前記姿勢変化量算出手段は、前記角速度センサによる角速度検出値を積分演算した回転角を前記操作装置の前記基準姿勢からの姿勢の変化量として算出するとよい。
上記のプログラムにおいて、前記オブジェクトは、前記使用者が前記操作装置から所定の操作情報を入力するときに当該操作を補助するために表示するオブジェクトであるとよい。また、前記ゲーム画面は、射撃の要素を含むゲーム画面であり、前記オブジェクトは、前記射撃の目標を示す照準オブジェクトであるとよい。
本発明の第2の側面によって提供されるゲームシステムは、第1の側面によって提供されるプログラムを記録したプログラム記録部と、前記プログラム記録部に記録されたプログラムを実行するコンピュータと、を備えていることを特徴とする。
本発明によれば、ゲームを実行中に、操作装置の姿勢が変化すると、コンピュータは、姿勢センサによるその姿勢の変化の検出値を受信して操作装置の基準姿勢からの姿勢の変化量を算出する。そして、コンピュータは、その算出結果に基づいて表示装置へのオブジェクトの表示を制御する。すなわち、コンピュータは、操作装置の姿勢の変化量に応じて表示装置の表示画面におけるオブジェクトの表示位置を変化させる制御を行う。そして、ゲームの実行中に所定の条件が成立すると、コンピュータは、操作装置の基準姿勢を再設定し、その再設定した基準姿勢に対する姿勢の変化量を算出する。
例えば、使用者がゲーム進行に使用される所定の操作部材を操作すると、コンピュータは、操作装置の基準姿勢を再設定し、その再設定した基準姿勢に対する姿勢の変化量を算出する。例えば、プレイヤキャラクタが銃による攻撃を行うアクションを含むアクションゲームにおいて、使用者がゲームの実行中にプレイヤキャラクタに銃を構えさせるための所定の操作部材を操作すると、コンピュータは、その時の操作装置の姿勢を基準姿勢に再設定する。従って、その後にコンピュータが算出する操作装置の姿勢の変化量の誤差を抑制することができる。その結果、表示装置に表示された「照準」のオブジェクトの表示位置の制御が使用者の操作による操作装置の姿勢の変化量に基づいて好適かつ正確に行われる。
また、コンピュータは、操作装置の基準姿勢を再設定するキャリブレーション処理を所定の条件の成立を契機に行う。所定の条件の成立とは、例えば、ゲームの実行中に使用者が所定の操作部材を操作することである。この制御により、使用者に対して、操作装置のキャリブレーション処理のためにゲームが中断するというストレスを与えることがない。従って、使用者はゲームに集中することができる。
本発明のその他の特徴および利点は、添付図面を参照して以下に行う詳細な説明によって、より明らかとなろう。
図1は、ゲーム画面に表示されたプレイヤキャラクタに銃を構える動作をさせたときに銃の照準を示すオブジェクトが表示された状態を示す図である。
図2は、本実施形態に係るゲーム装置の構成を示す斜視図である。
図3は、本実施形態に係るゲーム装置の内部構成を示すブロック図である。
図4Aは、スティック型コントローラの構成を示す上面図である。
図4Bは、スティック型コントローラの構成を示す底面図である。
図5は、カメラに設定されたXYZ座標系におけるスティック型コントローラの位置を説明するための図である。
図6は、スティック型コントローラに設定されたxyz座標系と角速度センサで検出された角速度の関係を説明するための図である。
図7は、スティック型コントローラの指す方向とディスプレイの表示画面に表示されるカーソルの表示位置との関係を示す図である。
図8は、スティック型コントローラの姿勢の変化によりスティック型コントローラに設定されたxyz座標系が回転する様子を示す図である。
図9は、スティック型コントローラの内部構成を示すブロック図である。
図10は、スティック型コントローラの発光部の撮影画像からスティック型コントローラの現在の位置情報を取得する方法を説明するための図である。
図11は、カメラのXYZ座標系で算出されたスティック型コントローラの位置とディスプレイの表示画面に表示するオブジェクトの位置との関係を示す図である。
図12は、フレーム周期で各コマのゲーム画像を生成する際にそのゲーム画像に照準オブジェクトを表示させるための処理手順を示すフローチャートである。
図13は、数フレームに亘って図12のフローチャートが実行されたときのフレーム毎の処理内容の変化の一例を表した図である。
以下、本発明の好ましい実施の形態として、射撃の要素を含むアクションゲームのプログラムを家庭用のゲーム装置で実行する場合について、添付図面を参照して具体的に説明する。
本実施形態に係るアクションゲームには、三次元の仮想ゲーム空間上に使用者によって制御されるプレイヤキャラクタと、プレイヤキャラクタが対戦する敵キャラクタとが登場する。そして、使用者は、プレイヤキャラクタを多数の敵キャラクタと対戦させながら所定の目的を達成する。敵キャラクタは、CPU(Central Processing Unit)によって制御されるキャラクタである。前記所定の目的は、例えば、多数の敵キャラクタの中のボスを倒す、敵キャラクタに占拠された街を解放する、隠された秘宝を探索するなどである。
本実施形態に係るアクションゲームでは、一人の使用者がパッド型コントローラ及びスティック型コントローラの2種類のコントローラを用いて一のプレイヤキャラクタの動作を制御することができる。パッド型コントローラは、パッドに複数のボタンが設けられ、使用者がパッドを両手で保持して複数のボタンを操作するタイプのコントローラである。スティック型コントローラは、スティック型コントローラの姿勢を検出する姿勢センサとして角速度センサを内蔵した棒状のコントローラである。
プレイヤキャラクタが敵キャラクタを攻撃するための武器として、例えば、「ナイフ」、「銃」、「爆弾」などの複数の武器がある。使用者がパッド型コントローラとスティック型コントローラのいずれか若しくは両方を操作することで、プレイヤキャラクタが各武器によって敵キャラクタを攻撃することができる。
スティック型コントローラ4には姿勢センサが内蔵されている。そのため、銃による攻撃では、使用者はスティック型コントローラ4の姿勢を変化させる操作(コントローラ本体を傾けたり、移動させたりする操作)によってプレイヤキャラクタの銃による攻撃動作を制御することができる。
具体的には、使用者がスティック型コントローラ4に設けられた複数のボタンのうち、プレイヤキャラクタに銃を構える姿勢を指令するための所定のボタン(「構えボタン」)を押下すると、図1に示すように、プレイヤキャラクタPCが銃JOのオブジェクトを構えるとともに、その銃JOの銃口の向いている方向を示す照準AOのオブジェクトが表示される。
そして、使用者が構えボタンを押下した状態でスティック型コントローラ4を傾けたり、移動させたりすると、その動きによるスティック型コントローラ4の位置及び姿勢の変化に基づいて、ゲーム画面GにおけるプレイヤキャラクタPCの銃JOを構えた姿勢の向きと照準AOの表示位置が変化する。すなわち、使用者はスティック型コントローラ4の位置と姿勢を変化させることによって、プレイヤキャラクタPCが構える銃JOの銃口の方向を変化させることができる。
なお、スティック型コントローラ4の位置は、正確には、後述する仮想カメラに設定されたXYZ座標系におけるスティック型コントローラ4の発光部の位置である。
一方、使用者が構えボタンの押下操作を解除すると、プレイヤキャラクタPCは構えの姿勢をやめ、ゲーム画面Gに表示されていた照準AOは非表示となる。すなわち、照準AOは、使用者の構えボタンの押下操作により、プレイヤキャラクタPCが銃JOを構えているときにだけゲーム画面Gに表示される。
そして、照準AOの表示位置が敵キャラクタECに重なったときに、使用者が所定のボタン(発射ボタン)を押下すると、プレイヤキャラクタPCが銃JOを撃つ。
ゲーム画面Gにおける照準AOの表示位置は、スティック型コントローラ4の位置情報と姿勢情報によって決まる。スティック型コントローラ4の現在の位置情報は、図2に示すように、カメラ7でスティック型コントローラ4を撮影した画像から取得することができる。
スティック型コントローラ4の姿勢情報は、スティック型コントローラ4に設定されたxyz座標系のx軸、y軸、z軸の各座標軸周りの回転角θx,θy,θzである。回転角θx,θy,θzは、内蔵の角速度センサで検出した上記各座標軸周りの角速度ωx,ωy,ωzを積分して得られる。スティック型コントローラ4の姿勢は、所定のタイミングで後述するキャリブレーション処理によって基準姿勢に設定される。従って、スティック型コントローラ4の現在の姿勢情報は、最新の基準姿勢におけるx軸、y軸、z軸に対して角速度センサの検出値を積分して得られる各座標軸周りの回転角θx,θy,θzである。
スティック型コントローラ4の基準姿勢からの角速度の積分時間が短い程、スティック型コントローラ4の姿勢情報(回転角θx,θy,θz)の誤差を抑制することができる。本実施形態では、スティック型コントローラ4の構えボタンが押される毎に姿勢情報(回転角θx,θy,θz)をゼロにリセットするキャリブレーション処理を行う。本実施形態のキャリブレーション処理は、構えボタンが押されたときのスティック型コントローラ4の姿勢を基準姿勢に設定し直す処理である。
照準AOの表示位置の制御は、構えボタンが押下されている期間にだけ行われる。本実施形態では、その期間の開始時のスティック型コントローラ4の姿勢が「基準姿勢」に設定し直される。そして、その基準姿勢からのスティック型コントローラ4の姿勢の変化情報とスティック型コントローラ4の現在の位置情報とを用いて照準AOの表示位置の制御が行われる。この制御ではスティック型コントローラ4の姿勢情報の誤差が抑制されるので、照準AOの表示位置を好適に制御することができる。
そこで、以下では、スティック型コントローラ4によってゲーム画面Gにおける照準AOの表示位置を制御する場合を例に本発明を説明する。
図2は、本実施形態に係るゲーム装置の構成を示す斜視図である。
ゲーム装置1は、ゲームのプログラムを実行する装置本体2、及び使用者Pが装置本体2にプログラムを実行するために必要な指令を入力するための操作部材であるコントローラ5等で構成されている。装置本体2には、プログラムを実行することによって生成したゲーム画像を表示するためのディスプレイ6が接続されている。コントローラ5にはパッド型コントローラ3とスティック型コントローラ4とが含まれる。使用者Pがスティック型コントローラ4を振る操作によって照準AOの表示制御をする際にカメラ7が必要となる。そのため、カメラ7も装置本体2に接続されている。
ディスプレイ6は、例えば、AVケーブルやHDMI(High-Definition Multimedia Interface)ケーブルなどのケーブル9で装置本体2に接続されている。カメラ7は、専用のケーブル10で装置本体2に接続されている。ディスプレイ6としては、例えば、液晶テレビやコンピュータ用のモニタなどが用いられる。カメラ7は、例えば、CCD(Charge-Coupled Device)カラーイメージセンサを用いたCCDカメラである。
パッド型コントローラ3及びスティック型コントローラ4は、無線通信によって装置本体2と接続される。この無線通信には、例えば、Bluetooth(登録商標)による通信方式が用いられる。なお、無線による通信方式には、Bluetooth(登録商標)以外の電波を利用した通信方式、光を利用した通信方式(例えば、IrDA通信方式)若しくは音波を利用した通信方式を用いてもよい。
また、パッド型コントローラ3は、専用のケーブルで装置本体2に接続してもよい。この場合、パッド型コントローラ3とスティック型コントローラ4とを無線通信で結合し、スティック型コントローラ4の操作情報を、パッド型コントローラ3を経由して装置本体2に送信するようにしてもよい。
装置本体2にはメディア挿入口2aが設けられている。このメディア挿入口2aに、プログラムが記録されたDVD−ROMあるいはCD−ROM等の光ディスクを用いたディスクメディア8が装填される。装置本体2にディスクメディア8が装填されると、CPUがそのディスクメディア8から初期ローディング用のプログラムとそのプログラムの実行に必要なデータ(画像のデータと音声のデータを含む)とを装置本体2内のRAM(Random Access Memory)に自動的に読み込む初期ローディング処理を行う。CPUは、初期ローディング処理の後、RAMに読み込んだプログラムを実行してゲームの初期画面(例えば、タイトル画面)をディスプレイ6の表示画面6aに表示する。
その後は、使用者Pのパッド型コントローラ3におけるボタンあるいはキーの押下操作、ジョイスティックの回転操作又はスティック型コントローラ4を振る操作などに基づいて、CPUはプログラムを実行する。
なお、ディスクメディア8に記録されたプログラムには複数の独立したプログラムや相互に関連付けられた複数のプログラムが含まれている。本実施形態に係るアクションゲームにおいて、ゲーム空間は複数のフィールドで構成される。そして、フィールド単位でプレイヤキャラクタPCは多数の敵キャラクタECと対戦しながら所定の目的を達成する。従って、独立したプログラムには、各フィールドのゲーム進行を制御するプログラムも含まれる。また、照準AOをディスプレイ6の表示画面6aに表示させるための当該表示画面6aにおける表示位置を算出するプログラムも独立したプログラムに含まれる。
ゲーム進行を制御するプログラムには、複数の演算用のプログラムとグラフィック制御用のプログラムと音声制御用のプログラムとが含まれる。複数の演算用のプログラムには、例えば、複数の敵キャラクタECの動作を制御するためのプログラム、使用者Pの操作によってコントローラ5から入力される操作情報に基づいてプレイヤキャラクタPCの動作を制御するためのプログラム、及びプレイヤキャラクタPCの動作に基づいてゲーム空間上で発生する事象を制御するためのプログラムが含まれる。ゲーム空間上で発生する事象とは、例えば、対戦時におけるプレイヤキャラクタPC又は敵キャラクタECの負傷や死亡の発生、プレイヤキャラクタPCの破壊動作による建物などの損壊の発生などである。グラフィック制御用のプログラムは、上記の演算用のプログラムに基づく演算処理の処理結果をゲーム画像として描画する。音声制御用のプログラムは、効果音を発生させる。
プログラムを実行するために必要なデータには、例えば、上記の演算用のプログラムによる演算処理に必要な各種の数値のデータ、上記のグラフィック制御用のプログラムによる描画処理に必要な画像のデータ、及び上記の音声制御用のプログラムによる音声出力処理に必要な音声のデータが含まれる。数値のデータには、例えば、プレイヤキャラクタPCあるいは敵キャラクタECの体力もしくは攻撃/防御力を示すパラメータのデータ、両者の距離を演算するためのパラメータのデータ、及び各種のフラグのデータなどが含まれる。
画像のデータには、プレイヤキャラクタPCあるいは敵キャラクタECなどのキャラクタの画像を作成するためのデータ、対戦フィールドを構成する建物のオブジェクトや背景の画像を作成するためのデータ、ゲーム中のプレイヤキャラクタPCのステータスに関する情報を表示するためのデータ、及びプレイヤキャラクタPCが銃JOを構えたときに表示する照準AOのデータなどの各種のデータが含まれる。プレイヤキャラクタPCのステータスに関する情報には、例えば、体力値、装備している武器、防具、及びマップなどの情報が含まれる。
本実施形態では、ゲーム装置1がプレイヤキャラクタPCの背後に配置した仮想カメラでプレイヤキャラクタPC側を撮影した仮想のゲーム空間の画像(透視投影法による二次元画像)を上記の画像のデータを用いて生成する。ゲーム装置1は、生成した二次元画像をゲーム画像としてディスプレイ6に表示する。
音声データには、BGM、プレイヤキャラクタPCあるいは敵キャラクタECが発する音声、物体が衝突したときの衝突音、及び爆弾が爆発したときの爆発音などの各種の事象発生に対応した効果音のデータが含まれる。
相互に関連付けられた複数のプログラムは、例えば、1つの処理をするためのプログラムがメインルーチンとサブルーチンの関係にある複数のプログラムとで構成されている場合の両ルーチンのプログラムである。上記したフィールドのゲーム進行を制御するプログラムは、メインルーチンのプログラムとそのメインルーチンに関連付けられた複数のサブルーチンのプログラムとで構成されている。
各フィールドにおけるゲーム進行では、プレイヤキャラクタPCが多数の敵キャラクタECと対戦する処理が含まれる。その対戦にはプレイヤキャラクタPCが敵キャラクタECを銃撃する攻撃処理が含まれる。この攻撃処理は、メインルーチンに関連付けられたサブルーチンの処理として実行される。すなわち、コントローラ5からプレイヤキャラクタPCが敵キャラクタECを銃撃するための一連の操作情報が装置本体2に入力されると、攻撃処理のサブルーチンが実行されることによって、プレイヤキャラクタPCが銃JOを構え、照準AOが敵キャラクタECに合わされる。その後、弾が発射されるという一連の動作が行われる。
図3は、図2に示すゲーム装置1の内部構成を示すブロック図である。
装置本体2は、制御部201、描画処理部202、音声処理部203、オブジェクト位置算出部204、I/Oインターフェース部205、ディスクドライブユニット206、メモリカード接続ユニット207、及び信号受信部208を備えている。制御部201には、描画処理部202、音声処理部203、オブジェクト位置算出部204及びI/Oインターフェース部205が接続されている。また、I/Oインターフェース部205には、ディスクドライブユニット206、メモリカード接続ユニット207、及び信号受信部208が接続されている。また、I/Oインターフェース部205には、ケーブル9を介してディスプレイ6が接続され、ケーブル10を介してカメラ7が接続されている。
I/Oインターフェース部205は、ディスクドライブユニット206、メモリカード接続ユニット207、信号受信部208、ディスプレイ6及びカメラ7と、制御部201との間のデータ及び信号の送受を仲介する。
ディスクドライブユニット206は、制御部201からのローディング指令に基づき、ディスクメディア8からプログラムやデータを読み出すユニットである。ローディング指令は、ローディングすべきプログラムとそのプログラムの実行に必要なデータとを指定した読出指令である。ディスクドライブユニット206は、光ディスクドライブで構成される。
メモリカード接続ユニット207は、メモリカード11への情報の書き込みとメモリカード11からの情報の読み出しとを行う。メモリカード11は、前回のゲーム終了時の状態からゲームを再開できるようにするために、予め設定されたゲーム進行に関するデータを保存する。メモリカード11に保存されるデータには、例えば、ゲームの進行状況を示すデータ、使用者Pが設定したプレイヤキャラクタPCに関するデータ、ゲーム中に獲得したポイント及びアイテムなどの各種の特典のデータなどが含まれる。メモリカード11には、例えば、フラッシュメモリやSDカードなどが用いられる。
制御部201は、ゲームの開始時にプログラムをディスクメディア8から読み出した後、メモリカード接続ユニット207にデータ読出指令を出力する。メモリカード接続ユニット207は、そのデータ読出指令に基づき、メモリカード11から保存されているゲーム進行に関するデータを制御部201に読み出す。また、制御部201は、ゲーム進行中やゲーム終了時にパッド型コントローラ3から「データのセーブ」の操作情報が入力されると、メモリカード接続ユニット207にデータ書込指令を出力する。メモリカード接続ユニット207は、そのデータ書込指令に基づき、保存すべきゲーム進行に関するデータをメモリカード11に書き込む。
信号受信部208は、パッド型コントローラ3及びスティック型コントローラ4から短距離無線通信により送信される信号を受信する。信号受信部208は、受信した信号に含まれる両コントローラ3,4の操作情報及びスティック型コントローラ4に内蔵された角速度センサから出力される角速度情報を抽出し、制御部201に入力する。
プログラムは、主として制御部201、描画処理部202及び音声処理部203によって実行される。これらの処理部で処理された結果はI/Oインターフェース部205とケーブル9を介してディスプレイ6に出力される。処理結果に含まれる画像のデータはディスプレイ6の表示画面6aに表示される。また、処理結果に含まれる音声のデータはディスプレイ6のスピーカ6bから出力される。
制御部201が実行するプログラム及びデータは、ディスクドライブユニット206によってディスクメディア8から制御部201に読み込まれる。なお、データがメモリカード11に保存されている場合は、制御部201がメモリカード接続ユニット207を介してメモリカード11からデータを読み込む。また、コントローラ5の操作情報は、当該コントローラ5が操作される毎に信号受信部208を介して制御部201に入力される。
スティック型コントローラ4内の角速度センサで検出される角速度情報は、所定の周期で信号受信部208を介して制御部201に入力される。この周期は、描画処理部202が描画処理を行うフレーム周期より非常に短い(例えば、12ミリ秒)。フレーム周期は、フレームレートをN枚/秒とすると、1/N秒であり、通常1/30秒である。角速度情報の検出周期は、例えば、12ミリ秒である。制御部201は、スティック型コントローラ4から角速度情報が入力される毎に積分演算を行って回転角を算出する。この回転角は、スティック型コントローラ4の基準姿勢におけるxyz座標系の各軸周りの角度の変化量の累積値である。制御部201は、算出した回転角を姿勢情報としてオブジェクト位置算出部204に転送する。
また、ディスプレイ6及びカメラ7は、それぞれケーブル9及びケーブル10によってI/Oインターフェース部205に接続されている。ゲームが開始されると、カメラ7のスティック型コントローラ4を撮影した撮影画像のデータが、所定の周期でI/Oインターフェース部205を介して制御部201に入力される。この周期もフレーム周期より非常に短く、例えば、スティック型コントローラ4が角速度情報を送信する周期と同程度である。制御部201は、撮影画像のデータが入力される毎にそのデータをオブジェクト位置算出部204に転送する。オブジェクト位置算出部204は、カメラ7の撮影画像とスティック型コントローラ4の姿勢情報とを用いて、表示画面6aに照準AOを表示する位置を演算する。
制御部201は、装置本体2の全体動作を制御するマイクロコンピュータを有している。マイクロコンピュータは、CPU201a、ROM(Read Only Memory)201b及びRAM201c等を備えている。ROM201b及びRAM201cは、バスラインでCPU201aに接続されている。
CPU201aは、制御部201内で制御の主体であり、プログラム(特に演算用のプログラム)に従って演算処理を行う。ROM201bは、装置本体2の電源がオンになったときに当該装置本体2を所定の初期状態に設定したり、メディア挿入口2aにディスクメディア8が装填されたときに初期ローディング処理を行ってゲームを開始できる状態に設定したりするために、CPU201aに実行させる基本的なプログラムを記憶する。また、RAM201cは、CPU201aがROM201bに記憶されたプログラムやディスクメディア8から読み出したプログラムに従って演算処理をするために、プログラムやデータを一時的に記憶する。
CPU201aは、ディスクドライブユニット206によってディスクメディア8から読み出されたプログラムあるいはデータ、またはメモリカード接続ユニット207によってメモリカード11から読み出されたデータをRAM201cに一旦保存する。また、CPU201aは、RAM201cの作業エリアを用いてプログラムを実行する。さらにCPU201aは、主としてゲーム空間上で生じる事象の変化を演算し、その演算結果をゲーム画像及び効果音の変化やプレイヤキャラクタPCや敵キャラクタECのステータスの変化に反映する処理をする。これにより、CPU201aは、ゲームの進行状況を統括的に制御する。
ゲーム画像の生成は描画処理部202によって行われる。効果音の生成は音声処理部203によって行われる。
描画処理部202は、CPU201aからフレーム周期毎に出力される描画指令に基づいて各コマのゲーム画像(二次元画像)を生成する。CPU201aは、上記の演算処理によりディスプレイ6に表示すべきゲーム画像を決定する。CPU201aは、決定したゲーム画像の描画に必要なデータ(キャラクタあるいはオブジェクトのポリゴンデータ、および背景画像のデータ等)及び光源データ等をRAM201cから読み出して描画指令とともに描画処理部202に供給する。また、CPU201aは、プレイヤキャラクタPC及び敵キャラクタECのゲーム空間における位置のデータ等を描画処理部202に供給する。さらに、CPU201aは、スティック型コントローラ4で照準AOの表示又は非表示が必要な操作が行われると、描画処理部202に照準AOの表示指令又は非表示指令を出力する。
描画処理部202は、CPU201aからの描画命令に基づいて画像のデータ等を用いて、描画に必要なデータの演算等を行う。また、描画処理部202は、その演算結果に基づいて描画処理部202内のVRAM(図示せず)に1コマ(1フレーム)分のゲーム画像を生成する。描画に必要なデータには、プレイヤキャラクタPC、敵キャラクタEC、各オブジェクト、背景の位置関係、ディスプレイ6の画面上における各オブジェクトを構成するポリゴンの座標、各ポリゴンに対応するテクスチャ、並びに各ポリゴンの反射特性等のデータが含まれる。
また、描画処理部202は、CPU201aからの表示指令に基づいて照準AOをディスプレイ6の表示画面6aに表示するための描画処理を行う。生成されたゲーム画像は、フレーム周期毎に映像信号に変換されてディスプレイ6の表示画面6aに表示される。
音声処理部203は、CPU201aからの音声指令に基づいて効果音やBGMのデータを生成する。CPU201aは、ディスプレイ6のスピーカ6bから出力すべき効果音やBGMの音響内容を決定する。また、CPU201aは、その内容を音声指令とともに音声処理部203に出力する。音声処理部203は、指令された音響内容に基づき、RAM201cから効果音及びBGMのデータを読み出し、所定の加工処理とD/A変換処理とを行って音声信号を生成する。音声処理部203は、生成した音声信号をディスプレイ6のスピーカ6bから出力する。
オブジェクト位置算出部204は、カメラ7から入力されるスティック型コントローラ4の撮影画像のデータとスティック型コントローラ4から入力される姿勢情報とを用いて、ディスプレイ6の表示画面6aに照準AOを表示する位置を算出する。
すなわち、オブジェクト位置算出部204は、撮影画像からカメラ7に設定されるXYZ座標系におけるスティック型コントローラ4の発光部402(図4A,4B参照)の位置座標(Xc,Yc,Zc)(図5参照)を算出する。オブジェクト位置算出部204は、さらにその算出値のXY座標(Xc,Yc)をスティック型コントローラ4から入力される姿勢情報を用いて補正する。その後オブジェクト位置算出部204は、その補正値(Xcs,Ycs)を表示画面6aのIJ座標系(単位はピクセル)の座標(Ics,Jcs)に変換する処理(図11参照)を行う。変換された座標(Ics,Jcs)は表示画面6aにおける照準AOの表示位置である。
オブジェクト位置算出部204は、スティック型コントローラ4の照準AOを表示させるためのボタン(図4Bのボタン409参照)が操作されると、撮影画像と姿勢情報が入力される毎に上記の演算処理を行う。オブジェクト位置算出部204による照準AOの表示位置の演算処理の詳細は後述する。
パッド型コントローラ3は、低背の筐体の上面と前側の側面に操作部材が配置されたゲーム専用の周知のコントローラである。パッド型コントローラ3の上面の左端部及び右端部に4つのキー及び4つのボタン(□、△、○、×のマークが付されたボタン)が設けられている。4つのキーの右下側及び4つのボタンの左下側には、一対のスティックRが設けられている。また、パッド型コントローラ3の前側面の両端部にもボタンが設けられている。
使用者Pは、パッド型コントローラ3のキー及びボタンを操作してプレイヤキャラクタPCの動作を制御し、ゲームを進行させることができる。
図4A及び図4Bは、スティック型コントローラ4の構造を示す図である。図4Aは上面図、図4Bは底面図である。
スティック型コントローラ4は、円筒状の筐体401の先端に球状の発光部402が設けられた棒状のコントローラである。発光部402はLEDなどの発光源402aを内蔵している。発光源402aから発する光によって発光部402が球状に発光する。発光部402は、カメラ7によって撮影される。その撮影画像を用いて、図5に示すように、カメラ7に設定されたXYZ座標系におけるスティック型コントローラ4の座標(正確には発光部402の座標(Xc,Yc,Zc))が算出される。
また、筐体401は角速度センサ403を内蔵している。角速度センサ403には、例えば、MEMS(Micro Electro Mechanical System)ジャイロスコープが用いられる。角速度センサ403は、使用者Pによってスティック型コントローラ4が振られたときに、図6に示すように、基準姿勢においてスティック型コントローラ4に設けられたUVW座標系のU軸、V軸、W軸の各軸周りの角速度ωu,ωv,ωwを検出する。W軸は筐体401の長手方向に平行な方向である。V軸はW軸に対して上方向(ボタン405の方向)に直交する方向である。U軸はW軸に対して右方向(ボタン407の方向)に直交する方向である。制御部201は、角速度センサ403によって検出された角速度ωu,ωv,ωwを積分してスティック型コントローラ4の各軸周りの回転角θu,θv,θwを算出する。
スティック型コントローラ4の位置の情報及びスティック型コントローラ4の回転角の情報(スティック型コントローラ4の姿勢情報)は、図7に示すように、ディスプレイ6の表示画面6aに照準AOを表示させるときに当該表示画面6aにおける表示位置(Ics,Jcs)の演算に用いられる。この演算方法については後述する。
なお、図8に示すように、スティック型コントローラ4を姿勢1から姿勢2に傾けると、スティック型コントローラ4に設定されたUVW座標系が回転する。従って、姿勢1を基準にした姿勢2のU軸、V軸、W軸の各軸周りの回転角(θu,θv,θw)は、スティック型コントローラ4を姿勢1から姿勢2に変化させたときの姿勢の変化量を示す。この場合、姿勢1が基準姿勢である。
スティック型コントローラ4の姿勢の変化量は、基準姿勢におけるU軸、V軸、W軸の各軸の方向を基準とした各軸周りの回転角(θu,θv,θw)として定義される変化量である。従って、基準姿勢を変更すると、回転角(姿勢の変化量)が変化する。すなわち、図8において、スティック型コントローラ4を姿勢2からさらに姿勢3に傾けると、スティック型コントローラ4の姿勢の変化量は姿勢1に対する回転角として算出される。この場合、スティック型コントローラ4が姿勢2になった時点で基準姿勢を姿勢2に変更すると、スティック型コントローラ4の姿勢の変化量は姿勢2に対する回転角として算出される。これにより、スティック型コントローラ4の姿勢の変化量は変化する。
上述したように、角速度センサ403により検出される角速度を積分してU軸、V軸、W軸の各軸周りの回転角θu,θv,θwを算出すると、角速度センサ403のドリフトに起因する誤差が積算される。その結果、各回転角θu,θv,θwの精度が低下する。本実施形態では、精度低下を抑制するために、後述するように、使用者Pがスティック型コントローラ4の構えボタンを押下する毎に、角速度センサ403により検出される角速度の積分値をゼロにリセットするキャリブレーション処理を行う。
図8の例では、姿勢1の時に使用者Pがスティック型コントローラ4の構えボタンを押下すると、キャリブレーション処理が行われる。そして、角速度センサ403により検出される角速度の積分値がゼロにリセットされる。これにより、姿勢1が基準姿勢となる。その後は姿勢1におけるU軸、V軸、W軸の各方向を基準にして回転角θu,θv,θwが算出される。しかし、使用者Pが構えボタンの押下操作を解除した後、姿勢2の時に再度構えボタンを押下すると、再度キャリブレーション処理が行われる。そして、その時までに算出された回転角θu,θv,θwはそれぞれ「0」にリセットされる。これにより、姿勢2が新たに基準姿勢となる。その後は、姿勢2におけるU軸、V軸、W軸の各方向を基準にして新たに回転角θu,θv,θwが算出される。
上記のキャリブレーション処理により、ゲーム中にスティック型コントローラ4の回転角の算出値の誤差が増大してスティック型コントローラ4により照準AOの表示位置をモーションコントロールできなくなるという不都合が生じないようになる。なお、キャリブレーション処理の内容については後述する。
図4Aに示すとおり、筐体401の上面のほぼ中央には、電源用のボタン404が設けられている。筐体401の上面においてボタン404の上側には、ボタン405が設けられ、ボタン405の両側には、ボタン406a、ボタン406b,ボタン406c、ボタン406dを含む4つのボタン406が設けられている。また、筐体401の左右の側面には、ボタン407とボタン408が設けられ、筐体401の底面のボタン405に対向する位置には、ボタン409が設けられている。
ボタン404、ボタン405、ボタン406、ボタン407、ボタン408及びボタン409にはそれぞれモーメンタリー・オン−オフ・スイッチが設けられている。使用者Pが上記のボタンを押下すると、押下している状態の信号がスティック型コントローラ4から装置本体2に入力される。例えば、ボタンを押下していない状態にローレベル信号を割り当て、ボタンを押下している状態にハイレベル信号を割り当てている場合、使用者Pがボタンを押下していなければ、制御部201内のCPU201aにはローレベル信号が入力される。一方、使用者Pがボタンを押下すると、押下している期間だけハイレベル信号が入力される。
ボタン404、4つのボタン406、ボタン407及びボタン408は、コントローラのボタンとして周知である。従って、これらのボタンの説明は省略し、以下では、本発明に係るプレイヤキャラクタPCに銃撃を行わせる操作に関係するボタン405及びボタン409について説明する。
図1のゲーム画面Gにおいて、プレイヤキャラクタPCが銃撃するには、使用者Pは、(1)プレイヤキャラクタPCが銃JOを構える、(2)使用者Pが銃JOの発射方向(ターゲット)を決定する、(3)プレイヤキャラクタPCが銃JOから弾を発射する、の3段階の操作を行う必要がある。使用者Pが3段階の操作をすることで、プレイヤキャラクタPCは銃を構えた状態で敵キャラクタECを探査し、銃の照準を敵キャラクタECに合せた後に弾を発射する動作を行う。
本実施形態では、ボタン409(以下、「Tボタン409」という。)がプレイヤキャラクタPCに銃JOを構える姿勢を指令する「構えボタン」に割り当てられている。また、ボタン405が銃JOを発射する動作を指令する「発射ボタン」に割り当てられている。
従って、スティック型コントローラ4では、Tボタン409が押下されると、プレイヤキャラクタPCが銃JOを構えると同時に照準AOが表示される。そして、Tボタン409を押下した状態でスティック型コントローラ4が振られると、ディスプレイ6の表示画面6a上で当該スティック型コントローラ4の振られた方向に照準AOが移動する。更に、Tボタン409を押下した状態でボタン405が押下されると、銃JOから弾が照準AOの方向に発射される。
使用者PがTボタン409を押下すると、プレイヤキャラクタPCが銃JOを構えるとともに、照準AOがゲーム画面Gに表示される。その後、使用者PがTボタン409の押下操作を継続していれば、照準AOの表示は継続される。一方、Tボタン409の押下操作を解除すると、照準AOは非表示となる。このため、Tボタン409は、プレイヤキャラクタPCに銃JOを構える姿勢を指令する操作部材であるとともに、照準AOの表示を指令する操作部材である。
図9は、スティック型コントローラ4の内部構成を示すブロック図である。なお、図4A及び図4Bに示した部材及び同一部材には同一の番号が付されている。
スティック型コントローラ4には、制御部410、当該制御部410にI/Oインターフェース部411を介して相互に接続されている姿勢検出部412、操作部413及び信号送信部414が設けられている。制御部410は、マイクロコンピュータで構成され、スティック型コントローラ4の全体動作を制御する。マイクロコンピュータは、周知のCPU410aにROM410b及びRAM410cが相互に接続されている。I/Oインターフェース部411は、制御部410と姿勢検出部412、操作部413、信号送信部414及び発光部402との間のデータ及び信号の送受を仲介する。
姿勢検出部412は、角速度センサ403を含む。姿勢検出部412は、角速度センサ403から出力される信号を所定の周期(例えば、12ミリ秒)でサンプリングしてUVW座標系のU軸、V軸、W軸の各軸周りの角速度ωu,ωv,ωwを検出する。姿勢検出部412は、検出した角速度ωu,ωv,ωwの情報を信号送信部414を介して装置本体2に送信する。
操作部413は、ボタン404、ボタン405、ボタン406、ボタン407、ボタン408及びTボタン409の操作情報を制御部410に入力する。信号送信部414は、姿勢検出部412で検出されるスティック型コントローラ4の角速度情報及び操作部413から入力される操作情報を短距離無線通信によって装置本体2に送信する。
次に、ディスプレイ6の表示画面6aに表示される照準AOの表示位置の制御方法について説明する。
ディスプレイ6の表示画面6aにおける照準AOの表示位置は、図11に示すように、カメラ7に設定されたXYZ座標系におけるスティック型コントローラ4の位置座標(Xcs,Ycs)をディスプレイ6の表示画面6aに設定されたIJ座標系(単位はピクセル)の位置座標(Ics,Jcs)に変換することによって決定される。
スティック型コントローラ4の位置座標(Xcs,Ycs)は、カメラ7の撮影画像から取得されるスティック型コントローラ4の位置座標(Xc,Yc,Zc)(図5参照)を補正することによって算出される。スティック型コントローラ4の位置座標(Xc,Yc,Zc)は、スティック型コントローラ4の姿勢情報(θu,θv,θw)から算出される姿勢ベクトルの座標(Xs,Ys,Zs)を用いて補正される。
まず、カメラ7の撮影画像からスティック型コントローラ4の現在の位置座標を取得する方法について、図10を用いて説明する。
図10に示すように、カメラ7の撮影レンズ701から距離Dの前方位置にある物体面にスティック型コントローラ4の発光部402がある。また、撮影レンズ701から距離d(焦点距離)の後方位置に撮像面がある。例えば、物体面における発光部402のY座標Ycと撮像面における発光部402の光像のY座標ycとの間にはYc×d=yc×Dの関係が成立する。Y座標Ycは、撮像面における発光部402の光像のY座標ycを用いて、Yc=yc×D/dの演算式により求めることができる。同様に、物体面における発光部402のX座標Xcは、撮像面における発光部402の光像のX座標xcを用いて、Xc=xc×D/dの演算式により求めることができる。
なお、撮像面における発光部402の光像のXY座標(xc,yc)は、発光部402の光像が円形になる。そのため、その光像の中心座標を求めることにより、発光部402の光像のXY座標(xc,yc)を取得することができる。発光部402の発光色は予め装置本体2とスティック型コントローラ4との間で設定される。そのため、カメラ7の撮影画像の中から発光部402の発光色を有する円形画像を抽出して撮像面における円形画像の中心位置を算出することにより、発光部402の光像のXY座標(xc,yc)を取得することができる。
上記の式において、距離dはカメラ7の焦点距離(既知)である。また、X座標xc及びY座標ycは、撮影画像の中心にXYの直交座標を設定していれば、そのXY座標系における発光位置を算出することにより得られる。また、距離Dは、撮影レンズ701から物体面までの距離であるから、発光部402のZ座標Zcに相当する。発光部402を予め設定した基準位置(Xc0,Yc0,Zc0)に置いたときの撮像画像における発光位置の座標を(xc0,yc0)とすると、Yc0=yc0×Zc0/dの関係式が成立する。この関係式から得られるd=yc0×Zc0/Yc0をYc=yc×D/dに代入すると、Z座標Zcは、Zc=D=Zc0×(Yc/yc)×(yc0/Yc0)により算出することができる。すなわち、K=Zc0×yc0/Yc0を予め算出しておけば、Z座標ZcはZc=K×Yc/ycにより算出することができる。なお、Kは、K=Zc0×xc0/Xc0でも算出することができ、Zcは、Zc=K×Xc/xcでも算出することができる。
撮像面における発光部402の光像の面積はその光像に含まれるピクセル数により算出することができる。予め設定した標準の距離D0及び距離D0における発光部402の光像の面積s0のデータが、距離Dの算出用のデータとして記憶されている。あとは、距離Dにおける発光部402の光像の面積sが算出されれば、発光部402の任意の距離DはD=s×D0/s0を演算することにより算出することができる。
次に、スティック型コントローラ4の位置座標(Xc,Yc,Zc)を姿勢検出部412の検出値から取得されるスティック型コントローラ4の姿勢情報(θu,θv,θw)を用いて補正することにより位置座標(Xcs,Ycs)を算出する方法について説明する。
まず、スティック型コントローラ4の現在の姿勢ベクトルが算出される。現在の姿勢ベクトルは、基準姿勢におけるスティック型コントローラ4の姿勢ベクトルを姿勢検出部412の検出値から算出される回転角θu,θv,θwの分だけ回転させることによって得られる。現在の姿勢ベクトルは、XYZ座標系において、スティック型コントローラ4が現在指している方向を示す。
次に、スティック型コントローラ4の現在の位置座標(Xc,Yc)に現在の姿勢情報に基づく補正値(Xs×t,Ys×t)が加算される処理が行われて現在の位置座標(Xc,Yc)が補正される。すなわち、姿勢ベクトルのカメラ7のXYZ座標系における成分を(Xs,Ys,Zs)とすると、
Xcs=Xc+(Xs×t) …(1)
Ycs=−Yc+(Ys×t) …(2)
t=−Zc/Zs
の演算処理をすることにより、補正された現在の位置座標(Xcs,Ycs)が算出される。
上記(1),(2)式による補正処理は、カメラ7のXYZ座標系におけるスティック型コントローラ4の位置情報に基づく表示画面6aにおける照準AOの移動制御の精度を向上させる。例えば、スティック型コントローラ4を発光部402が上となる縦向きの姿勢にして当該発光部402が前後に移動するようにスティック型コントローラ4を振った場合、スティック型コントローラ4のX座標XcとY座標Ycは殆ど変化しない。この場合は、スティック型コントローラ4を振っても照準AOは表示画面6a上で移動しない。従って、この場合は、スティック型コントローラ4の位置や姿勢の変化に基づく表示画面6aにおける照準AOの移動制御の精度が低下する。
上記(1),(2)式は、カメラ7から見たスティック型コントローラ4の位置の変化にスティック型コントローラ4の姿勢の変化を加味してXYZ座標系におけるスティック型コントローラ4の現在の位置座標(Xcs,Ycs)を決定する演算処理である。この演算処理によって、カメラ7から見たスティック型コントローラ4の位置の変化だけでXYZ座標系におけるスティック型コントローラ4の現在の位置座標(Xc,Yc)を決定する場合よりも、スティック型コントローラ4の位置及び姿勢の微小な変化を照準AOの移動制御に反映することができる。
なお、(1),(2)式における姿勢ベクトルの座標(Xs,Ys)に対してt=−Zc/Zsの係数tを乗じる補正により、スティック型コントローラ4の姿勢の変化が位置座標(Xc,Yc)に与える影響が調整される。本実施形態では、スティック型コントローラ4がモニタ(カメラ7)から遠い位置にある場合に、近い位置にある場合よりもスティック型コントローラ4の姿勢の変化の影響力を大きくする等のために、係数tがt=−Zc/Zsである。スティック型コントローラ4がカメラ7から遠い位置にある場合、近い位置にある場合に比べて発光部402の移動がカメラ7で正確に検出され難いからである。なお、位置座標(Xc,Yc)の調整は、他の補正の方法で調整してもよい。あるいは係数tによる補正で位置座標(Xc,Yc)の調整をしなくてもよい。すなわち、Xcs=Xc+Xs、Ycs=−Yc+Ysによって位置座標(Xcs,Ycs)を算出するようにしてもよい。
次に、補正したスティック型コントローラ4の位置座標(Xcs,Ycs)が表示画面6a上の表示位置に変換される。この変換処理は、表示画面6aの表示位置の原点Oを、例えば、図11に示すように、表示画面6aの左下隅に設定する。また、変更処理は、横方向のピクセル位置をI座標、縦方向のピクセル位置をJ座標とした場合、カメラ7のXYZ座標系におけるスティック型コントローラ4の位置座標(Xcs,Ycs)が表示画面6aのIJ座標系の位置座標(Ics,Jcs)に変換される。
この変換処理では、表示画面6aの解像度をn×m(ピクセル)(但し、n,mは偶数)とすると、スティック型コントローラ4に対してキャリブレーション処理を行ったときに上記(1),(2)式によって算出される当該スティック型コントローラ4の位置座標(Xcs,Ycs)が表示画面6aの中央の位置(n/2,m/2)となるように変換される。すなわち、スティック型コントローラ4に対してキャリブレーション処理が行われると、照準AOの表示画面6aにおける表示位置が画面中央にリセットされる。
キャリブレーション処理が行われると、後述するように、姿勢ベクトルのカメラ7のXYZ座標系におけるX座標Xs及びY座標Ysはいずれもゼロにリセットされる。このため、その時に上記(1),(2)式によって算出されるスティック型コントローラ4の位置座標(Xcs,Ycs)は(Xc,−Yc)である。従って、キャリブレーション処理が行われたときの位置座標(Xcs,Ycs)=(Xc,−Yc)を表示画面6aの中央の位置(n/2,m/2)に変換する変換式は、
Ics=Xcs−Xc+n/2 …(3)
Jcs=Ycs−(−Yc)+m/2 …(4)
である。
上記(3),(4)式において、位置座標(Xcs,Ycs)から(Xc,−Yc)を引く処理は、位置座標(Xcs,Ycs)に対して(Xc,−Yc)のオフセットをかける処理に相当する。従って、そのオフセット値を(Xos,Yos)とすると、表示位置の変換式(3),(4)は、
(i)キャリブレーション処理が行われたときにカメラ7の撮影画像から取得されるスティック型コントローラ4の位置座標(Xc,Yc)を用いて、オフセット値(Xos,Yos)=(Xc,−Yc)を設定する。
(ii)上記(1),(2)式を用いて算出されるスティック型コントローラ4の位置座標(Xcs,Ycs)をオフセット値(Xos,Yos)で補正する。
(iii)補正されたX,Y座標にそれぞれn/2とm/2を加算する。
の処理をすることを意味している。
したがって、カメラ7のXYZ座標系におけるスティック型コントローラ4の位置座標(Xcs,Ycs)を表示画面6aのIJ座標系の位置座標(Ics,Jcs)に変換する変換式は、
Ics=Xcs−Xos+n/2 …(5)
Jcs=Ycs−Yos+m/2 …(6)
である。
次に、キャリブレーション処理について説明する。
キャリブレーション処理は、使用者PがTボタン409を押下することによって実行される。キャリブレーション処理により、その時のスティック型コントローラ4の姿勢情報(θu,θv,θw)がゼロにリセットされ、ディスプレイ6の表示画面6aにおける照準AOの表示位置が画面中央(n/2,m/2)にリセットされる。
Tボタン409が押下されると、その時のスティック型コントローラ4の姿勢情報(θu,θv,θw)が(0,0,0)にリセットされ、姿勢ベクトルの座標(Xs,Ys)は(0,0)となる。これにより、スティック型コントローラ4の位置座標(Xcs,Ycs)は、上記(1),(2)式より(Xcs,Ycs)=(Xc,−Yc)となる。
従って、キャリブレーション処理では、Tボタン409が押下された時にカメラ7の撮影画像から取得されるスティック型コントローラ4の位置座標(Xc,Yc,Zc)から(Xc,−Yc)の値がオフセット値(Xos,Yos)に設定される。そして、そのオフセット値(Xos,Yos)を上記(1),(2)式によって算出される位置座標(Xcs,Ycs)から引くことによって、その位置座標(Xcs,Ycs)が(0,0)にリセットされる。
位置座標(Xcs,Ycs)=(0,0)は、図5において、発光部402がXYZ座標系のZ軸上にある状態に相当する。従って、キャリブレーション処理は、仮想的にカメラ7に対して発光部402がXYZ座標系のZ軸上に位置するようにスティック型コントローラ4を配置する。すなわち、キャリブレーション処理により、その時のスティック型コントローラ4の姿勢が基準姿勢に設定される。
ゲーム中においては、使用者Pは、XYZ座標系の空間でスティック型コントローラ4を自由に移動してその姿勢を自由に変化させることができる。しかし、使用者Pが任意のタイミングでTボタン409を押下すると、その時のXYZ座標系における発光部402の位置が仮想的にXYZ座標系のZ軸上に移動し(以下、この移動した位置を「基準位置」という。)、かつ、その時のスティック型コントローラ4の姿勢が基準姿勢に設定される。従って、Tボタン409の押下操作が継続されているときには、基準位置の基準姿勢におけるスティック型コントローラ4に対する当該スティック型コントローラ4の位置及び姿勢の変化に基づいて、ディスプレイ6の表示画面6aにおける照準AOの表示位置の制御が行われる。
例えば、表示画面6aの解像度を1280×720(ピクセル)とし、使用者PがTボタン409を押下した時のスティック型コントローラ4の位置座標(Xcs,Ycs)を(500,600)とした場合、オフセット値(Xos,Yos)は(500,600)である。この時のディスプレイ6の表示画面6aにおける照準AOの表示位置(Ics,Jcs)はIcs=500−500+1280/2=640、Jcs=600−600+720/2=360である。
その後、使用者PがTボタン409を押した状態でスティック型コントローラ4を振ることにより、スティック型コントローラ4の位置座標(Xcs,Ycs)が(600,650)に移動すると、照準AOの表示位置は表示画面6aの(740,410)(ピクセル)の位置に移動する。これは、Ics=600−500+1280/2=740、Jcs=650−600+720/2=410となるからである。従って、照準AOの表示位置は、画面中央から(+100,+50)だけ移動する。
次に、ディスプレイ6の表示画面6aに照準AOを表示し、スティック型コントローラ4のモーションコントロールにより照準AOの表示位置を制御する処理について説明する。
図12は、フレーム周期で各コマのゲーム画像を生成する際にそのゲーム画像に照準AOを表示させるための処理手順を示すフローチャートである。このフローチャートは、フレーム周期をT(秒)とすると、CPU201aがT(秒)間隔で行う処理である。
CPU201aは、まず、スティック型コントローラ4のTボタン409の状態を判別する。すなわち、CPU201aは、Tボタン409が押下されているか否か(Tボタン409の操作信号がローレベルからハイレベルに反転したか否か)を判断する(S1)。また、CPU201aは、Tボタン409の押下操作が継続しているか否か(Tボタン409の操作信号がハイレベルを維持しているか否か)を判別する(S2)。
CPU201aは、Tボタン409の押下操作が解除された若しくはその解除された状態が継続していると判別すると(S1,S2:NO)、描画処理部202に照準AOを非表示にするオブジェクト非表示指令が出力され(S11)、処理が終了される。このオブジェクト非表示指令により描画処理部202は照準AOの表示処理を停止する。従って、ディスプレイ6の表示画面6aには照準AOが表示されなくなる。
なお、CPU201aは、例えば、Tボタン409の操作信号が前回の判別時はハイレベルだったが今回の判別時はローレベルに反転している場合、Tボタン409の押下操作が解除されたと判別する。また、CPU201aは、Tボタン409の操作信号が前回の判別時も今回の判別時もローレベルである場合、Tボタン409の押下操作の解除が維持されていると判別する。
一方、CPU201aは、Tボタン409の押下操作があったと判別すると(S1:YES)、リセットフラグRFを「1」にセットする(S3)。また、CPU201aは、Tボタン409の押下操作が維持されていると判別すると(S2:YES)、リセットフラグRFを「0」にリセットする(S4)。その後、CPU201aは、ステップS5以降でディスプレイ6の表示画面6aへの照準AOの表示指令の処理を行う。
なお、CPU201aは、Tボタン409の操作信号が前回の判別時はローレベルだったが今回の判別時はハイレベルに反転している場合、Tボタン409の押下操作がされたと判別する。また、CPU201aは、Tボタン409の操作信号が前回の判別時も今回の判別時もハイレベルである場合、Tボタン409の押下操作が維持されていると判別する。
リセットフラグRFは、スティック型コントローラ4のキャリブレーション処理を制御する。リセットフラグRFが「1」のときは、キャリブレーション処理を行うことを示し、リセットフラグRFが「0」のときはキャリブレーション処理を行わないことを示す。
CPU201aは、Tボタン409の押下操作が解除された若しくはその解除された状態が継続していると判別したとき(S2でNOのとき)には、リセットフラグRFの設定処理をしない。この場合は照準AOをディスプレイ6の表示画面6aに表示させる処理をしないので、リセットフラグRFを前回の判別時に設定された状態から変更する必要がないからである。なお、リセットフラグRFの論理は上記の内容と逆であってもよい。
ステップS5に移行すると、CPU201aは、リセットフラグRFが「1」にセットされているか否かを判別する。リセットフラグRFが「1」にセットされていれば(S5:YES)、CPU201aは、スティック型コントローラ4のキャリブレーション処理を行う(S6)。リセットフラグRFが「0」にセットされていれば(S5:NO)、CPU201aは、スティック型コントローラ4のキャリブレーション処理を行うことなく、ステップS7に移行する。
キャリブレーション処理では、CPU201aは、スティック型コントローラ4から送信される角速度情報(ωu,ωv,ωw)を積分演算して得られる姿勢情報(θu,θv,θw)を(0,0,0)にリセットする。また、CPU201aは、上記(1),(2)式で算出されるスティック型コントローラ4の位置座標(Xcs,Ycs)=(Xc,−Yc)をオフセット値(Xos,Yos)に設定する(S6)。
なお、オフセット値(Xos,Yos)は、ゲーム開始時のキャリブレーション処理で初期設定されている。使用者Pは、ゲーム開始時にカメラ7のほぼ正面の位置で発光部402を当該カメラ7に向けてキャリブレーション処理のための所定の操作を行う。このキャリブレーション処理で取得される位置座標(Xcs,Ycs)は(0,0)であるので、初期設定時のオフセット値(Xos,Yos)は(0,0)である。使用者Pがゲームを開始した後、ゲーム中に最初にTボタン409を押すと、CPU201aは、ステップS6でオフセット値(0,0)をその時に算出されるスティック型コントローラ4の位置座標(Xc,−Yc)に変更する。
ステップS7に移行すると、CPU201aは、オブジェクト位置算出部204から、その時の発光部402のXYZ座標系のXY平面における座標(Xcs,Ycs)を取得する。この座標(Xcs,Ycs)は、オブジェクト位置算出部204で、発光部402のXYZ座標系における座標(Xc,Yc,Zc)と、スティック型コントローラ4の姿勢ベクトルのXYZ座標系における座標(Xs,Ys,Zs)と用いて、上記(1),(2)式を演算することにより算出される。
続いて、CPU201aは、ステップS7で取得した位置座標(Xcs,Ycs)からオフセット値(Xos,Yos)を差し引いて位置座標(Xcs,Ycs)の補正を行う(S8)。
CPU201aは、Tボタン409が押下された時はキャリブレーション処理を行う。CPU210aは、スティック型コントローラ4の位置座標(Xcs,Ycs)を(Xc,−Yc)とし、この位置座標をオフセット値(Xos,Yos)に設定する。従って、スティック型コントローラ4の位置座標(Xcs,Ycs)の補正値(Xcs’,Ycs’)は(0,0)である。一方、キャリブレーション処理の後にスティック型コントローラ4の姿勢が変化したときは、CPU201aは、スティック型コントローラ4の位置座標(Xcs,Ycs)を上記(1),(2)式よりXcs=Xc+(Xs×t)(Xs≠0)、Ycs=−Yc+(Ys×t)(Ys≠0)に変化させる。従って、スティック型コントローラ4の位置座標(Xcs,Ycs)の補正値(Xcs’,Ycs’)は(Xcs−Xc,Ycs+Yc)である。
続いて、CPU201aは、補正後の位置座標(Xcs’,Ycs’)のそれぞれに「n/2」と「m/2」を加算してディスプレイ6の表示画面6a上に照準AOを表示させる位置座標(Ics,Jcs)(単位ピクセル)を算出する(S9)。
続いて、CPU201aは、算出した位置座標(Ics,Jcs)に照準AOを表示するオブジェクト表示指令を描画処理部202に出力し(S10)、処理を終了する。このオブジェクト表示指令により描画処理部202はディスプレイ6の表示画面6aの位置座標(Ics,Jcs)に照準AOを表示する処理を行う。これによりディスプレイ6の表示画面6aには照準AOが表示される。
図13は、CPU201aが数フレームに亘って図12のフローチャートを実行したときの各処理内容の変化の一例を表した図である。
同図において、t1,t2,…,t6,t7は描画処理部202がゲーム画像を生成するタイミングである。タイミングの間隔がフレーム周期であり、この間隔期間にゲーム画像の生成処理が行われる。照準AOの表示が必要になると、そのゲーム画像の生成処理に併せて照準AOの表示処理が行われる。なお、T1,T2,…,T6は、各フレーム周期を識別するために付した符号である。
同図の「ボタンの変化」の欄では、「信号」の欄はTボタン409の操作信号のレベル変化を示す。「OFF−OFF」、「OFF−ON」、「ON−ON」、「ON−OFF」の各欄は、各フレーム周期におけるTボタン409の操作信号の変化がいずれの状態に該当するかを示している。
フレーム周期T1の期間が「OFF−ON」の欄に〇印が付いているのは、この期間にTボタン409の操作信号がローレベル(OFF状態)からハイレベル(ON状態)に変化したことを示している。また、フレーム周期T2,T3,T4の期間が「ON−ON」の欄に〇印が付いているのは、この期間はTボタン409の操作信号がハイレベル(ON状態)に維持されていることを示している。また、フレーム周期T5の期間が「ON−OFF」の欄に〇印が付いているのは、この期間にTボタン409の操作信号がハイレベル(ON状態)からローレベル(OFF状態)に変化したことを示している。
「リセットフラグRF」の欄は、リセットフラグRFの内容を示している。フレーム周期T1,T4〜T6のリセットフラグRFが「0」になっているのは、フレーム周期T1,T4,T5,T6では各フレーム周期の直前のフレーム周期のリセットフラグRFの状態が維持されているからである。一方、フレーム周期T2のリセットフラグRFが「1」になっているのは、フレーム周期T2でTボタン409が押下されたことがフレーム周期T2で検出され、t3タイミングでのゲーム画像の生成処理でキャリブレーション処理が行われたからである。また、フレーム周期T3のリセットフラグRFが「0」になっているのは、キャリブレーション処理はTボタン409が押下されたときにだけ行われるため、フレーム周期T2で「1」にセットされたリセットフラグRFがフレーム周期T3ではリセットされるためである。
「照準オブジェクトの表示」の欄は、ディスプレイ6の表示画面6aにおける照準AOの表示位置の一例である。「指令」の欄は、CPU201aから描画処理部202に出力される照準AOの表示に関する指令内容を示している。また、「オフセット値」の欄は、各フレーム周期におけるオフセット値(Xos,Yos)の内容を示している。
図13に示すように、Tボタン409が押下されたこと及びその状態が継続されていることが検出されているフレーム周期T2〜T5の期間だけディスプレイ6の表示画面6aに照準AOが表示される。Tボタン409の押下操作が検出された直後のフレーム周期T2において照準AOが初めてディスプレイ6の表示画面6aの中央に表示される。その後、照準AOの表示画面6aにおける表示位置は、Tボタン409が押下された状態でスティック型コントローラ4が振られるのに応じて中央から移動する。
Tボタン409が押下されていないフレーム周期T1ではリセットフラグRFが「0」にリセットされているので、オフセット値(Xos,Yos)は初期値の(0,0)に保持されている。しかし、フレーム周期T2でTボタン409の押下操作が検出されてリセットフラグRFが「1」にセットされるのに応じて、オフセット値(Xos,Yos)は、その時に算出されるスティック型コントローラ4の位置座標(Xc,−Yc)で更新される。そして、その後は再度Tボタン409の押下操作が検出されるまで、そのオフセット値(Xc,−Yc)が保持される。
上記のように、本実施形態によれば、使用者PがTボタン409を押下してディスプレイ6の表示画面6aに照準AOが表示される時に、その時のスティック型コントローラ4の姿勢情報(θu,θv,θw)をゼロにリセットするキャリブレーション処理が行われる。従って、使用者Pは、ゲーム中にゲーム操作には関係のないキャリブレーション処理をするための操作を行う必要がなく、ゲームに集中することができる。
また、キャリブレーション処理のためにゲームを中断することがないので、使用者Pにゲームが中断されることのストレスを与えることもない。
また、キャリブレーション処理を実行すると、照準AOが表示画面6aの中央に移動する。従って、使用者Pはキャリブレーション処理が確実に行われていることを容易に確認することができる。
また、プレイヤキャラクタPCが銃JOを構える操作をキャリブレーションを行うための操作に兼用している。そのため、使用者Pは、コントローラ5にスティック型コントローラ4のキャリブレーション処理のための操作を別途設定する必要がない。従って、コントローラ5のボタン又はキーの操作の多重化を低減することができる。
また、ディスプレイ6の表示画面6aに照準AOが表示される時にキャリブレーション処理を行う。これにより、その後のスティック型コントローラ4の姿勢情報(U軸,V軸,W軸の各軸周りの回転角θu,θv,θw)の誤差を抑制することができる。特に、本実施形態では、照準AOの表示処理をする毎にキャリブレーション処理を行う。そのため、スティック型コントローラ4の姿勢情報の誤差が累積することがない。従って、表示画面6aにおける照準AOの移動を使用者Pのスティック型コントローラ4を振る操作に基づいて可及的正確に制御することができる。
なお、スティック型コントローラ4内の姿勢検出部412で角速度センサ403によって検出した角速度情報(ωu,ωv,ωw)の積分演算を行って姿勢情報(θu,θv,θw)を算出し、スティック型コントローラ4からその姿勢情報を装置本体2に送信してもよい。
この場合は、Tボタン409が押下されると、姿勢検出部412は姿勢情報(θu,θv,θw)のリセットを行う。また、装置本体2では、スティック型コントローラ4からのTボタン409の押下操作の信号の受信によりスティック型コントローラ4でキャリブレーション処理が行われたことを認識するようにすればよい。あるいは、スティック型コントローラ4からキャリブレーション処理を行ったことを示す信号を装置本体2に送信し、その信号によってキャリブレーション処理を認識させるようにしてもよい。逆に、装置本体2がスティック型コントローラ4からのTボタン409の押下操作の信号を受信すると、スティック型コントローラ4にキャリブレーション処理の実行命令を送信するようにしてもよい。
また、上記実施形態では、キャブレーション処理を行わせるボタンをスティック型コントローラ4に設けられたボタンに設定していたが、パッド型コントローラ3に設けられたボタンに設定してもよい。また、キャブレーション処理を行うには、Tボタン409のような押しボタンスイッチのボタンを押下するのではなく、パッド型コントローラ3に設けられたジョイスティックを操作するのであってもよい。
また、上記実施形態では、照準AOの表示を指令するボタンと照準AOの非表示を指令するボタンを同一のボタン(スティック型コントローラ4のTボタン409)で共用していたが、両ボタンは異なっていてもよい。
また、使用者Pがパッド型コントローラ3とスティック型コントローラ4の両方を操作してゲームを行うアクションゲームについて説明したが、本発明はこれに限られない。すなわち、本発明は、スティック型コントローラ4だけを用いるゲームにも適用することができる。
また、上記実施形態では、照準AOがディスプレイ6の表示画面6aに表示され、その照準AOが表示画面6a上で移動する例を説明した。しかし、本発明は、姿勢を検出できるセンサを備えたコントローラの位置や姿勢を変化させることによって表示画面6aに表示されるキャラクタ又はオブジェクトを操作するゲームにおいて、ゲーム中にコントローラの位置や姿勢を変化させる操作によってキャラクタやオブジェクトの操作が可能になるタイミングでキャリブレーション処理を行う構成のゲームに広く適用することができる。
また、上記実施形態では、コントローラがゲーム装置の本体と別体となっていたが、本発明はこれに限られない。すなわち、携帯型ゲーム装置、携帯型電話装置若しくはノート型パソコンのようにコントローラとディスプレイとが装置本体に一体となっているゲームが可能な装置において、装置本体に姿勢が検出できるセンサが設けられている装置にも本発明が適用できることは言うまでもない。この場合は、装置本体がコントローラと考えることができる。
従って、本発明は、上記実施形態のように、キャリブレーション処理のトリガーとして、キャラクタ又はオブジェクトの表示を指令するボタンの操作を必要とするものではない。本発明では、ディスプレイ6の表示画面6aにキャラクタ又はオブジェクトが表示されている状態で、そのキャラクタやオブジェクトに対してコントローラの位置や姿勢を変化させる操作による制御が可能になる条件が成立すると、その条件成立時にキャリブレーション処理を行うことができる。
上記の条件としては、使用者Pによってコントローラ(ゲーム装置とは別体のコントローラ及びゲーム装置と一体となっているコントローラを含む)に設けられた特定のボタンが操作されること、或いは使用者Pの操作には関係なくゲーム場面が特定の場面になることなどが考えられる。
特定のボタンが操作される条件としては、例えば、アクションゲームにおいて、敵キャラクタからプレイヤキャラクタに対してミサイル攻撃が行われたとき、使用者がコントローラの特定のボタンを押下すると、コントローラの位置又は姿勢を変化させる操作によってプレイヤキャラクタの姿勢を変化させてミサイルを回避することができる構成が考えられる。この構成では、特定のボタンの押下操作が条件であるから、使用者が特定のボタンを押下すると、キャリブレーション処理が行われる。そして、その後に使用者がコントローラを前後左右に傾ける操作をすると、その操作に応じて表示画面上のプレイヤキャラクタが上半身を上下左右に傾ける動作をしてミサイルを回避することができる。
また、ゲーム場面が特定の場面になる条件としては、例えば、上記のアクションゲームにおいて、敵キャラクタがミサイル攻撃などの特定種類の攻撃をすると、その攻撃が終了するまでの期間が自動的にゲームの操作装置の姿勢変化操作が可能になる構成が考えられる。攻撃が終了するとは、例えば、ミサイルがプレイヤキャラクタPC若しくは他のオブジェクトに当たるか、何処にも当たらずに消滅するなどの場合である。
この構成では、敵キャラクタがミサイル攻撃などの特定種類の攻撃を行うことが条件になる。つまり、敵キャラクタがミサイル攻撃を行うと、キャリブレーション処理が行われる。そして、その後に使用者がコントローラを前後左右に傾ける操作をすると、その操作に応じて表示画面上のプレイヤキャラクタが上半身を上下左右に傾ける動作をしてミサイルを回避することができる。
また、他のジャンルのゲームとしては、ディスプレイに表示された迷路でコントローラの姿勢を変化させてボールなどのオブジェクトを移動させるゲームが考えられる。この種のゲームには、予め決められた一定時間内にボールを迷路のスタート地点からゴール地点に移動させることを目的とするもの、或いは他の使用者とボールの移動時間を競う競技タイプのものが含まれる。この種のゲームでは、いずれのタイプでもボールが迷路のスタート地点にセットされる。この場合は、移動開始の条件が成立してからボールがゴール地点に到達するまでの期間(一定時間内にボールがゴール地点に到達しない場合は、一定時間が経過するまで期間)は、コントローラの位置及び姿勢を変化させる操作が可能である。
例えば、競技タイプのボールの移動開始の条件としては、ボールが迷路のスタート地点にセットされた後に、使用者が特定のボタンを操作することが考えられる。この場合は、ゲームが開始された後に使用者が任意のタイミングで特定のボタンを操作すると、そのタイミングでキャリブレーション処理が行われる。この場合は、ゲーム開始後に使用者が特定のボタンを操作することがキャリブレーション処理の条件となる。
また、別の条件としては、ボールが迷路のスタート地点にセットされた後にコンピュータがカウントダウンを行い、そのカウントダウンが終了することが考えられる。この場合は、ゲームが開始されてコンピュータがボールを迷路のスタート地点にセットするなどの所定の画面処理を行った後にカウントダウンの処理を終了すると、キャリブレーション処理が行われる。従って、この場合は、ゲーム開始後にコンピュータが使用者にボールの移動時間の計時開始を報知する処理をしたことがキャリブレーション処理の条件となる。
また、上記実施形態では、姿勢センサとして角速度センサを用いた例を説明したが、本発明はこれに限られない。すなわち、例えば、加速度計などの他の種類のセンサを用いてスティック型コントローラ4の姿勢の変化を検出する場合にも本発明を適用できることはいうまでもない。
また、上記実施形態では、アクションゲームを例に説明したが、例えば、RPG(ロールプレイングゲーム)、シューティングゲーム、格闘ゲーム、アドベンチャーゲームなどの様々なジャンルのゲームにおいても、本発明を適用することができる。また、「SECOND LIFE(登録商標)」、或いは「PlayStaion(登録商標)Home」等で提供されるバーチャル世界にアバターと呼ばれる使用者の分身を登場させて仮想世界での生活を体験するゲームにも適用することができる。
また、本発明は、複数の使用者の操作するキャラクタ若しくはCPUの制御するキャラクタがチームを組んで協同して敵キャラクタと対戦するようなゲーム、或いは他の使用者の操作するキャラクタを敵キャラクタとして対戦するようなゲームにも適用することができる。
また、上記実施形態では、オフラインタイプのゲーム装置について説明したが、本発明はオンラインタイプのゲームにも適用できることは言うまでもない。
また、上記実施形態では、家庭用ゲーム装置や携帯型ゲーム装置でゲームを実施する場合について説明したが、本発明はこれに限定されない。すなわち、本発明は、例えば、アーケードゲーム装置、或いはゲームソフトが搭載されているパーソナルコンピュータ等でゲームを実施する場合にも適用することができる。
本発明は、操作装置の姿勢情報を用いて表示装置に表示されるオブジェクトの動きを制御するプログラム、オブジェクト制御方法、記録媒体およびゲームシステムに関する。
本発明は、姿勢を検出することができるセンサを備えたコントローラのキャリブレーション処理をゲーム中の使用者による所定の操作によって自動的に行うことができ、コントローラの姿勢の変化に基づくゲーム画面内のキャラクタやオブジェクトの動きを好適に制御することができるプログラム、オブジェクト制御方法、記録媒体及びゲームシステムを提供することを目的としている。
本発明の第1の側面によって提供されるプログラムは、コンピュータを、ゲームの操作装置に設けられた姿勢センサの検出値を受信し、この検出値に基づいて、前記操作装置の基準姿勢からの姿勢の変化量を算出する姿勢変化量算出手段と、前記ゲームの実行中に使用者によってゲーム進行に使用される前記ゲームのオブジェクトの操作開始を指示する前記操作装置の第1の操作部材が操作されたことを示す操作信号を受け取ると、前記姿勢変化量算出手段の前記姿勢の変化量を算出するための前記操作装置の基準姿勢を再設定するリセット手段と、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記オブジェクトの操作終了を指示する第2の操作部材の操作信号を受け取るまでの間において、前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記ゲームのオブジェクトを制御するオブジェクト制御手段と、して機能させることを特徴とする。
本発明の第2の側面によって提供されるオブジェクト制御方法は、コンピュータがゲームの操作装置に設けられた姿勢センサの検出値を受信し、この検出値に基づいて、前記操作装置の基準姿勢からの姿勢の変化量を算出する姿勢変化量算出ステップと、前記コンピュータが前記ゲームの実行中に使用者によってゲーム進行に使用される前記ゲームのオブジェクトの操作開始を指示する前記操作装置の第1の操作部材が操作されたことを示す操作信号を受け取ると、前記姿勢変化量算出ステップで前記姿勢の変化量を算出するための前記操作装置の基準姿勢を再設定するリセットステップと、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記オブジェクトの操作終了を指示する第2の操作部材の操作信号を受け取るまでの間において、前記コンピュータが前記姿勢変化量算出ステップで算出される前記操作装置の姿勢の変化量に基づいて、前記ゲームのオブジェクトを制御するオブジェクト制御ステップと、を備えていることを特徴とする。
上記のオブジェクト制御方法において、前記オブジェクト制御ステップは、前記コンピュータが前記使用者による前記第1の操作部材の操作信号を受け取ると、前記リセットステップでリセットした前記操作装置の姿勢の変化量に基づいて、前記オブジェクトを表示装置の表示画面の予め設定されている初期位置に表示する初期表示制御ステップと、前記コンピュータがリセット後に前記姿勢変化量算出ステップで算出される前記操作装置の姿勢の変化量に基づいて、前記使用者による前記第2の操作部材の操作信号を受け取るまで、前記表示画面に表示された前記オブジェクトの表示位置を制御する表示位置制御ステップと、を含むとよい。また、前記初期位置は、前記表示画面の中央位置であるとよい。また、前記リセットステップでは、前記コンピュータが前記使用者による前記操作装置に設けられた前記第1の操作部材の操作信号を受け取ると、前記操作装置の基準姿勢を再設定し、前記オブジェクト制御ステップでは、前記コンピュータが前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記操作装置に設けられた前記第2の操作部材の操作信号を受け取るまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。また、前記第1の操作部材と前記第2の操作部材はモーメンタリー・オン−オフ・スイッチからなり、前記コンピュータが受け取る前記使用者による前記第1の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチを押下する操作信号であり、前記コンピュータが受け取る前記使用者による前記第2の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチの押下を解除する操作信号であるとよい。
本発明の第3の側面によって提供される記録媒体は、コンピュータを、ゲームの操作装置に設けられた姿勢センサの検出値を受信し、この検出値に基づいて、前記操作装置の基準姿勢からの姿勢の変化量を算出する姿勢変化量算出手段と、前記ゲームの実行中に使用者によってゲーム進行に使用される前記ゲームのオブジェクトの操作開始を指示する前記操作装置の第1の操作部材が操作されたことを示す操作信号を受け取ると、前記姿勢変化量算出手段の前記姿勢の変化量を算出するための前記操作装置の基準姿勢を再設定するリセット手段と、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記オブジェクトの操作終了を指示する第2の操作部材の操作信号を受け取るまでの間において、前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記ゲームのオブジェクトを制御するオブジェクト制御手段と、して機能させるプログラムを記録したコンピュータ読み取り可能な記録媒体である。
上記のプログラムにおいて、前記オブジェクト制御手段は、前記使用者による前記第1の操作部材の操作信号を受け取ると、前記リセット手段によりリセットされた前記操作装置の姿勢の変化量に基づいて、前記オブジェクトを表示装置の表示画面の予め設定されている初期位置に表示する初期表示制御手段と、リセット後に前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記使用者による前記第2の操作部材の操作信号を受け取るまで、前記表示画面に表示された前記オブジェクトの表示位置を制御する表示位置制御手段と、を含むとよい。また、前記初期位置は、前記表示画面の中央位置であるとよい。また、前記リセット手段は、前記使用者による前記操作装置に設けられた前記第1の操作部材の操作信号を受け取ると、前記操作装置の基準姿勢を再設定し、前記オブジェクト制御手段は、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記操作装置に設けられた前記第2の操作部材の操作信号を受け取るまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。また、前記第1の操作部材と前記第2の操作部材はモーメンタリー・オン−オフ・スイッチからなり、前記コンピュータが受け取る前記使用者による前記第1の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチを押下する操作信号であり、前記コンピュータが受け取る前記使用者による前記第2の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチの押下を解除する操作信号であるとよい。
本発明の第4の側面によって提供されるゲームシステムは、ゲームの操作装置に設けられた姿勢センサの検出値を受信し、この検出値に基づいて、前記操作装置の基準姿勢からの姿勢の変化量を算出する姿勢変化量算出手段と、前記ゲームの実行中に使用者によってゲーム進行に使用される前記ゲームのオブジェクトの操作開始を指示する前記操作装置の第1の操作部材が操作されたことを示す操作信号を受け取ると、前記姿勢変化量算出手段の前記姿勢の変化量を算出するための前記操作装置の基準姿勢を再設定するリセット手段と、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記オブジェクトの操作終了を指示する第2の操作部材の操作信号を受け取るまでの間において、前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記ゲームのオブジェクトを制御するオブジェクト制御手段と、を備えたことを特徴とする。
上記のゲームシステムにおいて、前記オブジェクト制御手段は、前記使用者による前記第1の操作部材の操作信号を受け取ると、前記リセット手段によりリセットされた前記操作装置の姿勢の変化量に基づいて、前記オブジェクトを表示装置の表示画面の予め設定されている初期位置に表示する初期表示制御手段と、リセット後に前記姿勢変化量算出手段で算出される前記操作装置の姿勢の変化量に基づいて、前記使用者による前記第2の操作部材の操作信号を受け取るまで、前記表示画面に表示された前記オブジェクトの表示位置を制御する表示位置制御手段と、を含むとよい。また、前記初期位置は、前記表示画面の中央位置であるとよい。また、前記リセット手段は、前記使用者による前記操作装置に設けられた前記第1の操作部材の操作信号を受け取ると、前記操作装置の基準姿勢を再設定し、前記オブジェクト制御手段は、前記使用者による前記第1の操作部材の操作信号を受け取ってから前記使用者による前記操作装置に設けられた前記第2の操作部材の操作信号を受け取るまでの間において、前記操作装置の姿勢の変化量に基づいて前記オブジェクトを制御するとよい。また、前記第1の操作部材と前記第2の操作部材はモーメンタリー・オン−オフ・スイッチからなり、前記コンピュータが受け取る前記使用者による前記第1の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチを押下する操作信号であり、前記コンピュータが受け取る前記使用者による前記第2の操作部材の操作信号は前記モーメンタリー・オン−オフ・スイッチの押下を解除する操作信号であるとよい。