以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。図1および図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
図3は、本体装置2の一例を示す六面図である。図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、図6に示すスピーカ88)を備えている。図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
図4は、左コントローラ3の一例を示す六面図である。図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、図1および図4に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
左コントローラ3は、アナログスティック32を備える。図4に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
左コントローラ3は、各種操作ボタンを備える。左コントローラ3は、ハウジング31の主面上に4つの操作ボタン33〜36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および左方向ボタン36)を備える。さらに、左コントローラ3は、録画ボタン37および−(マイナス)ボタン47を備える。左コントローラ3は、ハウジング31の側面の左上に第1Lボタン38およびZLボタン39を備える。また、左コントローラ3は、ハウジング31の側面の、本体装置2に装着される際に装着される側の面に第2Lボタン43および第2Rボタン44を備える。これらの操作ボタンは、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
図5は、右コントローラ4の一例を示す六面図である。図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施形態においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ4は、左コントローラ3と同様、ハウジング51の主面上に4つの操作ボタン53〜56(具体的には、Aボタン53、Bボタン54、Xボタン55、およびYボタン56)を備える。さらに、右コントローラ4は、+(プラス)ボタン57およびホームボタン58を備える。また、右コントローラ4は、ハウジング51の側面の右上に第1Rボタン60およびZRボタン61を備える。また、右コントローラ4は、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、図3に示す構成の他、図6に示す各構成要素81〜91、97、および98を備える。これらの構成要素81〜91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System−on−a−chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi−Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
プロセッサ81は、上述の左側端子17、右側端子21、および下側端子27に接続される。プロセッサ81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、プロセッサ81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、プロセッサ81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
また、本体装置2は、加速度センサ89を備える。本実施形態においては、加速度センサ89は、所定の3軸(例えば、図1に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ89は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。
また、本体装置2は、角速度センサ90を備える。本実施形態においては、角速度センサ90は、所定の3軸(例えば、図1に示すxyz軸)回りの角速度を検出する。なお、角速度センサ90は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。
加速度センサ89および角速度センサ90は、プロセッサ81に接続され、加速度センサ89および角速度センサ90の検出結果は、プロセッサ81へ出力される。プロセッサ81は、上記の加速度センサ89および角速度センサ90の検出結果に基づいて、本体装置2の動きおよび/または姿勢に関する情報を算出することが可能である。
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、図6で示しているため図7では省略している。
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。図7に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
左コントローラ3は、各ボタン103(具体的には、ボタン33〜39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
左コントローラ3は、慣性センサを備える。具体的には、左コントローラ3は、加速度センサ104を備える。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、図4に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ105は、所定の3軸(例えば、図4に示すxyz軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
左コントローラ3は、振動によってユーザに通知を行うための振動子107を備える。本実施形態においては、振動子107は、本体装置2からの指令によって制御される。すなわち、通信制御部101は、本体装置2からの上記指令を受け取ると、当該指令に従って振動子107を駆動させる。ここで、左コントローラ3は、コーデック部106を備える。通信制御部101は、上記指令を受け取ると、指令に応じた制御信号をコーデック部106へ出力する。コーデック部106は、通信制御部101からの制御信号から振動子107を駆動させるための駆動信号を生成して振動子107へ与える。これによって振動子107が動作する。
振動子107は、より具体的にはリニア振動モータである。リニア振動モータは、回転運動をする通常のモータと異なり、入力される電圧に応じて所定方向に駆動されるため、入力される電圧の波形に応じた振幅および周波数で振動をさせることができる。本実施形態において、本体装置2から左コントローラ3に送信される振動制御信号は、単位時間ごとに周波数と振幅とを表すデジタル信号であってよい。別の実施形態においては、本体装置2から波形そのものを示す情報を送信するようにしてもよいが、振幅および周波数だけを送信することで通信データ量を削減することができる。また、さらにデータ量を削減するため、そのときの振幅および周波数の数値に替えて、前回の値からの差分だけを送信するようにしてもよい。この場合、コーデック部106は、通信制御部101から取得される振幅および周波数の値を示すデジタル信号をアナログの電圧の波形に変換し、当該波形に合わせて電圧を入力することで振動子107を駆動させる。したがって、本体装置2は、単位時間ごとに送信する振幅および周波数を変えることによって、そのときに振動子107を振動させる振幅および周波数を制御することができる。なお、本体装置2から左コントローラ3に送信される振幅および周波数は、1つに限らず、2つ以上送信するようにしてもよい。その場合、コーデック部106は、受信された複数の振幅および周波数それぞれが示す波形を合成することで、振動子107を制御する電圧の波形を生成することができる。
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、アナログスティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
また、右コントローラ4は、振動子117およびコーデック部116を備える。振動子117およびコーデック部116は、左コントローラ3の振動子107およびコーデック部106と同様に動作する。すなわち、通信制御部111は、本体装置2からの指令に従って、コーデック部116を用いて振動子117を動作させる。
右コントローラ4は、処理部121を備える。処理部121は、通信制御部111に接続される。
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
次に、ゲームシステム1において行われるゲームについて説明する。本実施形態では、プレイヤは、左手に左コントローラ3を把持し、右手に右コントローラ4を把持してゲームを行う。本実施形態では、プレイヤによって操作されるキャラクタの動作の状態に応じて左コントローラ3の振動子107および右コントローラ4の振動子117を振動させる。なお、左コントローラ3および右コントローラ4が本体装置2から分離された状態でゲームが行われてもよいし、図1に示されるように、左コントローラ3および右コントローラ4が本体装置2に装着された状態でゲームが行われてもよい。
図8は、本実施形態のゲームシステム1の機能構成の一例を示す図である。図8に示されるように、本体装置2は、キャラクタ制御部200と、画像生成部201と、振動信号生成部202と、振動信号送信部203とを含む。本体装置2のプロセッサ81は、所定のゲームプログラムを実行することにより、キャラクタ制御部200、画像生成部201、振動信号生成部202、振動信号送信部203として機能する。所定のゲームプログラムは、例えば、スロット23に装着される外部記憶媒体に記憶されてもよいし、フラッシュメモリ84に記憶されてもよいし、外部からネットワークを介して取得されてもよい。
キャラクタ制御部200は、左コントローラ3および右コントローラ4の各ボタン103,113、アナログスティック(以下、単に「スティック」と表記する)32,52に対して行われたプレイヤの操作に応じた操作データを取得する。そして、キャラクタ制御部200は、取得した操作データに基づいて、操作対象(プレイヤキャラクタや動物キャラクタ)を制御する。例えば、キャラクタ制御部200は、左コントローラ3のスティック32に対する操作に応じた操作データに基づいて、プレイヤキャラクタを仮想空間内で移動させる。また、例えば、プレイヤキャラクタが後述する動物キャラクタの上に乗っている場合、キャラクタ制御部200は、スティック32に対する操作に応じた操作データに基づいて、動物キャラクタを仮想空間内で移動させる。また、キャラクタ制御部200は、例えば、右コントローラ4の各ボタン113(例えば、Aボタン53)に対する操作に応じた操作データに基づいて、プレイヤキャラクタを仮想空間内でジャンプさせる。
画像生成部201は、仮想空間に配置された仮想カメラを用いて、プレイヤによって操作される操作対象を含む仮想空間の画像を生成する。画像生成部201は、所定の時間間隔(例えば、1/60秒間隔)で仮想空間の画像を生成する。画像生成部201によって生成された画像は、ディスプレイ12に出力されて表示される。画像生成部201によって所定の時間間隔で画像が生成されることにより、ディスプレイ12には、プレイヤキャラクタが移動したりジャンプしたりする動作を行うアニメーションが表示される。なお、画像生成部201によって生成された画像は、ディスプレイ12とは異なる外部の表示装置(例えば、テレビジョン受像機)に表示されてもよい。
振動信号生成部202は、キャラクタ制御部200によって制御される操作対象の動作に応じた第1の振動制御信号および第2の振動制御信号を生成する。生成された第1の振動制御信号および第2の振動制御信号は、振動信号送信部203によって左コントローラ3および右コントローラ4にそれぞれ送信される。左コントローラ3の振動子107および右コントローラ4の振動子117は、振動制御信号に基づく強さで振動する。
具体的には、振動信号生成部202は、予め記憶された振動パターンデータに基づいて、振動の周波数および振幅を含む第1の振動制御信号および第2の振動制御信号を生成する。振動子107は、第1の振動制御信号に応じた周波数および振幅で振動する。また、振動子117は、第2の振動制御信号に応じた周波数および振幅で振動する。第1の振動制御信号および第2の振動制御信号は、所定の時間間隔(例えば、5m秒間隔)で生成され、振動子107,117にそれぞれ送信される。これにより、振動子107および振動子117は振動パターンデータに応じた波形で振動する。なお、振動信号生成部202は、振動パターンデータに応じた振動の強さ(振幅)を調整することができる。振動の強さの調整については後述する。
本実施形態におけるゲームでは、以下に示す第1実施例〜第4実施例に係るゲームのシーンが実行される。以下、各実施例について説明する。
(第1実施例)
図9は、第1実施例に係るゲームのシーンの一例を示す図である。図10は、プレイヤキャラクタ130が壁オブジェクト136に向かってジャンプしたときに表示される画像の一例を示す図である。
図9に示されるように、仮想空間には、プレイヤキャラクタ130と、地面オブジェクト135と、壁オブジェクト136とが配置される。また、仮想空間には仮想カメラ(図示せず)が配置される。仮想カメラは、プレイヤキャラクタ130から所定範囲に配置される。仮想カメラに基づいて、プレイヤキャラクタ130を含む仮想空間の画像が生成され、当該生成された画像がディスプレイ12又は外部の表示装置に表示される。なお、仮想空間には、上記の他にも、様々なオブジェクト(敵オブジェクト等)が配置される。
プレイヤキャラクタ130は、プレイヤ(ユーザ)によって操作される操作対象である。プレイヤは、左コントローラ3および右コントローラ4を用いてプレイヤキャラクタ130を動作させる。地面オブジェクト135は、仮想空間の地面を形成するオブジェクトである。壁オブジェクト136は、地面オブジェクト135に対して略垂直に配置されるオブジェクトであり、地面オブジェクト135から仮想空間の高さ方向に伸びるオブジェクトである。
プレイヤキャラクタ130は、プレイヤの操作に応じて、地面オブジェクト135上を移動したり、地面オブジェクト135上でジャンプしたりする。図9に示されるように、プレイヤキャラクタ130が壁オブジェクト136の近傍において壁オブジェクト136に向かってジャンプすると、図10に示されるような画像が表示される。具体的には、プレイヤキャラクタ130が壁オブジェクト136に片手を接触させながら、仮想空間の下方に落下する様子が表示される。このとき、プレイヤキャラクタ130は、仮想カメラを向いて、右手または左手を壁オブジェクト136につけながら(右手または左手を滑らせながら)下方に落下する。
例えば、図10に示されるように、プレイヤキャラクタ130を左後方から見るように仮想カメラが配置されている場合には、プレイヤキャラクタ130は、仮想カメラを向くと共に、右手131を壁オブジェクト136につけながら下方に落下する。この場合、プレイヤキャラクタ130の右手131は、プレイヤから見ると左側にある。プレイヤキャラクタ130が右手131を壁オブジェクト136につけながら下方に落下している間、左コントローラ3の振動子107および右コントローラ4の振動子117が振動する。
具体的には、プレイヤキャラクタ130が右手131を壁オブジェクト136につけながら下方に落下している間(プレイヤから見てプレイヤキャラクタ130の左側の手が壁オブジェクト136についている間)、右コントローラ4よりも左コントローラ3が強く振動するように、第1の振動制御信号および第2の振動制御信号が生成される。生成された第1の振動制御信号および第2の振動制御信号は、左コントローラ3および右コントローラ4にそれぞれ送信され、左コントローラ3の振動子107および右コントローラ4の振動子117がそれぞれ振動される。
図11は、プレイヤキャラクタ130の右後方に仮想カメラが配置されている場合において、プレイヤキャラクタ130が壁オブジェクト136に向かってジャンプしたときに表示される画像の一例を示す図である。図11に示されるように、プレイヤキャラクタ130を右後方から見るように仮想カメラが配置されている場合には、プレイヤキャラクタ130は、仮想カメラを向くと共に、左手132を壁オブジェクト136につけながら下方に落下する。この場合、プレイヤキャラクタ130の左手132は、プレイヤから見ると右側にある。プレイヤキャラクタ130が左手132を壁オブジェクト136につけながら下方に落下している間、左コントローラ3よりも右コントローラ4が強く振動するように、第1の振動制御信号および第2の振動制御信号が生成される。
このように、本実施形態では、プレイヤキャラクタ130の手(例えば右手131)が壁オブジェクト136についた状態でプレイヤキャラクタ130が落下する場合、プレイヤから見た側の手(左手)に対応するコントローラ(左コントローラ3)が、反対側のコントローラ(右コントローラ4)よりも強く振動する。
なお、図10および図11に示す画像が表示される場合において、左右のコントローラの振動の強さが上記とは逆であってもよい。すなわち、プレイヤキャラクタ130の右手131が壁オブジェクト136についている場合には、右コントローラ4を左コントローラ3よりも強く振動させてもよい。また、プレイヤキャラクタ130の左手132が壁オブジェクト136についている場合には、左コントローラ3を右コントローラ4よりも強く振動させてもよい。
図12は、画面に表示されるアニメーションと左右のコントローラ3,4に出力される振動制御信号とのタイミングの一例を示す図である。プレイヤの操作によってプレイヤキャラクタ130が壁オブジェクト136に向かってジャンプした場合、例えば、プレイヤキャラクタ130が左手(プレイヤから見て右側の手)を壁オブジェクト136につきながら下方に落下するアニメーションA1(以下では、「アニメーションA1(右)」と表記する)が表示される。
図12に示されるように、例えば、時点Ts1においてアニメーションA1(右)の表示が開始される。このアニメーションA1(右)の表示に伴って、第1の振動制御信号および第2の振動制御信号が、本体装置2から左コントローラ3および右コントローラ4にそれぞれ出力される。第1の振動制御信号および第2の振動制御信号は、アニメーションA1(右)が表示されている間、所定の時間間隔(例えば、5m秒間隔)で出力される。アニメーションA1(右)の表示は、時点Te1において終了する。アニメーションA1(右)の表示が終了すると、振動制御信号の出力も終了する。
アニメーションA1(右)が表示されている間、右コントローラ4の振動子117が左コントローラ3の振動子107よりも強く振動する。例えば、アニメーションA1(右)が表示されている間、右コントローラ4の振動子117は強さ「1」で振動し、左コントローラ3の振動子107は強さ「0.4」で振動する。
具体的には、アニメーションA1に応じた振動波形を示す振動パターンデータP1が記憶されており、当該振動パターンデータP1に基づく振動制御信号が、本体装置2から各コントローラ3,4に出力される。これにより、各コントローラの振動子107,117は、振動パターンデータP1に応じた波形で振動する。振動パターンデータに応じた振動の強さは、「0」〜「1」の間で調整される。
図13は、振動パターンデータP1に基づく振動の波形を示す図であり、アニメーションA1(右)が表示されているときの振動子107,117の振動波形の一例を示す図である。
図13に示されるように、振動パターンデータP1に基づいて、各時点における振動の周波数および振幅が制御され、振動子117が振動する。アニメーションA1(右)が表示される場合、右コントローラ4の振動子117は、図に示すような波形で振動する。このときの振動子117の振動の強さを「1」とする。すなわち、振動パターンデータP1に基づく振動波形の振動の強さ(調整前の強さ)を「1」とする。この場合、左コントローラ3の振動子107は、右コントローラ4の振動子117と同じ振動パターンデータP1に基づいて振動するが、振動の強さは振動子117よりも小さい。例えば、右コントローラ4の振動子117は、強さ「1」で振動するのに対して、左コントローラ3の振動子107は、強さ「0.4」で振動する。
振動の強さの調整は、振動パターンデータに基づく振幅を低減することによって行われる。具体的には、振動信号生成部202は、振動パターンデータに基づいて、その時点における振動の周波数Fと、基準となる振幅Aを読み取る。そして、例えば、強さ「1」で振動子を振動させる場合、振動信号生成部202は、読み取った周波数Fと振幅Aとを含む振動制御信号を振動信号送信部203に出力する。
一方、例えば、強さ「0.4」で振動子を振動させる場合、振動信号生成部202は、振動パターンデータに基づいて読み取った基準となる振幅Aに「0.4」をかけることで、低減した振幅A’を算出する。そして、振動信号生成部202は、読み取った周波数Fと、算出した振幅A’とを含む振動制御信号を振動信号送信部203に出力する。振動信号送信部203は、振動信号生成部202から出力された周波数および振幅を含む振動制御信号を、各コントローラに出力する。
なお、左右の振動子の振動の強さは上記に限らず、適宜変更されてもよい。例えば、アニメーションA1(右)が表示されている間、右コントローラ4の振動子117を強さ「1」で振動させる一方、左コントローラ3の振動子107を振動させなくてもよい(強さ「0」であってもよい)。また、アニメーションA1(右)が表示されている間、右コントローラ4の振動子117を強さ「1」で振動させ、左コントローラ3の振動子107を強さ「0.1」で振動させてもよい。
また、振動の強さは固定されず、ゲームの状況に応じて、振動の強さが「0」〜「1」の範囲で調整されてもよい。例えば、アニメーションA1(右)が表示される場合において、壁オブジェクト136の種類に応じて、右コントローラ4の振動子117および左コントローラ3の振動子107の振動の強さを「0」〜「1」の範囲で調整してもよい。この場合、右コントローラ4の振動子117を左コントローラ3の振動子107よりも強く振動させる。
また、アニメーションA1(右)が表示されるときに用いられる振動パターンデータと、アニメーションA1(左)が表示されるときに用いられる振動パターンデータとは同じであってもよいし、異なってもよい。すなわち、アニメーションA1(右)が表示されるときには、第1の振動パターンデータP1に基づいて振動子107および117の振動が制御され、アニメーションA1(左)が表示されるときには、第1の振動パターンデータP1とは異なる第2の振動パターンデータP1に基づいて振動子107および117の振動が制御されてもよい。
また、仮想空間内の異なる位置に複数種類の壁オブジェクト136が配置され、壁オブジェクト136の種類によって(仮想空間内の位置によって)、異なる振動パターンデータが用いられてもよい。また、同じ壁オブジェクト136のうちプレイヤキャラクタ130が手をつく領域(位置)によって異なる振動パターンデータが用いられてもよい。
図12に戻り、アニメーションA1(右)の表示が終了した後、さらにプレイヤの操作によって、プレイヤキャラクタ130が壁オブジェクト136に向かってジャンプしたとする。この場合、プレイヤキャラクタ130が右手(プレイヤから見て左側の手)を壁オブジェクト136につきながら下方に落下するアニメーションA1(以下では、「アニメーションA1(左)」と表記する)が表示される。
アニメーションA1(左)が表示されている間、左コントローラ3の振動子107が右コントローラ4の振動子117よりも強く振動する。例えば、アニメーションA1(左)が表示されている間、右コントローラ4の振動子117は強さ「0.4」で振動し、左コントローラ3の振動子107は強さ「1」で振動する。なお、アニメーションA1(左)が表示されている間、振動子107および振動子117は、アニメーションA1(右)が表示される場合と同じ振動パターンデータP1に基づいて振動する。
このように、表示されるアニメーションに応じて左右のコントローラ3,4を振動させることにより、プレイヤに、プレイヤキャラクタ130の状態(左手を壁オブジェクト136につけている状態、又は右手を壁オブジェクト136につけている状態)に応じた振動を感じさせることができる。これにより、プレイヤは、自身の左右の手に伝わる振動によってゲーム内のプレイヤキャラクタ130の状態を知ることができる。特に、左右のコントローラ3,4で振動の強さが異なるため、プレイヤは、プレイヤキャラクタ130の左右の状態(左右何れの手を壁オブジェクト136につけているか)を認識することができる。また、プレイヤキャラクタ130の動作の状態に応じてプレイヤに振動を感じさせることで、ゲームの興趣性が向上するとともに、ゲームの臨場感を高めることができる。
(第2実施例)
次に、第2実施例に係るゲームのシーンについて説明する。図14は、第2実施例に係るゲームのシーンの一例を示す図であり、プレイヤキャラクタ130が壁オブジェクト136にぶら下がった状態の一例を示す図である。図15は、プレイヤキャラクタ130が壁オブジェクト136の上端部を掴んでぶら下がったまま、右方向に移動する様子の一例を示す図である。
例えば、プレイヤキャラクタ130が下側の地面オブジェクト135からジャンプすることによって壁オブジェクト136と上側の地面オブジェクト137との境界付近に達した場合、プレイヤキャラクタ130は、壁オブジェクト136の上端部を掴んでぶら下がった状態となる(図14)。この状態でプレイヤが左コントローラ3のスティック32を用いて左右方向を入力すると、プレイヤキャラクタ130は、壁オブジェクト136の上端部を掴んだまま、スティック32の入力方向に移動する(図15)。このとき、プレイヤキャラクタ130は、左右の手を交互に壁オブジェクト136の上端部につけながら右方向に移動する。
具体的には、図15に示されるように、ある瞬間ではプレイヤキャラクタ130の右手が壁オブジェクト136の上端部についた状態であり、その瞬間においてはプレイヤキャラクタ130の左手は浮いた状態となる。次の瞬間では、プレイヤキャラクタ130の左手が壁オブジェクト136の上端部についた状態となり、かつ、プレイヤキャラクタ130の右手が浮いた状態となる。このように、プレイヤキャラクタ130は、左右の手を交互に壁オブジェクト136の上端部につけながら、右方向に移動する。
本実施形態のゲームでは、スティック32の右方向が入力された場合、プレイヤキャラクタ130が右手をついた後、左手をつくアニメーションA2(右)が表示される。プレイヤがスティック32の右方向を入力し続けている場合、アニメーションA2(右)が繰り返し表示される。これにより、プレイヤキャラクタ130が右方向に移動する様子が表示される。また、スティック32の左方向が入力された場合、プレイヤキャラクタ130が左手をついた後、右手をつくアニメーションA2(左)が表示される。プレイヤがスティック32の左方向を入力し続けている場合、アニメーションA2(左)が繰り返し表示される。これにより、プレイヤキャラクタ130が左方向に移動する様子が表示される。
図16は、アニメーションA2(右)と左右のコントローラ3,4に出力される振動制御信号とのタイミングの一例を示す図である。プレイヤキャラクタ130が壁オブジェクト136の上端部を掴んだ状態で右方向に移動する場合、アニメーションA2(右)が表示される。図16では、時点Tsから時点Teまでの期間でプレイヤキャラクタ130が右手をついた後、左手をつくアニメーションA2(右)が表示される場合について示されている。
図16に示されるように、時点TsにおいてアニメーションA2の表示が開始されると、まず、プレイヤキャラクタ130の右手が浮いた状態となり、時点T1において、プレイヤキャラクタ130の右手が壁オブジェクト136の上端部につく。この右手が壁オブジェクト136の上端部につく際に、振動制御信号が本体装置2から各コントローラ3,4に出力され、左コントローラの振動子107および右コントローラの振動子117が振動する。時点T1から時点T2までの間、プレイヤキャラクタ130の右手が壁オブジェクト136の上端部についた状態となり、この間、例えば5m秒間隔で振動制御信号が本体装置2から各コントローラ3,4に繰り返し出力される。
具体的には、アニメーションA2が表示される際に用いられる振動パターンデータP2が予め記憶されている。アニメーションA2が表示される場合、時点T1において、振動パターンデータP2に基づく第1の振動制御信号および第2の振動制御信号が、本体装置2から各コントローラ3,4にそれぞれ出力される。これにより、左コントローラ3の振動子107および右コントローラ4の振動子117が振動する。このとき、左コントローラの振動子107よりも右コントローラの振動子117が強く振動するように、振動の強さが調整される。例えば、右コントローラ4の振動子117は強さ「1」で振動し、左コントローラの振動子107は強さ「0.3」で振動する。振動の強さの調整は、第1実施例で説明した通りである。
次に、時点T2において、プレイヤキャラクタ130の左手が壁オブジェクト136の上端部につく。時点T2より前にプレイヤキャラクタ130の左手が浮いた状態となり、時点T2において、プレイヤキャラクタ130の左手が壁オブジェクト136の上端部につく。この左手が壁オブジェクト136の上端部につく際に、第1の振動制御信号および第2の振動制御信号が本体装置2から各コントローラ3,4にそれぞれ出力される。時点T2から時点Teまでの間、プレイヤキャラクタ130の左手が壁オブジェクト136の上端部についた状態となり、この間、例えば5m秒間隔で振動制御信号が本体装置2から各コントローラ3,4に繰り返し出力される。このとき、右コントローラの振動子117よりも左コントローラの振動子107が強く振動するように、振動の強さが調整される。例えば、右コントローラ4の振動子117は強さ「0.3」で振動し、左コントローラ3の振動子107は強さ「1」で振動する。
プレイヤがスティック32の右方向を入力し続けている場合は、アニメーションA2が繰り返し表示され、右手をついた状態と左手をついた状態とが交互に表示される。アニメーションA2の表示に伴って、上記のように振動制御信号が繰り返し出力される。これにより、プレイヤキャラクタ130の左右の手が交互に壁オブジェクト136の上端部につく動作に合わせて、左右のコントローラが交互に強く振動する。
なお、図16は単なる一例であり、プレイヤキャラクタ130の手の状態が変化するタイミング、振動が終了するタイミング、振動の強さ等は適宜変更されてもよい。例えば、プレイヤキャラクタ130の右手がついた状態(時点T1から時点T2までの状態)と、プレイヤキャラクタ130の左手がついた状態(時点T2から時点Teまでの状態)との間に、異なる状態(例えば、両手をついた状態)があってもよい。
また、上記では、プレイヤキャラクタ130の右手がついた状態では、右コントローラ4を強く振動させる振動制御信号(左コントローラ3を強さ「0.3」で振動させる第1の振動制御信号、および、右コントローラ4を強さ「1」で振動させる第2の振動制御信号)が繰り返し出力された。右コントローラ4を強く振動させる振動制御信号の出力は、プレイヤキャラクタ130の右手がついた時点T1から時点T3(<T2)までの期間だけ、行われてもよい。この場合、時点T3から時点T2までは振動制御信号は出力されず、左右のコントローラ3,4の振動は停止する。そして、時点T2において、プレイヤキャラクタ130の左手がつくとともに、左コントローラ3を強く振動させる振動制御信号(左コントローラ3を強さ「1」で振動させる第1の振動制御信号、および、右コントローラ4を強さ「0.3」で振動させる第2の振動制御信号)の出力が開始される。また、右コントローラ4の強い振動が行われているときに、左コントローラ3の強い振動が開始してもよい(すなわち、右コントローラ4の強い振動が時点T2まで行われ、かつ、左コントローラ3の強い振動が時点T2よりも前に開始されてもよい)。
また、例えば、プレイヤキャラクタ130の左手が壁オブジェクト136の上端部につくときに、左コントローラの振動子107は強さ「1」で振動する一方で、右コントローラ4の振動子117は振動しなくてもよい。また、プレイヤキャラクタ130の左手が壁オブジェクト136の上端部につくときに、左コントローラの振動子107は強さ「1」で振動し、右コントローラ4の振動子117は強さ「0.1」で振動してもよい。
このように、プレイヤキャラクタ130が両手を交互につくタイミングに合わせて左右のコントローラを振動させることにより、プレイヤは、振動によってプレイヤキャラクタ130の動作の状態を認識することができる。また、左右のコントローラの振動の強さを異ならせることにより、プレイヤは、特にプレイヤキャラクタ130の左右の状態を認識することができる。また、プレイヤ自身があたかもプレイヤキャラクタ130となって仮想空間内でプレイヤキャラクタ130の動作と同じ動作をしているような印象を与えることができ、ゲームの臨場感を高めることができる。
(第3実施例)
次に、第3実施例に係るゲームのシーンについて説明する。図17は、第3実施例に係るゲームのシーンの一例を示す図であり、プレイヤキャラクタ130が動物オブジェクト140の上に乗って移動するシーンの一例を示す図である。
本実施形態のゲームでは、プレイヤキャラクタ130が仮想空間に配置された動物オブジェクト140の上に乗った場合、プレイヤキャラクタ130を乗せた動物オブジェクト140が仮想空間内を移動する。動物オブジェクト140は、プレイヤの操作に応じて制御される操作対象である。
動物オブジェクト140は、左前足141と、右前足142と、右後足143と、左後足144とを有する。プレイヤキャラクタ130が動物オブジェクト140の上に乗っている間、動物オブジェクト140が仮想空間の地面オブジェクト135上を走るアニメーション(以下、「アニメーションA3」と表記する)が表示される。プレイヤキャラクタ130が動物オブジェクト140の上に乗っている間、プレイヤによって例えば左コントローラ3のスティック32が操作されると、動物オブジェクト140およびプレイヤキャラクタ130が、スティック32の入力方向に応じた方向に移動する。
動物オブジェクト140の各足が地面オブジェクト135につく際に、各コントローラ3,4の振動子107,117が振動する。例えば、動物オブジェクト140の左前足141が地面オブジェクト135につくときに、右コントローラ4の振動子117よりも左コントローラ3の振動子107が強く振動するように、振動子107および振動子117が振動する。また、動物オブジェクト140の右前足142が地面オブジェクト135につくときに、左コントローラ3の振動子107よりも右コントローラ4の振動子117が強く振動するように、振動子107および振動子117が振動する。同様に、動物オブジェクト140の左後足144が地面オブジェクト135につくときに、右コントローラ4の振動子117よりも左コントローラ3の振動子107が強く振動するように、振動子107および振動子117が振動する。また、動物オブジェクト140の右後足143が地面オブジェクト135につくときに、左コントローラ3の振動子107よりも右コントローラ4の振動子117が強く振動するように、振動子107および振動子117が振動する。
図18は、画面に表示されるアニメーションA3と左右のコントローラ3,4に出力される振動制御信号とのタイミングの一例を示す図である。図18では、時点Tsにおいてプレイヤキャラクタ130が動物オブジェクト140の上に乗り、動物オブジェクト140が移動を開始する場合について示されている。
図18に示されるように、時点TsにおいてアニメーションA3の表示が開始されると、まず、動物オブジェクト140の左前足141が浮いた状態となり、時点T1において、動物オブジェクト140の左前足141が地面オブジェクト135につく。時点T1から時点T2までの間、左前足141が地面オブジェクト135についた状態となる。この左前足141が地面オブジェクト135についている状態では、第1の振動制御信号および第2の振動制御信号が、本体装置2から各コントローラ3,4にそれぞれ出力され、左コントローラ3の振動子107および右コントローラ4の振動子117が振動する。このとき、振動子117よりも振動子107が強く振動する。例えば、左コントローラ3の振動子107は強さ「1」で振動し、右コントローラ4の振動子117は強さ「0.1」で振動する。時点T2において、左前足141が地面オブジェクト135についたことによる振動制御信号の出力が終了する。
次に、時点T3において、動物オブジェクト140の右前足142が地面オブジェクト135につく。例えば、時点T3より前において動物オブジェクト140の右前足142が浮いた状態となり、時点T3において、動物オブジェクト140の右前足142が地面オブジェクト135につく。時点T3から時点T4までの間、右前足142が地面オブジェクト135についた状態となり、この間、第1の振動制御信号および第2の振動制御信号が、本体装置2から各コントローラ3,4にそれぞれ出力される。このとき、左コントローラ3の振動子107よりも右コントローラ4の振動子117が強く振動するように、第1の振動制御信号および第2の振動制御信号が生成される。例えば、振動子107は強さ「0.1」で振動し、振動子117は強さ「1」で振動する。時点T4において、右前足142が地面オブジェクト135についたことによる振動制御信号の出力が終了する。
次に、時点T5において、動物オブジェクト140の左後足144が地面オブジェクト135につく。例えば、時点T5より前に動物オブジェクト140の左後足144が浮いた状態となり、時点T5において、動物オブジェクト140の左後足144が地面オブジェクト135につく。時点T5から時点T6までの間、左後足144が地面オブジェクト135についた状態となり、この間、第1の振動制御信号および第2の振動制御信号が、本体装置2から各コントローラ3,4にそれぞれ出力される。このとき、右コントローラ4の振動子117よりも左コントローラ3の振動子107が強く振動するように、第1の振動制御信号および第2の振動制御信号が生成される。例えば、左コントローラ3の振動子107は強さ「1」で振動し、右コントローラ4の振動子117は強さ「0.1」で振動する。時点T6において、左後足144が地面オブジェクト135についたことによる振動制御信号の出力が終了する。
次に、時点T7において、動物オブジェクト140の右後足143が地面オブジェクト135につく。例えば、時点T7より前に動物オブジェクト140の右後足143が浮いた状態となり、時点T7において、動物オブジェクト140の右後足143が地面オブジェクト135につく。時点T7から時点Teまでの間、右後足143が地面オブジェクト135についた状態となり、この間、第1の振動制御信号および第2の振動制御信号が、本体装置2から各コントローラ3,4にそれぞれ出力される。このとき、左コントローラ3の振動子107よりも右コントローラ4の振動子117が強く振動するように、第1の振動制御信号および第2の振動制御信号が生成される。例えば、左コントローラ3の振動子107は強さ「0.1」で振動し、右コントローラ4の振動子117は強さ「1」で振動する。時点Teにおいて、右後足143が地面オブジェクト135についたことによる振動制御信号の出力が終了する。
なお、図18は単なる一例であり、動物オブジェクト140の各足が地面オブジェクト135につくタイミングや振動が終了するタイミング、振動の強さは適宜変更されてもよい。例えば、2本以上の足が同時に地面オブジェクト135につき、それぞれの足がついたことによる振動が発生してもよい。また、例えば、左前足141が地面オブジェクト135についたことによって左コントローラ3および右コントローラ4が振動している間に、他の足が地面オブジェクト135につくことによって別の振動が発生してもよい。すなわち、1本の足が地面オブジェクト135につくことによって発生する振動が、同時に2つ以上発生してもよい。
複数の振動が同時に発生する場合において、複数の振動が合成されてもよい。例えば、左前足141が地面オブジェクト135につき、それと同時またはその直後に右前足142が地面オブジェクト135につく場合、左前足141が地面オブジェクト135についたことによって発生する振動と、右前足142が地面オブジェクト135についたことによって発生する振動とが合成されてもよい。具体的には、左前足141が地面オブジェクト135についたことによって、左コントローラ3の振動子107は、強さ「1」で振動する(この振動を「振動VL1」と表記する)。一方、右前足142が地面オブジェクト135についたことによって、左コントローラ3の振動子107は、強さ「0.1」で振動する(この振動を「振動VL2」と表記する)。この場合、強さ「1」の振動VL1と強さ「0.1」の振動VL2とが合成されて、左コントローラ3の振動子107が振動されてもよい。
右コントローラ4の振動子117についても同様である。すなわち、左前足141が地面オブジェクト135についたことによって、右コントローラ4の振動子117は、強さ「0.1」で振動する(この振動を「振動VR1」と表記する)。一方、右前足142が地面オブジェクト135についたことによって、右コントローラ4の振動子117は、強さ「1」で振動する(この振動を「振動VR2」と表記する)。この場合、強さ「0.1」の振動VR1と強さ「1」の振動VR2とが合成されて、右コントローラ4の振動子117が振動されてもよい。
複数の振動の合成は、波の重ね合わせの原理にしたがって、行われてもよい。また、複数の振動の合成は、他の方法により行われてもよい。例えば、2つの振動波形V1およびV2を合成する場合において、その瞬間における振動波形V1の振幅値と、振動波形V2の振幅値とを合計することで合成波形の振幅値を求めてもよい。また、その瞬間における振動波形V1の周波数と振動波形V2の周波数とを平均することで合成波形の周波数が求められてもよい。
また、複数の振動の合成は、複数の波形のうち、その瞬間における振幅が大きい方の波形を用いることで、複数の波形が合成されてもよい。例えば、2つの振動波形V1およびV2を合成する場合において、その瞬間における振動波形V1の振幅値が振動波形V2の振幅値よりも大きい場合、合成波形は振動波形V1としてもよい。また、別の瞬間における振動波形V2の振幅値が振動波形V1の振幅値よりも大きい場合、合成波形は振動波形V2としてもよい。
なお、図18では、動物オブジェクト140が4本の足をそれぞれ1回ずつ用いて走るアニメーションが示されている。プレイヤキャラクタ130が動物オブジェクト140の上に乗っている間、図18に示すアニメーションA3が繰り返し表示される。このアニメーションA3が繰り返し表示されることに伴って、上述した各足が地面オブジェクト135につくことによる振動が繰り返し発生する。
また、図18では、動物オブジェクト140の4本の足がそれぞれ地面オブジェクト135につくタイミングで振動が発生することとした。他の実施形態では、4本の足のうちの2本の足(例えば2本の前足)にのみ着目して、当該2本の足がそれぞれ地面オブジェクト135につくタイミングで振動が発生し、他の2本の足(2本の後足)については振動が発生しないようにしてもよい。
なお、本実施形態では、地面オブジェクト135として複数種類の地面オブジェクトが仮想空間に配置されている。動物オブジェクト140が走る地面オブジェクトの種類によって、用いられる振動パターンデータが異なり、振動の波形が異なる。また、地面オブジェクトの種類によって、左右のコントローラの振動の強弱の差が異なる。
図19は、地面オブジェクト135の種類と振動パターンデータとの対応関係の一例を示す図である。図19に示されるように、地面オブジェクト135は、石の地面オブジェクトと、砂の地面オブジェクトと、沼の地面オブジェクトとを含む。
例えば、動物オブジェクト140が石の地面オブジェクト上を走っているときは、振動パターンデータP31を用いて、左コントローラ3の振動子107および右コントローラ4の振動子117の振動が制御される。具体的には、動物オブジェクト140が石の地面オブジェクト上を走っている場合において、動物オブジェクト140の左前足141が石の地面オブジェクトについたとき、右コントローラ4よりも左コントローラ3が強く振動するように、振動子107および振動子117が制御される。例えば、動物オブジェクト140の左前足141が石の地面オブジェクトについたとき、左コントローラ3の振動子107は強さ「1」で振動し、右コントローラ4の振動子117は強さ「0.1」で振動する。
また、動物オブジェクト140が砂の地面オブジェクト上を走っているときは、振動パターンデータP32を用いて左右の振動子107および振動子117が制御されるとともに、左右の何れの足が地面オブジェクトについたかによって左右の振動子の振動の強さが調整される。例えば、動物オブジェクト140の左前足141が砂の地面オブジェクトについたとき、左コントローラ3の振動子107は強さ「1」で振動し、右コントローラ4の振動子117は強さ「0.5」で振動してもよい。
また、動物オブジェクト140が沼の地面オブジェクト上を走っているときは、振動パターンデータP33を用いて左右の振動子107および振動子117が制御されるとともに、左右の何れの足が地面オブジェクトについたかによって左右の振動子の振動の強さが調整される。例えば、動物オブジェクト140の左前足141が沼の地面オブジェクトについたとき、左コントローラ3の振動子107は強さ「1」で振動し、右コントローラ4の振動子117は強さ「0.65」で振動してもよい。
このように地面オブジェクト135の種類によって振動パターンデータを異ならせると共に、左右の振動の強さの差を異ならせることにより、地面の種類に応じた振動を発生させることができる。例えば、動物オブジェクト140が石の地面オブジェクト上を走っているときは、比較的強く、周波数が高い振動が発生する。また、例えば、動物オブジェクト140が砂の地面オブジェクト上を走っているときは、石の地面オブジェクトのときよりも弱く、周波数が比較的低い振動となる。また、動物オブジェクト140が沼の地面オブジェクト上を走っているときは、砂の地面オブジェクトのときよりも弱く、周波数の低い振動となり、滑らかな振動となる。
このような制御が行われることで、プレイヤは、左右の手で感じる振動によって、プレイヤキャラクタ130(動物オブジェクト140)がどの地面オブジェクト上を走っているかを認識することができると共に、どの足が地面オブジェクトについたかを認識することができる。
(第4実施例)
次に、第4実施例に係るゲームのシーンについて説明する。第4実施例では、仮想空間に振動源となる振動オブジェクトが配置される。例えば、振動オブジェクトは、仮想空間内を転がる岩オブジェクトであってもよい。振動オブジェクトが仮想空間内を転がる(移動する)ことによって、振動が発生する。第4実施例では、仮想空間を移動する振動オブジェクトと、プレイヤキャラクタまたは仮想カメラとの位置関係に応じて、左右のコントローラ3,4が振動する。
図20は、振動オブジェクト150と、プレイヤキャラクタ130と、仮想カメラ151とが配置された仮想空間を上方から見たときの一例を示す図である。
図20において、破線155は仮想カメラ151の画角の左端を示し、破線156は仮想カメラ151の画角の右端を示す。仮想カメラ151を用いて破線155および破線156によって囲まれる仮想空間の画像が生成されて、ディスプレイ12に表示される。また、XcYcZc座標系は、仮想カメラ151に固定の座標系である。Zc軸は、仮想カメラ151の撮像方向(視線方向)の軸であり、Xc軸は、仮想カメラ151の右方向の軸であり、Yc軸は、仮想カメラ151の上方向の軸である。
図20に示されるように、仮想空間には振動オブジェクト150と、プレイヤキャラクタ130とが配置される。振動オブジェクト150は、例えば、図20の矢印157で示される軌道に沿って移動する。この場合、振動オブジェクト150は、仮想カメラ151から見て仮想空間の奥方向から手前方向に向かって移動する。振動オブジェクト150が仮想空間内を移動する場合、振動パターンデータP4に基づいて、左コントローラ3の振動子107および右コントローラ4の振動子117が振動される。振動子107および振動子117の振動の強さは、振動オブジェクト150と、プレイヤキャラクタ130および/または仮想カメラ151との位置関係に応じて、設定される。
具体的には、振動オブジェクト150とプレイヤキャラクタ130との距離に応じて、左コントローラ3の振動子107および右コントローラ4の振動子117を振動させる際の「基準となる振動の強さ」が決定される。振動オブジェクト150とプレイヤキャラクタ130との距離が短いほど、基準となる振動の強さは大きくなる。また、仮想カメラ151又はプレイヤキャラクタ130から見た振動オブジェクト150の方向に応じて、振動子107および振動子117の振動の強さのバランスが決定される。
具体的には、図20に示されるように、プレイヤキャラクタ130の中心CPを通り、かつ、仮想カメラ151の左右方向(Xc軸方向)に平行な直線152が設定される。当該直線152上には、プレイヤキャラクタ130の左側に参照点Lが設定され、プレイヤキャラクタ130の右側に参照点Rが設定される。左コントローラ3の振動子107の振動の強さは、プレイヤキャラクタ130の中心CPから参照点Lに向かうベクトルと、中心CPから振動オブジェクト150に向かうベクトルとがなす角θLに基づいて決定される。
例えば、角θLに基づいて減衰係数CL(例えば、0〜1の範囲)が算出される。例えば、減衰係数CLは、角θLが0°〜90°の範囲では「1」に設定され、角θLが90°を超えると「1」より小さくなり、角θLが180°のときには「0」に設定されてもよい。また、例えば、角θLが0°〜180°まで変化するにしたがって、減衰係数CLが1〜0まで線形的に変化してもよい。そして、振動オブジェクト150とプレイヤキャラクタ130との距離に応じて決定された「基準となる振動の強さ」に、角θLに基づいて算出された減衰係数CLを乗じることにより、振動子107の振動の強さが決定される。
右コントローラ4の振動子117についても同様である。右コントローラ4の振動子117の振動の強さは、プレイヤキャラクタ130の中心CPから参照点Rに向かうベクトルと、中心CPから振動オブジェクト150に向かうベクトルとがなす角θRに基づいて決定される。角θRに基づいて減衰係数CR(例えば、0〜1の範囲)が算出され、振動オブジェクト150とプレイヤキャラクタ130との距離に応じて決定された「基準となる振動の強さ」に、角θRに基づいて算出された減衰係数CRを乗じることにより、振動子117の振動の強さが決定される。
例えば、角θLと角θRとが等しい場合(すなわち、90°の場合)、振動子107および振動子117の振動の強さは同じになる。また、角θLが90°より小さく、角θRが90°よりも大きい場合、振動子107の方が振動子117よりも強く振動する。
図20に示される例では、振動オブジェクト150は、仮想カメラ151(プレイヤキャラクタ130も同様)の左側から右側に向かって、仮想カメラ151に近づくように移動する。例えば、振動オブジェクト150が位置VP1に存在するときには、振動オブジェクト150とプレイヤキャラクタ130との距離が比較的長いため、「基準となる振動の強さ」は比較的弱くなる。また、振動オブジェクト150が位置VP1に存在するときには、振動オブジェクト150が仮想カメラ151から見て左側に存在するため、左コントローラ3の振動子107の方が右コントローラ4の振動子117よりも強く振動する。
振動オブジェクト150が位置VP2まで移動した場合、振動オブジェクト150は仮想カメラ151から見て正面に位置するため、振動子107および振動子117の振動の強さは等しくなる。また、振動オブジェクト150とプレイヤキャラクタ130との距離は比較的短いため、「基準となる振動の強さ」は比較的強くなる。
そして、振動オブジェクト150が位置VP3まで移動した場合、振動オブジェクト150は仮想カメラ151から見て右側に位置するため、振動子107よりも振動子117の方が強く振動する。このとき、振動オブジェクト150とプレイヤキャラクタ130との距離は比較的短いため、「基準となる振動の強さ」は比較的強くなる。
このように左右の振動子が制御されることにより、プレイヤは、振動オブジェクト150が仮想カメラ151に近づくにつれて強い振動を感じるようになる。また、振動オブジェクト150が画面の左から右に移動するに伴って(振動オブジェクト150がプレイヤキャラクタ130の左側から右側に向かって移動するに伴って)、強い振動が左手から右手に移動するように感じる。
図21は、仮想カメラ151がプレイヤキャラクタ130の周りに回転したときの振動オブジェクト150と、プレイヤキャラクタ130と、仮想カメラ151とが配置された仮想空間を上方から見たときの一例を示す図である。
本実施形態では、プレイヤの操作に応じて、仮想カメラ151がプレイヤキャラクタ130の周りに回転する。図21では、仮想カメラ151がプレイヤキャラクタ130の周りに回転していることを除いて、図20と同じ状態である。
図21に示されるように、仮想カメラ151がプレイヤキャラクタ130の周りに回転すると、仮想カメラ151の向き(Zc軸)が変化するとともに、Xc軸に平行な直線152も回転する。図21では、振動オブジェクト150が位置VP1に存在するとき、仮想カメラ151の視線上に振動オブジェクト150が存在する。このとき、角θLおよび角θRは90°となり、振動子107および振動子117は同じ強さで振動する。
振動オブジェクト150が位置VP2まで移動した場合、振動子107よりも振動子117の方が若干強く振動し、かつ、「基準となる振動の強さ」は、振動オブジェクト150が位置VP1に存在するときよりも強くなる。そして、振動オブジェクト150が位置VP3まで移動した場合、振動子107よりも振動子117の方が強く振動し、その強さの差は、振動オブジェクト150が位置VP2に存在するときよりも大きくなる。
したがって、図21に示す位置関係の場合、プレイヤは、振動オブジェクト150が仮想カメラ151に近づくにつれて強い振動を感じるようになり、振動オブジェクト150がディスプレイ12の画面の中央から右に移動するに伴って(振動オブジェクト150がプレイヤキャラクタ130の正面から右側に向かって移動するに伴って)、強い振動が両手から右手に移動するように感じる。
なお、振動オブジェクト150と、仮想カメラ151又はプレイヤキャラクタ130との位置関係に応じて、左右の振動子107および117の振動の強さが変化されるのであれば、上述した方法とは異なる他の方法により振動子107および117の振動の強さが決定されてもよい。例えば、上記参照点Rおよび参照点Lは図20および図21に示した位置とは異なる位置に配置されてもよい。
以上のように、第4実施例では、振動オブジェクト150と、仮想カメラ151又はプレイヤキャラクタ130との位置関係に基づいて左右の振動子107および117が制御される。
具体的には、振動オブジェクト150とプレイヤキャラクタ130との距離に基づいて、「基準となる振動の強さ」が設定される。また、プレイヤキャラクタ130から振動オブジェクト150への方向と、仮想カメラ151の向きとに応じて、左右のコントローラ3,4の振動の強さが設定される。
このため、振動オブジェクト150がプレイヤキャラクタ130に近いほど、左右のコントローラ3,4を強く振動する。例えば、振動オブジェクト150が画面の奥方向から手前方向に移動するにしたがって振動の強さが強くなるため、プレイヤは、振動源が近づいていることを認識することができる。
また、振動オブジェクト150が画面上の左側に表示される場合には、左コントローラ3がより強く振動し、振動オブジェクト150が画面上の右側に表示される場合には、右コントローラ4がより強く振動する。また、振動オブジェクト150がプレイヤキャラクタ130に対して左側に表示される場合には、左コントローラ3がより強く振動し、振動オブジェクト150がプレイヤキャラクタ130に対して右側に表示される場合には、右コントローラ4がより強く振動する。これにより、プレイヤは、左右のコントローラの振動により、振動オブジェクト150が仮想カメラから見て左右どちらにあるのかを認識することができると共に、プレイヤキャラクタ130から見て振動オブジェクト150が左右どちらにあるのかを認識することができる。
例えば、振動オブジェクト150が画面の左から右に移動することに応じて、左コントローラ3が強く振動する状態から右コントローラ4が強く振動する状態に変化するため、プレイヤは、振動源が画面の左から右に移動していることを認識することができる。また、例えば、振動オブジェクト150がプレイヤキャラクタ130よりも左側から右側に移動することに応じて、左コントローラ3が強く振動する状態から右コントローラ4が強く振動する状態に変化するため、プレイヤは、振動源がプレイヤキャラクタ130の左側から右側に移動していることを認識することができる。
以上のように、第4実施例では、振動オブジェクト150と、仮想カメラ151又はプレイヤキャラクタ130との位置関係に基づいて左右の振動子107および117が制御されるため、振動オブジェクト150の表示上の位置に応じた振動と、プレイヤキャラクタ130から見た振動オブジェクト150の位置に応じた振動とをプレイヤに感じさせることができる。
また、本実施形態では、振動オブジェクト150が仮想カメラ151の撮像範囲にない場合でも、仮想カメラ151またはプレイヤキャラクタ130から見た振動オブジェクト150の方向に基づいて、振動子107および117を振動させる。これにより、プレイヤは、振動オブジェクト150を見なくても、振動を感じることで振動オブジェクト150が仮想カメラ151またはプレイヤキャラクタ130から見てどの方向にあるのかを知ることができる。
なお、上記第1実施例〜第4実施例で示した振動は、同時に発生する場合がある。例えば、第4実施例で示した振動オブジェクト150に基づく振動は、上記第2実施例で示した振動と同時に発生する場合がある。例えば、図15に示されるように、プレイヤキャラクタ130が壁オブジェクト136にぶら下がりながら左右方向に移動しているときに、第4実施例で示した振動オブジェクト150がプレイヤキャラクタ130に向かって移動する場合がある。この場合、第2実施例で示したプレイヤキャラクタ130の右手をつくときに発生する振動と、振動オブジェクト150がプレイヤキャラクタ130に向かって移動するときに発生する振動とが合成される。
また、例えば、図10に示されるようにプレイヤキャラクタ130が右手を壁オブジェクト136につきながら下方に落下しているときに、第4実施例で示した振動オブジェクト150がプレイヤキャラクタ130に向かって移動する場合があってもよい。この場合、第1実施例で示した振動と、第4実施例で示した振動とが合成されてもよい。また、図16に示されるようにプレイヤキャラクタ130が動物オブジェクト140に乗っているときに、第4実施例で示した振動オブジェクト150がプレイヤキャラクタ130に向かって移動する場合があってもよい。この場合、第3実施例で示した振動と、第4実施例で示した振動とが合成されてもよい。
複数の振動波形の合成は、上述したように、波の重ね合わせの原理にしたがって行われてもよい。また、各振動波形の振幅を合計するとともに、各振動波形の周波数の平均を算出することにより、合成波形の振幅および周波数が算出されてもよい。また、複数の振動波形の合成は、その瞬間における振幅が大きい方の波形を用いることで、行われてもよい。
なお、複数の振動波形の合成は、本体装置2において行われてもよいし、各コントローラ3,4において行われてもよい。例えば、本体装置2が複数の振動波形を合成した合成波形を示す振動制御信号を生成し、生成した振動制御信号を各コントローラ3,4に送信してもよい。また、本体装置2が複数の振動波形に応じた振動制御信号をそれぞれ生成・出力し、各コントローラ3,4が受信した振動制御信号を合成してもよい。
(処理の詳細)
次に、ゲームシステム1の本体装置2において行われる処理の詳細について説明する。まず、本体装置2に記憶されるデータについて説明した後、本体装置2において行われる情報処理について説明する。図22は、本体装置2に記憶されるデータの一例を示す図である。
図22に示されるように、本体装置2には、ゲームプログラムD101と、操作データD102と、キャラクタデータD103と、仮想カメラデータD104と、オブジェクトデータD105と、振動パターンデータD106と、アニメーションデータD107と、左振動制御信号D108と、右振動制御信号D109とが記憶される。なお、本体装置2には、図22に示す他にも様々なデータやプログラムが記憶される。
ゲームプログラムD101は、上述した第1実施例〜第4実施例を含むゲームを実行するためのプログラムである。
操作データD102は、左コントローラ3および右コントローラ4に対して行われた操作に応じたデータであり、左コントローラ3および右コントローラ4から送信される。本実施形態では、本体装置2と、左コントローラ3および右コントローラ4とは、所定の時間間隔(例えば、1/200秒間隔)で通信を行う。当該通信において、左コントローラ3および右コントローラ4から本体装置2に操作データが送信される。また、当該通信において、左振動制御信号D108および右振動制御信号D109が、本体装置2から左コントローラ3および右コントローラ4にそれぞれ送信される。
キャラクタデータD103は、プレイヤキャラクタ130の位置、向き、移動速度、移動方向等に関する情報を含むデータである。
仮想カメラデータD104は、仮想空間に配置される仮想カメラの位置および向きに関する情報を含むデータである。
オブジェクトデータD105は、仮想空間に配置される各オブジェクト(例えば、地面オブジェクト135、壁オブジェクト136、振動オブジェクト150)に関する情報を含む。第1実施例〜第4実施例で示したゲームのシーンに応じて、仮想空間に配置されるオブジェクトの種類および数が異なる。例えば、第1実施例又は第2実施例に示すゲームのシーンが実行される場合、地面オブジェクト135および壁オブジェクト136が仮想空間に配置され、これらのオブジェクトに関する情報(位置、形状、大きさ、種類等に関する情報)がオブジェクトデータD105として記憶される。また、第3実施例に示すゲームのシーンが実行される場合、種類の異なる複数の地面オブジェクト135が仮想空間に配置される。また、第4実施例に示すゲームのシーンが実行される場合、仮想空間には振動オブジェクト150が配置される。この場合、オブジェクトデータD105として、振動オブジェクト150の位置、形状、大きさ、種類、移動速度、移動方向等に関する情報が記憶される。
振動パターンデータD106は、第1実施例〜第4実施例で示したアニメーションの表示と共に発生する振動の波形を示すデータである。例えば、第1実施例で示したゲームのシーンが実行される場合には、振動パターンデータD106として、振動パターンデータP1が記憶される。また、第2実施例で示したゲームのシーンが実行される場合には、振動パターンデータD106として、振動パターンデータP2が記憶される。また、第3実施例で示したゲームのシーンが実行される場合には、振動パターンデータD106として、振動パターンデータP31〜P33が記憶される。また、第4実施例で示したゲームのシーンが実行される場合には、振動パターンデータD106として、振動パターンデータP4が記憶される。
アニメーションデータD107は、第1実施例〜第3実施例で示したアニメーションを表示するためのデータである。例えば、第1実施例で示したゲームのシーンが実行される場合には、アニメーションA1が、アニメーションデータD107として記憶される。また、第2実施例で示したゲームのシーンが実行される場合には、アニメーションA2が、アニメーションデータD107として記憶される。第3実施例で示したゲームのシーンが実行される場合には、アニメーションA3が、アニメーションデータD107として記憶される。
左振動制御信号D108は、左コントローラ3の振動子107を振動させるための第1の振動制御信号を示すデータであり、振動の周波数および振幅を含む。右振動制御信号D109は、右コントローラ4の振動子117を振動させるための第2の振動制御信号を示すデータであり、振動の周波数および振幅を含む。
次に、本体装置2において行われる処理の詳細について説明する。まず、第1実施例に係るゲームのシーンが実行されるときの処理について説明する。
(第1実施例の処理の詳細)
図23は、第1実施例に係るゲームのシーンが実行されるときの本体装置2において行われる情報処理の詳細を示すフローチャートである。図23に示す処理は、本体装置2のプロセッサ81がゲームプログラムD101(情報処理プログラム)を実行することにより行われる。本体装置2のプロセッサ81は、図23に示す処理を、例えば1/60秒(1フレーム時間という)間隔で繰り返し実行する。
図23に示されるように、本体装置2のプロセッサ81(以下、単に「本体装置2」)は、左コントローラ3および右コントローラ4から送信された操作データを取得する(ステップS1)。具体的には、左コントローラ3および右コントローラ4は、所定の時間間隔(例えば、1/200秒間隔)で操作に応じた操作データを本体装置2に送信する。本体装置2は、左コントローラ3および右コントローラ4から送信された操作データをDRAM85に一時的に記憶する。本体装置2は、ステップS1において、DRAM85に記憶された操作データを取得する。
次に、本体装置2は、取得した操作データに基づいて、プレイヤキャラクタ130を仮想空間内で動作させる(ステップS2)。例えば、左コントローラ3のスティック32が操作された場合、本体装置2は、仮想空間においてプレイヤキャラクタ130をスティック32の操作方向に応じた方向に移動させ、プレイヤキャラクタ130の位置および向きを更新する。また、例えば、右コントローラ4の操作ボタン(例えば、Aボタン53)が押下された場合、本体装置2は、仮想空間においてプレイヤキャラクタ130をジャンプさせ、プレイヤキャラクタ130の位置および向きを更新する。本体装置2は、更新したプレイヤキャラクタ130の位置および向きを、キャラクタデータD103として記憶する。
ステップS2に続いて、本体装置2は、取得した操作データに基づいて、仮想カメラを制御する(ステップS3)。例えば、右コントローラ4のスティック52が操作された場合、本体装置2は、スティック52の操作方向に応じて、プレイヤキャラクタ130の回りに仮想カメラを移動させ、仮想カメラの位置および向きを更新する。本体装置2は、仮想カメラの位置および向きを、仮想カメラデータD104として記憶する。例えば、仮想カメラは、初期状態では、プレイヤキャラクタ130の後方に位置し、スティック52の操作に応じて、プレイヤキャラクタ130の右後方に移動したり、プレイヤキャラクタ130の左後方に移動したりする。
ステップS3に続いて、本体装置2は、プレイヤキャラクタ130が壁オブジェクト136に手をついて仮想空間を落下する動作が行われているか否かを判定する(ステップS4)。例えば、プレイヤキャラクタ130が壁オブジェクト136の所定範囲にいるときに、ステップS2の処理において、プレイヤキャラクタ130が壁オブジェクト136に向かってジャンプする動作が行われた場合、ステップS4において「Yes」と判定される。また、今回の処理ループが行われる前に、プレイヤキャラクタ130が壁オブジェクト136に手をついて仮想空間を落下する動作が行われており、未だプレイヤキャラクタ130が地面オブジェクト135に到達していない場合も、ステップS4において「Yes」と判定される。
プレイヤキャラクタ130が壁オブジェクト136に手をついて仮想空間を落下する動作が行われていると判定した場合(ステップS4:YES)、本体装置2は、仮想カメラがプレイヤキャラクタ130の右後方に位置するか否かを判定する(ステップS5)。
仮想カメラがプレイヤキャラクタ130の右後方に位置すると判定した場合(ステップS5:YES)、本体装置2は、アニメーションA1(右)を再生する(ステップS6)。第1実施例では、プレイヤキャラクタ130が壁オブジェクト136に右手をついて仮想空間を落下する動作をするアニメーションA1(右)と、プレイヤキャラクタ130が壁オブジェクト136に左手をついて仮想空間を落下する動作をするアニメーションA1(左)とが予め記憶される。ステップS6においては、本体装置2は、予め記憶されたアニメーションA1(右)を再生する。なお、本実施形態では、アニメーションA1が再生されている間(すなわち、プレイヤキャラクタ130が壁オブジェクト136に手をついて落下している間)、ステップS3の仮想カメラの制御が停止される。すなわち、プレイヤキャラクタ130が壁オブジェクト136に手をついて落下している間は、仮想カメラは回転せず、プレイヤキャラクタ130が地面オブジェクト135に到達するまで、同じアニメーションA1が再生される。つまり、アニメーションA1(右)の再生が開始されると、プレイヤキャラクタ130が地面オブジェクト135に到達するまで、ステップS4およびステップS5において「YES」と判定され、アニメーションA1(右)が再生される。これにより、図11に示されるように、プレイヤキャラクタ130が壁オブジェクト136に左手(プレイヤから見て右側の手)をついて落下している様子が表示される。
ステップS6に続いて、本体装置2は、右コントローラ4が左コントローラ3よりも強く振動するように、左コントローラ3の振動子107および右コントローラ4の振動子117を振動させる(ステップS7)。具体的には、本体装置2は、振動パターンデータP1に基づいて、振動子107の振動の周波数および振幅を算出すると共に、振動子117の振動の周波数および振幅を算出する。例えば、本体装置2は、振動パターンデータP1に基づいて周波数および振幅を読み取り、読み取った振幅に「0.4」をかけることで振動子107の振動の振幅を算出する。また、本体装置2は、振動パターンデータP1に基づいて周波数および振幅を読み取り、読み取った振幅に「1」をかけることで振動子117の振動の振幅を算出する。
一方、仮想カメラがプレイヤキャラクタ130の右後方に位置すると判定なかった場合(ステップS5:NO)、本体装置2は、アニメーションA1(左)を再生する(ステップS8)。アニメーションA1(左)の再生が開始されると、プレイヤキャラクタ130が地面オブジェクト135に到達するまで、ステップS4において「YES」と判定され、かつ、ステップS5において「NO」と判定される。これにより、図10に示されるように、プレイヤキャラクタ130が壁オブジェクト136に右手(プレイヤから見て左側の手)をついて落下している様子が表示される。
ステップS8に続いて、本体装置2は、左コントローラ3が右コントローラ4よりも強く振動するように、左コントローラ3の振動子107および右コントローラ4の振動子117を振動させる(ステップS7)。具体的には、本体装置2は、振動パターンデータP1に基づいて、振動子107の振動の周波数および振幅を算出すると共に、振動子117の振動の周波数および振幅を算出する。例えば、本体装置2は、振動パターンデータP1に基づいて周波数および振幅を読み取り、読み取った振幅に「0.4」をかけることで振動子117の振動の振幅を算出する。また、本体装置2は、振動パターンデータP1に基づいて周波数および振幅を読み取り、読み取った振幅に「1」をかけることで振動子107の振動の振幅を算出する。
ステップS7の処理を実行した場合、又は、ステップS9の処理を実行した場合、本体装置2は、ステップS7又はステップS9で算出した振動子107の周波数および振幅を含む左振動制御信号D108を生成すると共に、ステップS7又はステップS9で算出した振動子117の周波数および振幅を含む右振動制御信号D109を生成する(ステップS10)。ステップS11で生成された左振動制御信号D108および右振動制御信号D109は、本体装置2から左コントローラ3および右コントローラ4にそれぞれ送信される。
ステップS10の処理を実行した場合、又は、ステップS4でNOと判定した場合、本体装置2は、仮想カメラを用いて仮想空間の画像を生成し、生成した画像をディスプレイ12に出力する(ステップS11)。以上で、図23の説明を終了する。
(第2実施例の処理の詳細)
次に、第2実施例に係るゲームのシーンが実行されるときの処理の詳細について説明する。図24は、第2実施例に係るゲームのシーンが実行されるときの本体装置2において行われる情報処理の詳細を示すフローチャートである。なお、図24に示す処理は、例えば1/60秒(1フレーム時間という)間隔で繰り返し実行される。また、図24において、図23と同様の処理については同じ符号を付して説明を省略する。
図24に示されるように、本体装置2は、ステップS1〜ステップS3の処理の後、プレイヤキャラクタ130が壁オブジェクト136にぶら下がって移動中か否かを判定する(ステップS21)。具体的には、ステップS2の処理の結果、プレイヤキャラクタ130が壁オブジェクト136の上端部にぶら下がった状態となった場合において、左コントローラ3のスティック32を用いて左右方向が入力された場合、ステップS4において「Yes」と判定される。
プレイヤキャラクタ130が壁オブジェクト136にぶら下がって移動中と判定した場合(ステップS21:YES)、本体装置2は、アニメーションA2を再生する(ステップS22)。ここで、スティック32の右方向が入力された場合は、アニメーションA2(右)が再生され、スティック32の左方向が入力された場合は、アニメーションA2(左)が再生される。
ステップS22に続いて、本体装置2は、プレイヤキャラクタ130の右手が壁オブジェクト136の上端部についている状態か否かを判定する(ステップS23)。具体的には、本体装置2は、ステップS22においてアニメーションA2の再生が開始されてからのフレーム数に基づいて、プレイヤキャラクタ130の右手がついている状態か否かを判定する。例えば、本体装置2は、所定のフレーム期間(ステップS22においてアニメーションA2の再生が開始されてから、例えば5フレーム目〜10フレーム目の期間)か否かを判定する。
ステップS23で「YES」と判定した場合、本体装置2は、右コントローラ4が左コントローラ3よりも強く振動するように、左コントローラ3の振動子107および右コントローラ4の振動子117を振動させる(ステップS24)。具体的には、本体装置2は、振動パターンデータP2に基づいて、振動子107の振動の周波数および振幅を算出すると共に、振動子117の振動の周波数および振幅を算出する。例えば、本体装置2は、振動パターンデータP2に基づいて周波数および振幅を読み取り、読み取った振幅に「0.3」をかけることで振動子107の振動の振幅を算出する。また、本体装置2は、振動パターンデータP2に基づいて周波数および振幅を読み取り、読み取った振幅に「1」をかけることで振動子117の振動の振幅を算出する。
ステップS23で「NO」と判定した場合、本体装置2は、プレイヤキャラクタ130の左手が壁オブジェクト136の上端部についている状態か否かを判定する(ステップS25)。具体的には、本体装置2は、ステップS22においてアニメーションA2の再生が開始されてからのフレーム数に基づいて、プレイヤキャラクタ130の左手がついている状態か否かを判定する。
ステップS25で「YES」と判定した場合、本体装置2は、左コントローラ3が右コントローラ4よりも強く振動するように、左コントローラ3の振動子107および右コントローラ4の振動子117を振動させる(ステップS26)。本体装置2は、振動パターンデータP2に基づいて、振動子107の振動の周波数および振幅を算出すると共に、振動子117の振動の周波数および振幅を算出する。例えば、本体装置2は、振動パターンデータP2に基づいて周波数および振幅を読み取り、読み取った振幅に「0.3」をかけることで振動子117の振動の振幅を算出する。また、本体装置2は、振動パターンデータP2に基づいて周波数および振幅を読み取り、読み取った振幅に「1」をかけることで振動子107の振動の振幅を算出する。
ステップS24の処理を実行した場合、又は、ステップS26の処理を実行した場合、本体装置2は、ステップS7又はステップS9の算出結果に基づいて、左振動制御信号D108および右振動制御信号D109を生成する(ステップS10)。生成された左振動制御信号D108および右振動制御信号D109は、本体装置2から左コントローラ3および右コントローラ4にそれぞれ送信される。
ステップS10の処理を実行した場合、ステップS21でNOと判定した場合、又は、ステップS25でNOと判定した場合、本体装置2は、仮想カメラを用いて仮想空間の画像を生成し、生成した画像を出力する(ステップS11)。以上で、図24の説明を終了する。
(第3実施例の処理の詳細)
次に、第3実施例に係るゲームのシーンが実行されるときの処理の詳細について説明する。図25は、第3実施例に係るゲームのシーンが実行されるときの本体装置2において行われる情報処理の詳細を示すフローチャートである。なお、図25に示す処理は、例えば1/60秒(1フレーム時間という)間隔で繰り返し実行される。また、図25において、図23と同様の処理については同じ符号を付して説明を省略する。
図25に示されるように、本体装置2は、ステップS1〜ステップS3の処理の後、プレイヤキャラクタ130が動物オブジェクト140に乗って移動中か否かを判定する(ステップS31)。具体的には、ステップS2の処理の結果、プレイヤキャラクタ130が動物オブジェクト140の上に乗った場合、ステップS31において「Yes」と判定される。なお、プレイヤキャラクタ130が動物オブジェクト140に乗った場合、所定の条件が満たされるまで(例えば、プレイヤによって動物オブジェクト140から降りる操作が行われるまで)、プレイヤキャラクタ130は動物オブジェクト140に乗ったままとなる。この状態では、ステップS2において、操作データに基づいて、動物オブジェクト140の移動方向が変化されたり、動物オブジェクト140の速度が変化されたりする。
プレイヤキャラクタ130が動物オブジェクト140に乗って移動中と判定した場合(ステップS31:YES)、本体装置2は、アニメーションA3を再生する(ステップS32)。ここで、プレイヤキャラクタ130が動物オブジェクト140に乗った状態が維持されている間、ステップS31において「YES」と判定される。
ステップS32に続いて、本体装置2は、振動パターンデータを選択する(ステップS33)。具体的には、本体装置2は、動物オブジェクト140の位置に基づいて、動物オブジェクト140が、仮想空間に配置された複数の地面オブジェクト135(石の地面オブジェクト、砂の地面オブジェクト、沼の地面オブジェクト)のうちの何れの上に位置するかを判定する。そして、本体装置2は、判定した地面オブジェクト135に対応する振動パターンデータ(振動パターンデータP31〜P33のうちの何れか)を選択する。
次に、本体装置2は、動物オブジェクト140の右足(右前足または右後足)が地面オブジェクト135についた状態か否かを判定する(ステップS34)。具体的には、本体装置2は、ステップS32においてアニメーションA3の再生が開始されてからのフレーム数に基づいて、動物オブジェクト140の右足が地面オブジェクト135についたか否かを判定する。例えば、本体装置2は、所定のフレーム期間(ステップS32においてアニメーションA3の再生が開始されてから、例えば5フレーム目〜10フレーム目の期間)か否かを判定する。
ステップS34で「YES」と判定した場合、本体装置2は、右コントローラ4が左コントローラ3よりも強く振動するように、左コントローラ3の振動子107および右コントローラ4の振動子117を振動させる(ステップS35)。具体的には、本体装置2は、ステップS33で選択した振動パターンデータに基づいて、振動子107の振動の周波数および振幅を算出すると共に、振動子117の振動の周波数および振幅を算出する。例えば、本体装置2は、ステップS33で振動パターンデータP31を選択した場合、振動パターンデータP31に基づいて周波数および振幅を読み取り、読み取った振幅に「0.1」をかけることで振動子107の振動の振幅を算出する。また、本体装置2は、ステップS33で選択した振動パターンデータP31に基づいて周波数および振幅を読み取り、読み取った振幅に「1」をかけることで振動子117の振動の振幅を算出する。
また、例えば、本体装置2は、ステップS33で振動パターンデータP32を選択した場合、振動パターンデータP32に基づいて周波数および振幅を読み取り、読み取った振幅に「0.5」をかけることで振動子107の振動の振幅を算出する。また、本体装置2は、ステップS33で選択した振動パターンデータP32に基づいて周波数および振幅を読み取り、読み取った振幅に「1」をかけることで振動子117の振動の振幅を算出する。
ステップS34で「NO」と判定した場合、本体装置2は、動物オブジェクト140の左足(左前足または左後足)が地面オブジェクト135についた状態か否かを判定する(ステップS36)。ステップS34と同様に、本体装置2は、ステップS32においてアニメーションA3の再生が開始されてからのフレーム数に基づいて、ステップS36の判定を行う。
ステップS36で「YES」と判定した場合、本体装置2は、左コントローラ3が右コントローラ4よりも強く振動するように、左コントローラ3の振動子107および右コントローラ4の振動子117を振動させる(ステップS37)。具体的には、本体装置2は、ステップS33で選択した振動パターンデータに基づいて、振動子107の振動の周波数および振幅を算出すると共に、振動子117の振動の周波数および振幅を算出する。例えば、本体装置2は、ステップS33で振動パターンデータP31選択した場合、振動パターンデータP31に基づいて周波数および振幅を読み取り、読み取った振幅に「0.1」をかけることで振動子117の振動の振幅を算出する。また、本体装置2は、ステップS33で選択した振動パターンデータP31に基づいて周波数および振幅を読み取り、読み取った振幅に「1」をかけることで振動子107の振動の振幅を算出する。
また、例えば、本体装置2は、ステップS33で振動パターンデータP32選択した場合、振動パターンデータP32に基づいて周波数および振幅を読み取り、読み取った振幅に「0.5」をかけることで振動子117の振動の振幅を算出する。また、本体装置2は、ステップS33で選択した振動パターンデータP32に基づいて周波数および振幅を読み取り、読み取った振幅に「1」をかけることで振動子107の振動の振幅を算出する。
ステップS35の処理を実行した場合、又は、ステップS37の処理を実行した場合、本体装置2は、ステップS35の処理又はステップS37の処理の結果に基づいて、左振動制御信号D108および右振動制御信号D109を生成する(ステップS10)。生成された左振動制御信号D108および右振動制御信号D109は、本体装置2から左コントローラ3および右コントローラ4にそれぞれ送信される。
ステップS10の処理を実行した場合、ステップS31でNOと判定した場合、又は、ステップS36でNOと判定した場合、本体装置2は、仮想カメラを用いて仮想空間の画像を生成し、生成した画像を出力する(ステップS11)。以上で、図25の説明を終了する。
(第4実施例の処理の詳細)
次に、第4実施例に係るゲームのシーンが実行されるときの処理の詳細について説明する。図26は、第4実施例に係るゲームのシーンが実行されるときの本体装置2において行われる情報処理の詳細を示すフローチャートである。なお、図26に示す処理は、例えば1/60秒(1フレーム時間という)間隔で繰り返し実行される。また、図26において、図23と同様の処理については同じ符号を付して説明を省略する。
図26に示されるように、本体装置2は、ステップS1〜ステップS3の処理の後、振動オブジェクト150を仮想空間内で移動させる(ステップS41)。次に、本体装置2は、振動オブジェクト150とプレイヤキャラクタ130との距離を算出する(ステップS42)。
続いて、本体装置2は、角θLおよび角θR(図20および図21参照)を算出する(ステップS43)。具体的には、本体装置2は、プレイヤキャラクタ130および参照点Lを結ぶ直線152を算出すると共に、プレイヤキャラクタ130および振動オブジェクト150を結ぶ直線153を算出する。そして、本体装置2は、直線152と直線153とがなす角θLおよびθRを算出する。
続いて、本体装置2は、ステップS42で算出した距離に基づいて、基準となる振動の強さを算出する(ステップS44)。具体的には、本体装置2は、振動パターンデータP4に基づいて、振動の振幅を算出する。そして、本体装置2は、振動パターンデータP4に基づいて算出した振幅に、ステップS42で算出した距離に応じて定まる係数を乗じることにより、基準となる振動の強さを算出する。また、本体装置2は、振動パターンデータP4に基づいて、振動の周波数を算出する。
次に、本体装置2は、左コントローラ3の振動子107の振動の強さを算出する(ステップS45)。例えば、本体装置2は、ステップS44で算出した基準となる振動の強さに、角θLに応じた係数(0〜1の範囲)を乗じることにより、左コントローラ3の振動子107の振動の強さを算出する。
続いて、本体装置2は、右コントローラ4の振動子117の振動の強さを算出する(ステップS46)。例えば、本体装置2は、ステップS44で算出した基準となる振動の強さに、角θRに応じた係数(0〜1の範囲)を乗じることにより、右コントローラ4の振動子117の振動の強さを算出する。
次に、本体装置2は、ステップS44で算出した周波数とステップS45で算出した左コントローラ3の振動の強さとに基づいて、左振動制御信号D108を生成する(ステップS10)。また、本体装置2は、ステップS44で算出した周波数とステップS46で算出した右コントローラ4の振動の強さとに基づいて、右振動制御信号D109を生成する。そして、本体装置2は、仮想カメラから仮想空間を見た画像を生成して出力する(ステップS11)。以上で、図26の説明を終了する。
なお、図23〜図26に示す処理は単なる一例であり、例えば各ステップの順番を入れ替えたり、他のステップが加えられたり、上記ステップの一部が省略されたりしてもよい。また、各処理で用いた数値は単なる一例であり、他の値が用いられてもよい。
以上のように、本実施形態では、操作対象の状態(例えば、プレイヤキャラクタが左手を壁について落下している状態、プレイヤキャラクタが移動中に左又は右手をついた状態、動物オブジェクトの移動中に左右の足が地面についた状態等)に応じて、左右のコントローラ3,4を振動させる。このため、プレイヤは、振動により操作対象の状態を認識することができる。操作対象が動作しているときの状態によって左右のコントローラ3,4が振動するため、プレイヤは、操作対象の動作の状態を把握することができる。また、プレイヤ自身が操作している操作対象の動作の状態によって振動が発生するため、プレイヤにあたかも自身が仮想空間に存在しているような印象を与え、ゲームの臨場感を高めることができる。
また、操作対象の左右の状態(左右何れの手をついたか、左右何れの足をついたか)によって左右のコントローラ3,4の振動の強さが異なるため、プレイヤは、操作対象に関する左右の状態を認識することができる。具体的には、プレイヤキャラクタの左側の部分に関して所定のイベントが発生しているときは(例えば、第1実施例ではプレイヤから見てプレイヤキャラクタの左側の手が壁についているとき。第2実施例ではプレイヤキャラクタの左手が壁の上端部についているとき。第3実施例では動物オブジェクトの左側の足が地面についているとき)、プレイヤの左手で把持される左コントローラ3が右コントローラ4よりも強く振動する。また、プレイヤキャラクタの右側の部分に関して所定のイベントが発生しているときは、プレイヤの右手で把持される右コントローラ4が強く振動する。このため、プレイヤは、プレイヤキャラクタの左側の部分または右側の部分に所定のイベントが発生していることを認識することができる。
また、第4実施例では、振動オブジェクト150と、仮想カメラ151又はプレイヤキャラクタ130との位置関係に基づいて左右のコントローラ3,4の振動が制御される。振動オブジェクト150の画面上の位置に応じて左右のコントローラ3,4の振動の強さが異なるため、プレイヤは、仮想空間におけるどの位置に振動オブジェクト150があるのかを振動により認識することができる。また、プレイヤキャラクタ130から見た振動オブジェクト150の方向に応じて左右のコントローラ3,4の振動の強さが異なるため、プレイヤは、振動オブジェクト150がプレイヤキャラクタ130の左右方向のうちどちらにあるのかを振動により認識することができる。
(変形例)
以上、本実施形態について説明したが、他の実施形態では、以下のように構成されてもよい。
例えば、第1実施例では、プレイヤキャラクタ130の左手が壁オブジェクト136についている状態(第1の状態)では、画面上では右側の手が壁オブジェクト136についている様子が表示されるため、右コントローラ4を強く振動させた。また、プレイヤキャラクタ130の右手が壁オブジェクト136についている状態(第2の状態)では、画面上では左側の手が壁オブジェクト136についている様子が表示されるため、左コントローラ3を強く振動させた。他の実施形態では、プレイヤキャラクタ130の手が見た目上左側にあるか、右側にあるかにかかわらず、プレイヤキャラクタ130の左手が壁オブジェクト136についている状態(第1の状態)では、左コントローラ3を強く振動させ、プレイヤキャラクタ130の右手が壁オブジェクト136についている状態(第2の状態)では、右コントローラ4を強く振動させてもよい。
また、第1実施例では、仮想カメラの位置に基づいて、プレイヤキャラクタ130の左手および右手のうち何れの手を壁オブジェクト136につけるかを選択した。すなわち、仮想カメラがプレイヤキャラクタ130の右後方にあるか、左後方にあるかによって、アニメーションA1(右)およびアニメーションA1(左)のうち何れを表示するかを選択した。他の実施形態では、仮想カメラの位置に限らず、仮想空間の状況、プレイヤキャラクタ130の状況、および、ユーザによって行われた操作のうちの少なくとも何れか1つに基づいて、プレイヤキャラクタ130を第1の状態(プレイヤキャラクタ130が左手をついた状態)又は第2の状態(プレイヤキャラクタ130が右手をついた状態)のいずれかの状態にしてもよい。例えば、壁オブジェクト136の種類や配置、壁オブジェクト136とプレイヤキャラクタ130との位置関係、仮想空間内の他のオブジェクトの種類や配置、当該他のオブジェクトとプレイヤキャラクタ130との位置関係、プレイヤキャラクタ130の状態(位置や姿勢、残機数等のライフの状態、装備等)、ゲームのシーン、コントローラに対して所定の操作が行われたかどうか等によって、第1の状態又は第2の状態が選択されてもよい。
また、第2実施例では、プレイヤキャラクタ130は、左手をついた状態(第1の状態)と右手をついた状態(第2の状態)とを交互に繰り返しながら左右方向に移動した。他の実施形態では、左手をついた状態と右手をついた状態との間に他の状態(例えば、両手をついた状態、両手が浮いた状態)があってもよい。この場合、左手をついた状態では左コントローラ3を強く振動させ、右手をついた状態では右コントローラ4を強く振動させ、他の状態では左右のコントローラ3,4を振動させなくてもよい。また、左手をついた状態で左コントローラ3を強く振動させ、次に他の状態に移行した場合にも左コントローラ3を強く振動させ続け、次に右手をついた状態になったときに右コントローラ4を強く振動させてもよい。
また、上記実施形態では、表示されるアニメーションのフレームに合わせて振動制御信号を出力することとした。すなわち、左右のコントローラ3,4を振動させるか否かを、アニメーションの再生が開始されてからのフレーム数に基づいて判定した。他の実施形態では、操作対象が第1の状態か第2の状態かをプロセッサが判定し、その判定結果に基づいて振動制御信号を生成・出力してもよい。例えば、第1実施例において、プレイヤキャラクタ130の右手または左手が壁オブジェクト136についている状態か否かを接触判定により判定し、当該判定結果に基づいて振動制御信号を生成してもよい。また、第2実施例において、プレイヤキャラクタ130の右手又は左手が壁オブジェクト136の上端部についている状態か否かを接触判定により判定し、当該判定結果に基づいて振動制御信号を生成してもよい。また、第3実施例において、動物オブジェクト140の足が地面オブジェクト135についたか否かを、各足と地面オブジェクト135との接触判定により判定してもよい。
また、上記実施形態では、操作対象の左右の状態(例えば、プレイヤキャラクタ130が左手をついている状態又は右手をついている状態。動物オブジェクト140が左足をついている状態又は右足をついている状態)に応じて、左右のコントローラ3,4を振動させた。他の実施形態では、操作対象の左右の状態に限らず、例えば、操作対象の上下の状態に応じて2つのコントローラの振動を制御してもよい。例えば、操作対象の上半身が他のオブジェクトと接触した状態と、下半身が他のオブジェクトと接触した状態とがある場合に、上半身が他のオブジェクトと接触した状態では、第1のコントローラをより強く振動させ、下半身が他のオブジェクトと接触した状態では、第2のコントローラをより強く振動させてもよい。
また、上記実施形態では、左コントローラ3および右コントローラ4は本体装置2に着脱可能であるとした。他の実施形態では、左コントローラ3および右コントローラ4は本体装置2と一体として構成され、本体装置2から分離不可能に構成されてもよい。
また、上記実施形態では、本体装置2に着脱可能な左コントローラ3および右コントローラ4を用いて操作対象を操作するとともに、左コントローラ3および右コントローラ4を振動させることとした。操作対象を操作するための操作装置は、上述した左コントローラ3および右コントローラ4に限らない。例えば、上記左コントローラ3に対応する左側部分と上記右コントローラ4に対応する右側部分とを有する操作装置が用いられてもよい。当該操作装置と本体装置2とは有線または無線で接続されてもよい。操作装置から操作に応じた操作データが本体装置2に送信されると共に、本体装置2から操作装置に上記第1の振動制御信号および第2の振動制御信号が送信される。操作装置の左側部分には、左コントローラ3が有するスティックやボタン、振動子107が設けられ、操作装置の右側部分には、右コントローラ4が有するスティックやボタン、振動子117が設けられる。この場合、操作装置の左側部分は上記左コントローラ3(第1の操作部)として機能し、操作装置の右側部分は上記右コントローラ4(第2の操作部)として機能して、操作装置の左側部分および右側部分は、上述した左コントローラ3および右コントローラ4と同様の振動をする。
また、上記実施形態では、本体装置2がキャラクタ制御部200、画像生成部201、振動信号生成部202、振動信号送信部203として機能することとした。他の実施形態では、本体装置2および左右のコントローラ3,4がキャラクタ制御部200、画像生成部201、振動信号生成部202、振動信号送信部203として機能してもよい。例えば、本体装置2および左右のコントローラ3,4が、振動信号生成部202および振動信号送信部203として機能してもよい。例えば、本体装置2が操作対象の状態を示す信号を左右のコントローラ3,4に送信し、左右のコントローラ3,4が、当該信号に基づいて、振動子107および振動子117を振動させるための振動制御信号を生成し、振動子107および振動子117に出力してもよい。
また、複数の装置がネットワーク(例えばインターネットやLAN)で接続され、ネットワークで接続された複数の装置を有するゲームシステムにおいて、上述したゲームが行われてもよい。例えば、端末とサーバとがインターネットを介して接続され、当該端末とサーバとによって上記ゲームシステムが構成されてもよい。この場合、例えば、端末側に上記左コントローラ3および右コントローラ4に対応する操作装置と表示装置とが配置され、サーバ側にキャラクタ制御部200と、画像生成部201と、振動信号生成部202と、振動信号送信部203とが配置されてもよい。端末は、プレイヤによる操作装置に対する操作に応じた操作データをサーバに送信する。サーバは、当該操作データに基づいてプレイヤキャラクタ等を制御して画像を生成すると共に、プレイヤキャラクタの状態に応じて、振動制御信号を生成する。そして、端末は、サーバから画像および振動制御信号を受信して、画像を表示装置に表示させると共に操作装置を振動させる。
また、上記実施形態では、ゲームシステム1において上述したゲームを行うものとしたが、他のシステム(又は装置)において上述したゲームが行われてもよい。例えば、他のシステム(又は装置)は、パーソナルコンピュータ、スマートフォン、タブレット端末等であってもよい。また、ゲームシステム1又は他のシステムにおいて、上記ゲーム以外の他のアプリケーションが実行されてもよい。
以上、本発明について説明したが、上記説明は本発明の例示に過ぎず、種々の改良や変形が加えられてもよい。