(57)【要約】      （修正有）【課題】新規な、振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法を提供する。【解決手段】ゲーム装置１０は、振動制御装置として機能する本体装置１０ａ並びに着脱可能な第１コントローラ１４及び第２コントローラ１６を含む。ゲーム装置は、２つのコントローラを本体装置に装着した第１態様、２つのコントローラを本体装置から分離した状態で個別に使用する第２態様、２つのコントローラを本体装置から離脱した状態で一体的に連結して使用する第３態様または２つのコントローラとは異なる第３コントローラを使用する第４態様で使用される。仮想空間において、振動源および振動の受容部が設定され、振動源から発生される振動は仮想空間における状況に応じて減衰されて受容部に伝達される。減衰された振動が第１または第３コントローラの振動部で発生されるとともに、減衰された振動が第２または第３コントローラの振動部で発生される。【選択図】図１
2018112953.tif 000002
【特許請求の範囲】
【請求項１】
仮想空間内に振動源を配置する振動源配置部と、
前記振動源から発生される振動に対応する振動データを生成する振動データ生成部と、
前記振動源からの振動を受容する受容部を前記仮想空間内に設定する受容部設定部と、
前記振動源配置部によって配置された振動源と前記受容部設定部によって設定された受容部との間の空間状況に基づいて、前記振動データ生成部によって生成された振動データを変化させる変化部と、
前記変化部によって変化された振動データに従って振動部を振動させる振動制御部を備える、振動制御システム。
【請求項２】
前記振動源は前記仮想空間内に配置された第１のオブジェクトに対応する、請求項１記載の振動制システム。
【請求項３】
プレイヤの操作に応じて、少なくとも前記仮想空間を移動するプレイヤオブジェクトを当該仮想空間に配置するプレイヤオブジェクト配置部をさらに備え、
前記受容部設定部は、前記プレイヤオブジェクト配置部によって配置されたプレイヤオブジェクトに関連して、前記受容部を設定する、請求項１または２記載の振動制御システム。
【請求項４】
前記振動源配置部は、前記仮想空間に複数の前記振動源を配置し、
前記振動データ生成部は、前記複数の振動源の各々から発生される振動に対応する振動データを生成し、
前記変化部は、前記複数の振動源の各々と前記受容部との間の空間状況に基づいて、各々の前記振動データを変化させ、
前記変化された前記各々の振動データを合成する合成部をさらに備え、
前記振動制御部は、前記合成部によって合成された振動データ基づいて振動部を振動させる、請求項１ないし３のいずれかに記載の振動制御システム。
【請求項５】
使用時に左右に配置される２つの振動部を備え、
前記受容部設定部は、前記２つの振動部の各々に対応して前記仮想空間に２つの前記受容部を設定し、
前記変化部は、前記振動源と一方の前記受容部との間の前記空間状況に基づいて、前記振動データ生成部によって生成された振動データを変化させた第１変化振動データを生成するとともに、前記振動源と他方の前記受容部との間の前記空間状況に基づいて、前記振動データ生成部によって生成された振動データを変化させた第２変化振動データを生成し、
前記振動制御部は、前記第１変化振動データに従って一方の前記振動部を振動させ、前記第２変化振動データに従って他方の前記振動部を振動させる、請求項１ないし４のいずれかに記載の振動制御システム。
【請求項６】
前記２つの受容部は、第２のオブジェクトの左右に合わせて配置される、請求項５記載の振動制御システム。
【請求項７】
前記第２のオブジェクトは仮想カメラである、請求項６記載の振動制御システム。
【請求項８】
前記第２のオブジェクトは仮想のプレイヤであり、
前記受容部設定部は、前記受容部とは別の受容部を前記仮想のプレイヤに設定し、
前記変化部は、前記振動源と前記受容部との間の空間状況に基づいて変化させた振動データを、前記受容部と前記別の受容部との間の空間状況に基づいてさらに変化させる、請求項６記載の振動制御システム。
【請求項９】
前記変化部は、前記２つの受容部のうちの一方の前記受容部に受容される振動と他方の前記受容部に受容される振動との差が大きくなるように前記振動データを変化させる、請求項５ないし７のいずれかに記載の振動制御システム。
【請求項１０】
前記空間状況は、前記振動源と前記受容部との間の媒体を含み、
前記変化部は、前記媒体に応じて前記振動データの変化率を変える、請求項１ないし９のいずれかに記載の振動制御システム。
【請求項１１】
前記振動データは、前記振動波形の周波数と振幅の値の組についてのデータであり、
前記変化部は、前記空間状況に応じて、前記周波数および前記振幅の少なくとも一方を変化させる、請求項１なしい１０のいずれかに記載の振動制御システム。
【請求項１２】
前記変化部は、前記周波数毎に、前記振幅の変化率を変化させる、請求項１１記載の振動制御システム。
【請求項１３】
前記変化部は、前記プレイヤオブジェクトの状態に応じて前記振動データを変化させる、請求項３ないし９のいずれかに記載の振動制御システム。
【請求項１４】
前記変化部は、前記プレイヤオブジェクトの状態に応じて前記振動データの変化率を変える、請求項３ないし９のいずれかに記載の振動制御システム。
【請求項１５】
仮想空間内に振動源を配置する振動源配置部と、
前記振動源から発生される振動に対応する振動データを生成する振動データ生成部と、
前記振動源からの振動を受容する受容部を前記仮想空間内に設定する受容部設定部と、
前記振動源配置部によって配置された振動源と前記受容部設定部によって設定された受容部との間の空間状況に基づいて、前記振動データ生成部によって生成された振動データを変化させる変化部と、
前記変化部によって変化された振動データに従って振動部を振動させる振動制御部を備える、振動制御装置。
【請求項１６】
コンピュータによって実行される振動制御プログラムであって、
前記コンピュータのプロセッサに、
仮想空間内に振動源を配置する振動源配置ステップと、
前記振動源から発生される振動に対応する振動データを生成する振動データ生成ステップと、
前記振動源からの振動を受容する受容部を前記仮想空間内に設定する受容部設定ステップと、
前記振動源配置ステップにおいて配置した振動源と前記受容部設定ステップにおいて設定した受容部との間の空間状況に基づいて、前記振動データ生成ステップにおいて生成した振動データを変化させる変化ステップと、
前記変化ステップにおいて変化させた振動データに従って振動部を振動させる振動制御ステップを実行させる、振動制御プログラム。
【請求項１７】
（ａ）仮想空間内に振動源を配置するステップと、
（ｂ）前記振動源から発生される振動に対応する振動データを生成するステップと、
（ｃ）前記振動源からの振動を受容する受容部を前記仮想空間内に設定するステップと、
（ｄ）前記ステップ（ａ）において配置した振動源と前記ステップ（ｃ）において設定した受容部との間の空間状況に基づいて、前記ステップ（ｂ）において生成した振動データを変化させるステップと、
（ｅ）前記ステップ（ｄ）において変化させた振動データに従って振動部を振動させるステップを含む、振動制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法に関し、特にたとえば、振動モータを備える装置の振動を制御する、振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法に関する。
【背景技術】
【０００２】
背景技術の一例が特許文献１に開示される。この特許文献１には、敵キャラクタの表示態様の違いに応じて振動を変化させるゲーム装置が開示されている。具体的には、プレイヤないしプレイヤキャラクタが敵キャラクタを攻撃すると、敵キャラクタがゲーム画面の奥に存在する（Ｚ値が大きい）場合には、当該敵キャラクタに小さいダメージが与えられるとともに、ゲーム装置に弱い振動が与えられる。逆に、敵キャラクタがゲーム画面の手前に存在する（Ｚ値が小さい）場合には、当該キャラクタに大きいダメージが与えられるとともに、ゲーム装置に強い振動が与えられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−６８２１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１では、プレイヤは、振動により、ダメージの大きさを知覚するが、敵キャラクタに与えられるダメージの大きさはＺ値の大きさによって決定されるため、Ｚ値が同じ範囲であれば、敵キャラクタの位置に関係無く同じ強さの振動が与えられる。このように、振動によって、プレイヤが知覚する情報は比較的単純であるため、改善の余地があった。
【０００５】
それゆえに、この発明の主たる目的は、新規な、振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法を提供することである。
【０００６】
また、この発明の他の目的は、仮想空間における多様な状況に応じた振動を提示することができる、振動制御システム、振動制御装置、振動制御プログラムおよび振動制御方法を提供することである。
【課題を解決するための手段】
【０００７】
第１の発明は、振動源配置部と、振動データ生成部と、受容部設定部と、変化部と、振動制御部を備える、振動制御システムである。振動源配置部は、仮想空間内に振動源を配置する。振動データ生成部は、振動源から発生される振動に対応する振動データを生成する。受容部設定部は、振動源からの振動を受容する受容部を仮想空間内に設定する。変化部は、振動源配置部によって配置された振動源と受容部設定部によって設定された受容部との間の空間状況に基づいて、振動データ生成部によって生成された振動データを変化させる。振動制御部は、変化部によって変化された振動データに従って振動部を振動させる。
【０００８】
第１の発明によれば、仮想空間内に振動を受容する受容部を設定し、振動源で発生される振動に対応する振動データを振動源と受容部の間の空間状況に基づいて変化させて振動部を振動させるので、仮想空間における多様な状況に応じた振動を提示することができる。
【０００９】
第２の発明は、第１の発明に従属し、振動源は仮想空間内に配置された第１のオブジェクトに対応する。
【００１０】
第３の発明は、第１または第２の発明に従属し、プレイヤオブジェクト配置部をさらに備える。プレイヤオブジェクト配置部は、プレイヤの操作に応じて、少なくとも仮想空間を移動するプレイヤオブジェクトを当該仮想空間に配置する。受容部設定部は、プレイヤオブジェクト配置部によって配置されたプレイヤオブジェクトに関連して、受容部を設定する。
【００１１】
第３の発明によれば、仮想空間内に配置されるプレイヤオブジェクトに関連して受容部が設定されるので、プレイヤオブジェクトに伝達される振動をプレイヤに知覚させることができる。
【００１２】
第４の発明は、第１ないし第３の発明のいずれかに従属し、振動源配置部は、仮想空間に複数の振動源を配置する。振動データ生成部は、複数の振動源の各々から発生される振動に対応する振動データを生成する。変化部は、複数の振動源の各々と受容部との間の空間状況に基づいて、各々の振動データを変化させる。合成部は変化された各々の振動データを合成する。振動制御部は、合成部によって合成された振動データ基づいて振動部を振動させる。
【００１３】
第４の発明によれば、複数の振動源で振動が発生される場合であっても、仮想空間における多様な状況に応じた振動を提示することができる。
【００１４】
第５の発明は、第１ないし第４の発明のいずれかに従属し、２つの振動部をさらに備える。２つの振動部は、使用時に左右に配置される。受容部設定部は、２つの振動部の各々に対応して仮想空間に２つの受容部を設定する。変化部は、振動源と一方の受容部との間の空間状況に基づいて、振動データ生成部によって生成された振動データを変化させた第１変化振動データを生成するとともに、振動源と他方の受容部との間の空間状況に基づいて、振動データ生成部によって生成された振動データを変化させた第２変化振動データを生成する。振動制御部は、第１変化振動データに従って一方の振動部を振動させ、第２変化振動データに従って他方の振動部を振動させる。
【００１５】
第５の発明によれば、２つの振動部に対応して２つの受容部を設け、各受容部について空間状況に基づいて振動データを変化させるので、振動によるステレオ感を得ることができる。
【００１６】
第６の発明は、第５の発明に従属し、２つの受容部は、第２のオブジェクトの左右に合わせて配置される。
【００１７】
第６の発明によれば、受容部はプレイヤオブジェクト以外のオブジェクトに関連して配置することもできる。
【００１８】
第７の発明は、第６の発明に従属し、第２のオブジェクトは仮想カメラである。
【００１９】
第７の発明によれば、仮想カメラの位置に配置されるプレイヤオブジェクトまたは仮想のプレイヤに伝達される振動を知覚させることができる。
【００２０】
第８の発明は、第６の発明に従属し、第２のオブジェクトは仮想のプレイヤである。受容部設定部は、受容部とは別の受容部を仮想のプレイヤに設定する。変化部は、振動源と受容部との間の空間状況に基づいて変化させた振動データを、受容部と別の受容部との間の空間状況に基づいてさらに変化させる。
【００２１】
第８の発明によれば、振動源から受容部に伝達される振動に対応する振動データが変化され、さらに受容部から別の受容部に伝達される振動に対応する振動データが変化されるので、たとえば、プレイヤオブジェクトが感じる振動を表現しつつ、プレイヤ自身が仮想空間にいてプレイヤオブジェクトを操作している印象を感じさせることができる。
【００２２】
第９の発明は、第５ないし第７の発明に従属し、変化部は、２つの受容部のうちの一方の受容部に受容される振動と他方の受容部に受容される振動との差が大きくなるように振動データを変化させる。
【００２３】
第９の発明によれば、２つの振動部で発生される振動の差を大きくすることができるため、２つの振動部が１つの筐体で構成される装置または複数の筐体が一体化された装置に設けられる場合にもステレオ感を得ることができる。
【００２４】
第１０の発明は、第１ないし第９の発明のいずれかに従属し、空間状況は振動源と受容部の間の媒体を含み、変化部は、媒体に応じて振動データの変化率を変化させる。
【００２５】
第１０の発明によれば、現実世界において振動が伝達される場合と同様に、仮想空間において振動を伝達させることができる。
【００２６】
第１１の発明は、第１ないし第１０の発明のいずれかに従属し、振動データは、振動波形の周波数と振幅の値の組についてのデータである。変化部は、空間状況に応じて、周波数および振幅の少なくとも一方を変化させる。
【００２７】
第１１の発明によれば、振動波形の周波数と振幅の少なくとも一方を変化させることにより、受容部に受容される振動を変化させることができる。
【００２８】
第１２の発明は、第１１の発明に従属し、変化部は、周波数毎に、振幅の変化率を変化させる。たとえば、周波数が高い場合には、周波数が低い場合と比較して、振動を減衰させる量（減衰率）が大きく設定される。
【００２９】
第１３の発明は、第３ないし第９の発明のいずれかに従属し、変化部は、プレイヤオブジェクトの状態に応じて振動データを変化させる。
【００３０】
第１３の発明によれば、オブジェクトの状態に応じて振動データを変化させることもできるので、仮想空間における多様な状況に応じた振動を提示することができる。
【００３１】
第１４の発明は、第３ないし第９の発明のいずれかに従属し、変化部は、プレイヤオブジェクトの状態に応じて振動データの変化率を変える。
【００３２】
第１４の発明によれば、オブジェクトの状態に応じて変化率を変えることができるので、仮想空間における多様な状況に応じた振動を提示することができる。
【００３３】
第１５の発明は、振動源配置部と、振動データ生成部と、受容部設定部と、変化部と、振動制御部を備える、振動制御装置である。振動源配置部は、仮想空間内に振動源を配置する。振動データ生成部は、振動源から発生される振動に対応する振動データを生成する。受容部設定部は、振動源からの振動を受容する受容部を仮想空間内に設定する。変化部は、振動源配置部によって配置された振動源と受容部設定部によって設定された受容部との間の空間状況に基づいて、振動データ生成部によって生成された振動データを変化させる。振動制御部は、変化部によって変化された振動データに従って振動部を振動させる。
【００３４】
第１６の発明は、コンピュータによって実行される振動制御プログラムであって、コンピュータのプロセッサに、仮想空間内に振動源を配置する振動源配置ステップと、振動源から発生される振動に対応する振動データを生成する振動データ生成ステップと、振動源からの振動を受容する受容部を仮想空間内に設定する受容部設定ステップと、振動源配置ステップにおいて配置した振動源と受容部設定ステップにおいて設定した受容部との間の空間状況に基づいて、振動データ生成ステップにおいて生成した振動データを変化させる変化ステップと、変化ステップにおいて変化させた振動データに従って振動部を振動させる振動制御ステップを実行させる、振動制御プログラムである。
【００３５】
第１７の発明は、（ａ）仮想空間内に振動源を配置するステップと、（ｂ）振動源から発生される振動に対応する振動データを生成するステップと、（ｃ）振動源からの振動を受容する受容部を仮想空間内に設定するステップと、（ｄ）ステップ（ａ）において配置した振動源とステップ（ｃ）において設定した受容部との間の空間状況に基づいて、ステップ（ｂ）において生成した振動データを変化させるステップと、
（ｅ）ステップ（ｄ）において変化させた振動データに従って振動部を振動させるステップを含む、振動制御方法である。
【００３６】
第１５ないし第１７の発明においても、第１の発明と同様に、仮想空間における多様な状況に応じた振動を提示することができる。
【発明の効果】
【００３７】
この発明によれば、仮想空間における多様な状況に応じた振動を提示することができる。
【００３８】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【図面の簡単な説明】
【００３９】
【図１】図１はゲーム装置の外観構成の限定しない一例を示す図解図である。
【図２】図２は図１に示すゲーム装置において本体装置からコントローラを分離した状態の限定しない一例を示す図解図である。
【図３】図３は図１および図２に示すゲーム装置の電気的な構成の限定しない一例を示すブロック図である。
【図４】図４は図１ないし図３に示す第１コントローラの電気的な構成の限定しない一例を示すブロック図である。
【図５】図５は図１ないし図３に示す第２コントローラの電気的な構成の限定しない一例を示すブロック図である。
【図６】図６は図１に示すゲーム装置の使用態様の限定しない一例を示す図解図である。
【図７】図７は図１に示すゲーム装置の使用態様の他の例を示す図解図である。
【図８】図８は図１に示すゲーム装置の使用態様のその他の例を示す図解図である。
【図９】図９は図１に示すゲーム装置の使用態様のさらに他の例を示す図解図である。
【図１０】図１０は図９に示す第３コントローラの電気的な構成の限定しない一例を示すブロック図である。
【図１１】図１１は図１ないし図３に示す表示装置に表示されるゲーム画面の限定しない一例を示す図解図である。
【図１２】図１２は仮想空間における振動源および受容部の設定方法の限定しない一例を説明するための図解図である。
【図１３】図１３は振動源から受容部に伝達される振動を減衰させる減衰係数の距離に対する変化を示すグラフである。
【図１４】図１４は仮想空間における振動源および振動の受容部の設定方法の限定しない他の例を説明するための図解図である。
【図１５】図１５は仮想空間における振動源および振動の受容部の設定方法の限定しないその他の例を説明するための図解図である。
【図１６】図１６は図３に示すゲーム装置のＲＡＭのメモリマップの限定しない一例を示す図解図である。
【図１７】図１７は図３に示すＣＰＵのゲーム全体処理の限定しない一例を示すフロー図である。
【図１８】図１８は図３に示すＣＰＵの振動制御処理の限定しない一例を示すフロー図である。
【図１９】図１９は第２実施例において振動源から受容部に伝達される振動の算出方法を説明するための図解図である。
【図２０】図２０は第２実施例において振動源から受容部に伝達される振動の算出する場合において、左右の受容部を通る直線に対する左右の振動部の中点と振動源を結ぶ直線の角度に応じた減衰係数の変化を示すグラフである。
【図２１】図２１は第３実施例において振動源と受容部の距離の算出方法を説明するための図解図である。
【図２２】図２２は第４実施例において振動源から受容部に伝達される振動の算出方法を説明するための図解図である。
【発明を実施するための形態】
【００４０】
［第１実施例］
図１を参照して、限定しない一例のゲーム装置１０は本体装置１０ａを含む。本体装置１０ａは、振動制御装置としても機能する。この本体装置１０ａには、表示装置１２が設けられる。表示装置１２は、ＬＣＤであるが、有機ＥＬを用いたディスプレイであってもよい。また、ゲーム装置１０は、第１コントローラ１４および第２コントローラ１６を含み、図２からも分かるように、第１コントローラ（左コントローラ）１４は本体装置１０ａの左側に着脱可能に設けられ、第２コントローラ（右コントローラ）１６は本体装置１０ａの右側に着脱可能に設けられる。
【００４１】
なお、この第１実施例では、情報処理装置の一例としてゲーム装置１０について説明するが、本体装置１０ａは、スマートフォンおよびタブレット端末などを用いることができる。ただし、スマートフォンおよびタブレット端末を用いる場合には第１コントローラ１４および第２コントローラ１６を着脱可能な構成を別途設ける必要がある。
【００４２】
詳細は後述するが、第１コントローラ１４および第２コントローラ１６は、本体装置１０ａに装着した状態で使用することができ、また、本体装置１０ａから分離（離脱）した状態で使用することもできる。第１コントローラ１４および第２コントローラ１６を本体装置１０ａから分離した場合には、一人のプレイヤ（または、ユーザ）が第１コントローラ１４および第２コントローラ１６の両方を使用することができる。
【００４３】
なお、この第１実施例では、第１コントローラ１４および第２コントローラ１６は、共に本体装置１０ａに装着され、共に本体装置１０ａから分離されるものとする。
【００４４】
図１に戻って、第１コントローラ１４には、各種の操作ボタン１４ａが設けられるとともに、アナログスティック１４ｂが設けられる。詳細な説明は省略するが、操作ボタン１４ａおよびアナログスティック１４ｂは、第１コントローラ１４の筐体のうち、本体装置１０ａに装着される面以外のいずれかの面に設けることができる。操作ボタン１４ａは、本体装置１０ａで実行される各種プログラムに応じた指示を行うために設けられる。アナログスティック１４ｂは、傾倒することにより方向を指示することができる。ただし、アナログスティック１４ｂに代えてスライドスティックが設けられてもよい。また、アナログスティック１４ｂは、押圧することにより、操作ボタンとしても機能するようにしてもよい。また、第１コントローラ１４の筐体内には、この第１コントローラ１４（本体装置１０ａに装着される場合も含む）を把持するプレイヤに振動を提示するための振動モータ（振動子）１４ｃが設けられる。これらのことは、後述する第２コントローラ１６についても同じである。
【００４５】
第１コントローラ１４と同様に、第２コントローラ１６には、各種の操作ボタン１６ａが設けられるとともに、アナログスティック１６ｂが設けられる。さらに、第２コントローラ１６の筐体内には、振動モータ１６ｃが設けられる。
【００４６】
また、図示は省略するが、本体装置１０ａの底面には、充電台５０と接続するためのコネクタおよびスピーカ３８（図３参照）の音を放出すための放音孔が設けられる。ただし、本体装置１０ａの底面は、表示装置１２の表示面に垂直な面であり、図１において、下側に位置する面である。たとえば、図１に示すゲーム装置１０をプレイヤが使用する場合には、上記のコネクタおよび放音孔は、プレイヤ側を向く。
【００４７】
さらに、図２に示すように、本体装置１０ａの左側面にはレール部材１０ｂが設けられ、本体装置１０ａの右側面にはレール部材１０ｃが設けられる。一方、第１コントローラ１４の筐体の長手方向の一方側面（図２では右側面）にはスライダ１４ｄが設けられ、第２コントローラ１６の筐体の長手方向の一方側面（図２では左側面）にはスライダ１６ｄが設けられる。
【００４８】
レール部材１０ｂはスライダ１４ｄと係合可能に構成され、レール部材１０ｃはスライダ１６ｄと係合可能に構成される。つまり、レール部材１０ｂとスライダ１４ｄによってスライド機構が形成され、レール部材１０ｃとスライダ１６ｄによってスライド機構が形成される。このため、第１コントローラ１４および第２コントローラ１６は、それぞれ、本体装置１０ａにスライド可能であり、着脱可能に設けられる。
【００４９】
なお、レール部材（１０ｂ，１０ｃ）をコントローラ（１４，１６）側に設けて、スライダ（１４ｄ，１６ｄ）を本体装置１０ａ側に設けるようにしてもよい。また、本体装置１０ａに第１コントローラ１４および第２コントローラ１６を着脱する機構は他の機構が採用されてもよい。たとえば、他の機構としては、本体装置１０ａに設けた凹部（または、凸部）に嵌合する凸部（または、凹部）を、第１コントローラ１４および第２コントローラ１６の筐体のそれぞれに設けるようにしてもよい。
【００５０】
図３は図１および図２に示したゲーム装置１０の電気的な構成を示すブロック図である。図３に示すように、ゲーム装置１０は、ＣＰＵ２０を含み、ＣＰＵ２０には、ＲＡＭ２２、フラッシュメモリ２４、コントローラ通信部２６、左側端子２８、右側端子３０、表示ドライバ３２、ディジタル・アナログ（Ｄ／Ａ）変換器３４および下側端子３６が接続される。また、表示ドライバ３２には表示装置１２が接続され、Ｄ／Ａ変換器３４にはスピーカ３８が接続される。これらのコンポーネントが本体装置１０ａの内部に設けられる。ただし、左側端子２８、右側端子３０および下側端子３６の接続部（接続端子）は、本体装置１０ａから露出するように設けられる。
【００５１】
上述したように、ゲーム装置１０は、第１コントローラ１４および第２コントローラ１６を含み、これらが本体装置１０ａに装着されている場合には、第１コントローラ１４は左側端子２８と電気的に接続され、第２コントローラ１６は右側端子３０と電気に接続される。
【００５２】
また、ゲーム装置１０が充電台（クレードル）５０に載置される場合には、下側端子３６は、充電台５０に設けられた接続プラグ（図示せず）と接続される。この場合、充電台５０から下側端子３６を介してゲーム装置１０に電力が供給され、本体装置１０ａに内蔵されたバッテリが充電されるとともに、本体装置１０ａと接続される第１コントローラ１４および第２コントローラ１６に内蔵されたバッテリが充電される。
【００５３】
図示は省略するが、充電台５０はＨＤＭＩ（登録商標）ケーブルのような信号ケーブルを用いてテレビジョン受像機に接続可能であり、この場合、本体装置１０ａから下側端子３６を介して出力されるＡＶ（音声および画像（映像））データは、充電台５０を介してテレビジョン受像機に与えられる。したがって、テレビジョン受像機の表示部（モニタ）にゲーム画面が表示されるとともに、テレビジョン受像機のスピーカから音声または／および音楽が出力される。
【００５４】
ＣＰＵ２０は、ゲーム装置１０の全体的な制御を司る。ＲＡＭ２２は、揮発性の記憶装置であり、ＣＰＵ２０のワーキング領域およびバッファ領域として使用される。フラッシュメモリ２４は、不揮発性の記憶装置であり、ゲーム装置１０で実行される各種プログラム（情報処理プログラム）およびセーブデータなどを記憶する。
【００５５】
なお、上記の情報処理プログラムは、一例として、ゲームのアプリケーションプログラムであるが、これに限定される必要は無い。アプリケーションプログラムは、文書作成プログラム、電子メールプログラム、お絵描きプログラム、文字練習プログラム、語学トレーニングプログラム、学習プログラムなどの他のプログラムでもよい。
【００５６】
以下において、本体装置１０ａが、第１コントローラ１４および第２コントローラ１６との間の通信を行う構成について説明する。
【００５７】
この第１実施例において、第１コントローラ１４および第２コントローラ１６が本体装置１０ａと分離状態にある場合には、本体装置１０ａは、第１コントローラ１４および第２コントローラ１６と無線通信を行う。一方、第１コントローラ１４および第２コントローラ１６が本体装置１０ａに装着されている場合には、本体装置１０ａは、第１コントローラ１４および第２コントローラ１６と有線通信を行う。
【００５８】
コントローラ通信部２６は、第１コントローラ１４および第２コントローラ１６と無線通信を行う。本体装置１０ａと各コントローラ（１４，１６）との通信方式は任意の方式を採用することができるが、この第１実施例では、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従う通信方式が採用される。
【００５９】
左側端子２８は、第１コントローラ１４が本体装置１０ａに装着されている場合に、ＣＰＵ２０と第１コントローラ１４で有線通信を行うための端子であり、ＣＰＵ２０は、左側端子２８を介して第１コントローラ１４との間でデータを送受信する。
【００６０】
右側端子３０は、第２コントローラ１６が本体装置１０ａに装着されている場合に、ＣＰＵ２０と第２コントローラ１６で有線通信を行うための端子であり、ＣＰＵ２０は、右側端子３０を介して第２コントローラ１６との間でデータを送受信する。
【００６１】
この第１実施例において、ＣＰＵ２０から各コントローラ（１４，１６）に送信されるのは、各コントローラ（１４，１６）を振動させるための振動データである。振動データは、ＣＰＵ２０が、振動データを生成するプログラムを実行したり、保存された振動データを読み出したりして生成される。また、振動データは、振動波形（アナログ信号の波形）を示すデータであり、振動波形そのものの信号（振動信号）でも良いし、振動波形をデジタル化したものでも良いし、周波数を示す値と振幅を示す値の組でも良い。一方、各コントローラ（１４，１６）から送信されるのは、当該各コントローラ（１４，１６）に設けられた各操作ボタン（１４ａ，１６ａ）およびアナログスティック（１４ｂ，１６ｂ）を操作した場合の操作データである。ただし、ＣＰＵ２０と各コントローラ（１４，１６）の間で、各種制御信号等の他のデータを送受信するようにしても良い。
【００６２】
このように、本体装置１０ａは、第１コントローラ１４および第２コントローラ１６との間で、有線通信および無線通信を行うことができる。
【００６３】
なお、図示は省略するが、左側端子２８は、充電台５０からの電源を供給するための電源ラインを第１コントローラ１４に内蔵されるバッテリの充電回路に接続する。このことは、右側端子３０についても同様である。
【００６４】
表示ドライバ３２は、ＧＰＵおよびＶＲＡＭを含み、ＣＰＵ２０の指示の下、表示装置１２に表示するゲーム画面（ゲーム画像）についての画像データをＶＲＡＭ上に生成し、表示装置１２に出力する。Ｄ／Ａ変換器３４は、ＣＰＵ２０から出力される音声データをアナログの音声信号に変換してスピーカ３８に出力する。
【００６５】
なお、上述したように、テレビジョン受像機のモニタにゲーム画面を表示するとともに、テレビジョン受像機のスピーカから音声を出力する場合には、ＣＰＵ２０は、ＡＶデータを下側端子３６および充電台５０を介してテレビジョン受像機に送信する。
【００６６】
下側端子３６は、充電台５０と接続するための端子であり、充電台５０に内蔵される電力供給回路からの電源ラインをゲーム装置１０（本体装置１０ａ）に内蔵されるバッテリを充電するための充電回路に接続するための端子である。また、下側端子３６は、充電台５０との間で有線通信するための端子でもある。
【００６７】
なお、図３に示すゲーム装置１０の電気的な構成は一例であり、限定されるべきでない。たとえば、入力手段として、タッチパネルをさらに設けてもよい。この場合、タッチパネルは、表示装置１２上に設けられる。または、タッチパネルが表示装置１２と一体的に構成されたタッチディスプレイが設けられてもよい。また、ゲーム装置１０の向き（姿勢）または／および動きを検出するための慣性センサ（加速度センサまたは／およびジャイロセンサ）が設けられてもよい。
【００６８】
図４は、図１ないし図３に示した第１コントローラ１４の電気的な構成を示すブロック図である。図４に示すように、第１コントローラ１４は、コントローラ制御部７０を含み、コントローラ制御部７０には、端子７２、通信モジュール７４、メモリ７６、操作ボタン群７８、アナログスティック８０および振動部８２が接続される。
【００６９】
コントローラ制御部７０は、たとえば、マイクロコンピュータで構成され、第１コントローラ１４を全体制御する。端子７２は、第１コントローラ１４が本体装置１０ａに装着されている場合に、本体装置１０ａの左側端子２８と電気的に接続するために設けられる。通信モジュール７４は、第１コントローラ１４が本体装置１０ａから分離されている場合に、本体装置１０ａと通信可能に接続するために設けられる。上述したように、本体装置１０ａに設けられるコントローラ通信部２６は、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従う無線通信方式を採用するため、通信モジュール７４も、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従う無線通信方式を採用する。
【００７０】
したがって、コントローラ制御部７０は、第１コントローラ１４が本体装置１０ａに装着されている場合には、操作ボタン群７８または／およびアナログスティック８０の操作データを受け付けて、受け付けた操作データを端子７２から出力する。一方、コントローラ制御部７０は、第１コントローラ１４が本体装置１０ａから分離されている場合には、上記のような操作データを受け付けて、受け付けた操作データを通信モジュール７４から上記の無線通信方式に従って本体装置１０ａに送信する。
【００７１】
また、コントローラ制御部７０は、第１コントローラ１４が本体装置１０ａに装着されている場合には、端子７２から入力される振動データを受信（取得）する。一方、コントローラ制御部７０は、第１コントローラ１４が本体装置１０ａから分離されている場合には、上記のような振動データを通信モジュール７４で受信し、取得する。
【００７２】
メモリ７６は、たとえば、フラッシュメモリ等の不揮発性の記憶装置であり、ファームウェアおよび第１コントローラ１４の識別情報（コントローラＩＤ）を記憶する。コントローラ制御部７０は、メモリ７６に記憶されるファームウェアを実行することによって各種の処理を実行する。また、コントローラ制御部７０は、第１コントローラ１４を本体装置１０ａと無線通信可能に接続したとき、コントローラＩＤを本体装置１０ａに通知する。
【００７３】
操作ボタン群７８は、上述した各種の操作ボタン１４ａに相当し、アナログスティック８０は、上述したアナログスティック１４ｂに相当する。操作ボタン群７８およびアナログスティック８０に対して行なわれた操作に関する情報（操作データ）は、所定周期でコントローラ制御部７０に繰り返し出力される。
【００７４】
振動部８２は、モータドライバ８２ａおよび振動モータ８２ｂを含み、モータドライバ８２ａがコントローラ制御部７０によって制御される。コントローラ制御部７０は、本体装置１０ａから送信される振動データに従って振動モータ８２ｂを制御する。すなわち、コントローラ制御部７０は、本体装置１０ａから振動データを受信（取得）すると、取得した振動データをモータドライバ８２ａに出力する。モータドライバ８２ａは、コントローラ制御部７０からの振動データから振動モータ８２ｂを振動させるための駆動信号を生成し、生成した駆動信号を振動モータ８２ｂに与える。このため、振動モータ８２ｂは、本体装置１０ａからの振動データに従って動作する。
【００７５】
たとえば、振動モータ８２ｂは、リニアモータであり、音声信号のようなアナログ信号（振動信号）の入力波形（振動波形）に応じたパターンで出力（振動）する。ただし、この第１実施例では、振動データは、アナログ信号（振動信号）の各時点の信号値（周波数および振幅）に対応する、周波数の値と振幅に対応する電圧値の組についてのデータである。振動モータ８２ｂとしてのリニアモータは、振動信号の各時点での信号値に応じて、振動データが示す電圧値を、振動データが示す周波数で増減するように印加することで、内部の錘の位置を変えることにより、入力波形に応じたパターンで出力する。
【００７６】
なお、振動モータ８２ｂは、振幅を調整可能なモータであればよく、たとえば、圧電素子またはボイスコイルまたは超音波などで振動を発生させるモータを用いることができる。
【００７７】
また、図４に示す第１コントローラ１４の電気的な構成は一例であり、限定されるべきでない。たとえば、第１コントローラ１４の向き（姿勢）または／および動きを検出するための慣性センサ（加速度センサまたは／およびジャイロセンサ）が設けられてもよい。
【００７８】
図５は、図１ないし図３に示した第２コントローラ１６の電気的な構成を示すブロック図である。図５に示すように、第２コントローラ１６は、コントローラ制御部９０を含み、コントローラ制御部９０には、端子９２、通信モジュール９４、メモリ９６、操作ボタン群９８、アナログスティック１００および振動部１０２が接続される。
【００７９】
図５に示すように、この第１実施例では、第２コントローラ１６の電気的な構成は、図４に示した第１コントローラ１４の電気的な構成と同じであるため、各コンポーネントについての説明は省略する。
【００８０】
なお、この第１実施例では、第１コントローラ１４および第２コントローラ１６の電気的な構成を同じにしてあるが、同じである必要はない。
【００８１】
図６はゲーム装置１０の使用態様の一例（第１態様）を示す図解図である。図６に示すように、第１態様のゲーム装置１０では、第１コントローラ１４および第２コントローラ１６は、本体装置１０ａに装着された状態で使用される。この場合、プレイヤは両手でゲーム装置１０を把持し、左手で第１コントローラ１４を操作するとともに、右手で第２コントローラ１６を操作する。つまり、ゲーム装置１０は携帯型のゲーム装置として機能する。
【００８２】
したがって、第１コントローラ１４が操作されると、操作データがコントローラ制御部７０から端子７２および左側端子２８を介してＣＰＵ２０に入力される。同様に、第２コントローラ１６が操作されると、操作データがコントローラ制御部９０から端子９２および右側端子３０を介してＣＰＵ２０に入力される。
【００８３】
また、ＣＰＵ２０からの振動データは、左側端子２８および第１コントローラ１４の端子７２を介してコントローラ制御部７０に入力される。同様に、ＣＰＵ２０からの振動データは、右側端子３０および第２コントローラ１６の端子９２を介してコントローラ制御部９０に入力される。
【００８４】
第１コントローラ１４では、コントローラ制御部７０はモータドライバ８２ａに振動データを入力し、モータドライバ８２ａは振動データに従って振動モータ８２ｂを駆動する。また、第２コントローラ１６では、コントローラ制御部９０はモータドライバ１０２ａに振動データを入力し、モータドライバ１０２ａは振動データに従って振動モータ１０２ｂを駆動する。
【００８５】
第１コントローラ１４に設けられた振動モータ８２ｂが駆動すると、振動モータ８２ｂによって発生される振動がゲーム装置１０を把持する両手に伝達される。また、第２コントローラ１６に設けられた振動モータ１０２ｂが駆動すると、振動モータ１０２ｂによって発生される振動がゲーム装置１０を把持する両手に伝達される。つまり、プレイヤは、振動を両手で知覚する。
【００８６】
なお、振動モータ８２ｂと振動モータ１０２ｂは、同時に駆動されてもよいし、別々に振動されてもよい。また、振動モータ８２ｂと振動モータ１０２ｂには、同じ内容（周波数および電圧値）の振動データが入力されてもよいし、異なる内容の振動データが入力されてもよい。これらのことは後述する第２態様および第３態様についても同じである。
【００８７】
図７はゲーム装置１０の使用態様の他の例（第２態様）を示す図解図である。図７に示すように、第２態様のゲーム装置１０では、第１コントローラ１４および第２コントローラ１６は、本体装置１０ａから分離された状態で使用される。この場合、プレイヤは、左手で第１コントローラ１４を把持し、右手で第２コントローラ１６を把持し、本体装置１０ａは机または台の上に立てた状態で載置される。ただし、本体装置１０ａを立てた状態とは、本体装置１０ａに設けられた表示装置１２の表示面が水平面に対して垂直な状態または垂直から少し傾斜した状態を意味する。たとえば、本体装置１０ａを充電台５０に載置することにより、本体装置１０ａを立てた状態にすることができる。
【００８８】
第２態様において、第１コントローラ１４が操作されると、コントローラ制御部７０からの操作データが通信モジュール７４から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。同様に、第２コントローラ１６が操作されると、コントローラ制御部９０からの操作データが通信モジュール９４から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。
【００８９】
また、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第１コントローラ１４の通信モジュール７４で受信され、コントローラ制御部７０に入力される。同様に、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第２コントローラ１６の通信モジュール９４で受信され、コントローラ制御部９０に入力される。
【００９０】
第１態様で説明したように、第１コントローラ１４の振動モータ８２ｂはコントローラ制御部７０からの振動データに従って駆動され、第２コントローラ１６の振動モータ１０２ｂはコントローラ制御部９０からの振動データに従って駆動される。
【００９１】
第１コントローラ１４に設けられた振動モータ８２ｂが駆動すると、振動モータ８２ｂによって発生される振動が第１コントローラ１４を把持する左手に伝達され、第２コントローラ１６に設けられた振動モータ１０２ｂが駆動すると、振動モータ１０２ｂによって発生される振動が第２コントローラ１６を把持する右手に伝達される。つまり、プレイヤは、振動を左手および右手のそれぞれで知覚する。
【００９２】
なお、第１コントローラ１４および第２コントローラ１６を本体装置１０ａから分離して使用する場合には、無線通信可能に接続する必要がある。この第１実施例では、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従って無線通信を行うため、ゲーム装置１０（本体装置１０ａ）の電源をオンしたとき、または、ゲームのようなアプリケーションを開始するときに、本体装置１０ａはコントローラ（１４，１６など）と接続する（ペアリング）。
【００９３】
この場合、本体装置１０ａ（親機）はコントローラ（１４，１６などの子機）を検索可能なモード（ペアリングモード）に設定され、一方、コントローラ（１４，１６など）も所定の操作ボタン（１４ａ，１６ａなど）を操作することにより、本体装置１０ａを検索可能なペアリングモードに設定される。本体装置１０ａは、所定の信号を発信しているコントローラ（１４，１６など）を検索し、コントローラ（１４，１６など）を検出すると、接続を実行する。接続が完了すると、本体装置１０ａは、接続されたコントローラ（１４，１６など）の識別情報（コントローラＩＤ）を登録する。後述する第３コントローラ１２０などの別のコントローラが無線通信可能に本体装置１０ａに接続される場合についても同様である。
【００９４】
図８はゲーム装置１０の使用態様のその他の例（第３態様）を示す図解図である。図８に示すように、第３態様のゲーム装置１０では、第２態様の場合と同様に、第１コントローラ１４および第２コントローラ１６は、本体装置１０ａから分離された状態で使用される。ただし、第３態様では、第１コントローラ１４および第２コントローラ１６は、接続部材１８を用いて連結され、第１コントローラ１４および第２コントローラ１６が一体的に設けられた１つのコントローラ（以下、「コントローラ１１０」と呼ぶことがある）として使用される。
【００９５】
詳細な説明は省略するが、接続部材１８は、四角柱の形状または中空の六面体の形状に形成されており、レール部材１０ｂと同じレール部材が第１コントローラ１４を着脱する面（第１の側面）に設けられるとともに、レール部材１０ｃと同じレール部材が第２コントローラ１６を着脱する面（第２の側面）に設けられる。ただし、第１の側面は、第２の側面と反対側の面である。
【００９６】
第３態様では、プレイヤは、コントローラ１１０を両手で把持し、左手で第１コントローラ１４を操作するとともに、右手で第２コントローラ１６を操作する。また、第２態様と同様に、本体装置１０ａは机または台の上に立てた状態で載置される。
【００９７】
したがって、第１コントローラ１４が操作されると、コントローラ制御部７０からの操作データが通信モジュール７４から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。同様に、第２コントローラ１６が操作されると、コントローラ制御部９０からの操作データが通信モジュール９４から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。
【００９８】
また、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第１コントローラ１４の通信モジュール７４で受信され、コントローラ制御部７０に入力される。同様に、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第２コントローラ１６の通信モジュール９４で受信され、コントローラ制御部９０に入力される。
【００９９】
この場合にも、第１態様で説明したように、第１コントローラ１４の振動モータ８２ｂはコントローラ制御部７０からの振動データに従って駆動され、第２コントローラ１６の振動モータ１０２ｂはコントローラ制御部９０からの振動データに従って駆動される。
【０１００】
第１コントローラ１４に設けられた振動モータ８２ｂが駆動すると、振動モータ８２ｂによって発生される振動がコントローラ１１０を把持する両手に伝達される。また、第２コントローラ１６に設けられた振動モータ１０２ｂが駆動すると、振動モータ１０２ｂによって発生される振動がコントローラ１１０を把持する両手に伝達される。つまり、プレイヤは、振動を両手で知覚する。
【０１０１】
図９はゲーム装置１０の使用態様のさらに他の例（第４態様）を示す図解図である。図９に示すように、第４態様のゲーム装置１０では、第１コントローラ１４および第２コントローラ１６に代えて、第３コントローラ１２０が使用される。この場合、本体装置１０ａと第３コントローラ１２０によってゲーム装置１０が構成される。
【０１０２】
なお、図９に示す例では、第１コントローラ１４および第２コントローラ１６を本体装置１０ａから分離してあるが、第１コントローラ１４および第２コントローラ１６を使用しない場合には、これらは本体装置１０ａに装着された状態であってもよい。
【０１０３】
第４態様では、プレイヤは、第３コントローラ１２０を両手で把持して操作する。また、第２態様および第３態様と同様に、本体装置１０ａは机または台の上に立てた状態で載置される。
【０１０４】
第３コントローラ１２０は、各種の操作ボタン１２０ａおよび左右２つのアナログスティック（左側アナログスティック１５８および右側アナログスティック１６０）１２０ｂを備える。また、第３コントローラ１２０は、左右２つのグリップ部のそれぞれの内部に振動モータ（振動モータ１６２ｂおよび振動モータ１６４ｂ）１２０ｃが設けられる。このような構成の第３コントローラ１２０は、操作する機能および振動を知覚させる機能については、第３態様のコントローラ１１０と同様であるが、このコントローラ１１０よりも把持し易いコントローラと言える。
【０１０５】
図１０は、第３コントローラ１２０の電気的な構成を示すブロック図である。図１０に示すように、第３コントローラ１２０は、コントローラ制御部１５０を含み、コントローラ制御部１５０には、通信モジュール１５２、メモリ１５４、操作ボタン群１５６、左側アナログスティック１５８、右側アナログスティック１６０、左側振動部１６２および右側振動部１６４が接続される。左側振動部１６２は、モータドライバ１６２ａおよび振動モータ１６２ｂを含み、モータドライバ１６２ａがコントローラ制御部１５０に接続される。また、右側振動部１６４は、モータドライバ１６４ａおよび振動モータ１６４ｂを含み、モータドライバ１６４ａがコントローラ制御部１５０に接続される。また、操作ボタン群１５６が各種の操作ボタン１２０ａに相当する。
【０１０６】
図１０に示す各コンポーネントは、図４に示した第１コントローラ１４に設けられる各コンポーネントと同様の機能を有するため、重複する説明は省略することにする。
【０１０７】
なお、第３コントローラ１２０は、本体装置１０ａに装着しないため、端子７２および端子９２のような端子は設けられていない。ただし、第３コントローラ１２０を、信号ケーブルを用いて本体装置１０ａと接続可能にする場合には、信号ケーブルを接続するための端子が本体装置１０ａおよび第３コントローラ１２０のそれぞれに設けられる。
【０１０８】
第４態様では、第３コントローラ１２０が操作されると、コントローラ制御部１５０からの操作データが通信モジュール１５２から送信され、コントローラ通信部２６で受信され、ＣＰＵ２０に入力される。
【０１０９】
また、ＣＰＵ２０からの振動データは、コントローラ通信部２６から送信され、第３コントローラ１２０の通信モジュール１５２で受信され、コントローラ制御部１５０に入力される。第３コントローラ１２０では、コントローラ制御部１５０が振動データに従って、左側振動部１６２の振動モータ１６２ｂを駆動し、右側振動部１６４の振動モータ１６４ｂを駆動する。ただし、ＣＰＵ２０から送信される振動データは、振動モータ１６２ｂおよび振動モータ１６４ｂで同じ内容でもよいし、それぞれ異なる内容でもよい。
【０１１０】
第３コントローラ１２０の左側のグリップ部に設けられた振動モータ１６２ｂが駆動すると、振動モータ１６２ｂによって発生される振動が第３コントローラ１２０を把持する両手に伝達される。また、第３コントローラ１２０に設けられた振動モータ１６４ｂが駆動すると、振動モータ１６４ｂによって発生される振動が第３コントローラ１２０を把持する両手に伝達される。つまり、プレイヤは、振動を両手で知覚する。
【０１１１】
この第１実施例では、第１コントローラ１４および第２コントローラ１６とは別のコントローラとして図９に示すような形状の第３コントローラ１２０を使用するようにしてあるが、別のコントローラの形状は限定される必要はない。たとえば、モデルガンの形状、アニメキャラクタまたはゲームキャラクタを模した形状、楽器を模した形状または筆記用具を模した形状のような他の形状のコントローラが使用されてもよい。このように、筐体の形状が他の形状であるコントローラのみならず、第１コントローラ１４または／および第２コントローラ１６をアタッチメントに装着したコントローラも別のコントローラとして使用することができる。たとえば、自動車、航空機などのハンドルを模した形状のアタッチメント、モデルガンの形状のアタッチメント、剣を模した形状のアタッチメントなどを用いることができる。
【０１１２】
この第１実施例では、アプリケーションプログラムからオペレーティングシステムに振動データが入力される。そして、オペレーティングシステムから第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０に振動データが送信される。アプリケーションプログラムおよびオペレーティングシステムは、それぞれ、ＣＰＵ２０によって実行されるため、ＣＰＵ２０は、アプリケーション実行部として機能するとともに、オペレーティングシステム実行部として機能する。また、オペレーティングシステム実行部は、本体機能を制御するため、ＣＰＵ２０は、振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂの振動を制御する振動制御部としても機能する。
【０１１３】
上述したように、この第１実施例では、ゲーム装置１０の使用態様に応じて使用されるコントローラが異なる場合があり、また、第１コントローラ１４および第２コントローラ１６に振動データを送信するときの通信方法が異なる場合がある。このため、この第１実施例では、振動制御を有するアプリケーションの開始時または所定のイベントが発生したときなどのタイミングで、ゲーム装置１０の使用態様を判別するようにしてある。
【０１１４】
ただし、ゲーム装置１０の使用態様を判別する前に、第１コントローラ１４および第２コントローラ１６が本体装置１０ａに装着されているかどうかが判断されるとともに、第１コントローラ１４および第２コントローラ１６が本体装置１０ａから分離されている場合には、本体装置１０ａと第１コントローラ１４、第２コントローラ１６および別のコントローラ（第３コントローラ１２０）との間でペアリング処理が実行される。
【０１１５】
たとえば、ゲームのアプリケーションプログラムが実行される場合には、プレイヤは、ゲーム装置１０の使用態様の設定画面（図示せず）を参照して、第１態様−第４態様のいずれの使用態様でゲームをプレイするのかを選択する。また、第４態様においては、第３コントローラ１２０などの別のコントローラの種類を選択できる場合もある。この選択結果が本体機能を制御するオペレーティングシステムに通知される。ただし、アプリケーションプログラムの種類によっては、予め決定されたゲーム装置１０の使用態様または／および第３コントローラ１２０などの別のコントローラの使用の有無が強制的に選択されることもある。
【０１１６】
第１態様でゲーム装置１０が使用される場合には、ＣＰＵ２０は、振動データを有線通信で第１コントローラ１４および第２コントローラ１６に送信する。また、第２態様または第３態様でゲーム装置１０が使用される場合には、ＣＰＵ２０は、振動データを無線通信で第１コントローラ１４および第２コントローラ１６に送信する。第１コントローラ１４では、コントローラ制御部７０からの振動データに従って振動モータ８２ｂが駆動され、第２コントローラ１６では、コントローラ制御部９０からの振動データに従って振動モータ１０２ｂが駆動される。振動データに含まれる振幅を示す電圧値の印加電圧が振動モータ８２ｂおよび振動モータ１０２ｂに印加される。ただし、振動データで指定する電圧値に対して振幅が一意に決まるわけではなく、実際の振動の振幅は、振動の周波数や装置の筐体の特性によって定まる。
【０１１７】
また、第４態様でゲーム装置１０が使用され、別のコントローラとして第３コントローラ１２０が使用される場合には、ＣＰＵ２０は、振動データを無線通信で第３コントローラ１２０に送信する。第３コントローラ１２０では、コントローラ制御部１５０からの振動データに従って振動モータ１６２ｂおよび振動モータ１６４ｂが駆動される。第４態様においても、振動データに含まれる振幅を示す電圧値の印加電圧が振動モータ１６２ｂおよび振動モータ１６４ｂに印加される。
【０１１８】
上述したゲーム装置１０（本体装置１０ａ）では、或るゲームのアプリケーション（ゲームプログラム）を実行した場合に、仮想空間内（仮想ゲーム空間内）で進行するゲームをプレイすることができる。詳細な説明および図示は省略するが、この第１実施例では、仮想空間は、３次元の仮想空間である。図１１には、この第１実施例のゲームにおいて、表示装置１２に表示されるゲーム画面２００の一例が表示される。詳細な説明は省略するが、仮想空間内に、草木（花も含む）オブジェクト、地形オブジェクトおよび建物オブジェクトのような仮想オブジェクトが設けられるとともに、プレイヤオブジェクト（プレイヤキャラクタ）２０２が配置される。また、仮想空間内には、敵オブジェクト（敵キャラクタ）２０４および村人オブジェクト（村人キャラクタ）などのノンプレイヤオブジェクト（ノンプレイヤキャラクタ）も配置される。図示は省略するが、仮想空間内には、アイテムオブジェクト（アイテムキャラクタ）が配置されることもある。
【０１１９】
たとえば、プレイヤオブジェクト２０２は、プレイヤの操作に従って、仮想空間内に設定されたマップ内を自由に移動することができる。プレイヤオブジェクト２０２は、仮想空間内において、敵オブジェクト２０４と闘ったり、アイテムを取得したり、アイテムを使用したり、目的の場所ないし位置に到達したりして、最終的な目的を達成する。
【０１２０】
また、プレイヤオブジェクト２０２の体力値が無くなった場合、または、プレイヤオブジェクト２０２が敵オブジェクト２０４に倒された場合には、ゲームオーバーになる。ただし、プレイヤオブジェクト２０２の残機を設定しておき、一定回数のミスを許容するようにしてもよい。かかる場合には、プレイヤオブジェクト２０２の残機数が０になった場合に、ゲームオーバーになる。
【０１２１】
ゲーム中では、仮想空間内に振動を発生するキャラクタないしオブジェクト（以下、「振動源のオブジェクト」ということがある）が配置（出現）され、振動源のオブジェクトを含むゲーム画面２００が表示されることがある。振動源は、ゲーム画面２００に表示されている場合および所定のイベントが発生した場合に振動を発生させる。
【０１２２】
たとえば、敵オブジェクト２０４が振動源であれば、敵オブジェクト２０４が仮想空間内に配置（出現）され、ゲーム画面２００に表示されている状態において、敵オブジェクト２０４が咆哮した（大きい声を発した）場合および敵オブジェクト２０４が足踏みした場合などに、振動が発生される。また、爆弾オブジェクトのような所定のアイテムが振動源であれば、爆弾オブジェクトが仮想空間内に配置（出現）され、ゲーム画面２００に表示されている状態において、爆弾オブジェクトが爆発した場合に、振動が発生される。
【０１２３】
ただし、これらは一例であり、敵オブジェクト２０４およびアイテム以外のキャラクタないしオブジェクトが振動源のオブジェクトに設定されている場合もある。
【０１２４】
振動が発生される場合には、振動データがゲームのアプリケーションプログラムで生成されまたは読み出され、オペレーティングシステムに送信される。オペレーティングシステムは、アプリケーションプログラムからの振動データに従って振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂを駆動する。
【０１２５】
この第１実施例では、図１２に示すように、仮想空間内に、振動源ＶＳのオブジェクトおよび振動源ＶＳで発生された振動を受容する受容部（第１実施例では、受容部Ｌおよび受容部Ｒ）が設定される。ただし、振動源ＶＳのオブジェクトはゲームの開発者等によって予め設定されており、また、受容部はゲームの開発者等によって決定された方法でゲーム空間内に設定される。
【０１２６】
図１２は仮想空間を真上から見た場合の図解図である。仮想空間にはプレイヤオブジェクト２０２および敵オブジェクト２０４に加えて、仮想カメラ２１０が配置される。ただし、図１２では、敵オブジェクト２０４を円で示してある。なお、図１２では、振動の発生および受容に関係の無いキャラクタおよびオブジェクトを省略してある。
【０１２７】
図１２に示すように、プレイヤオブジェクト２０２の前方に敵オブジェクト２０４が配置され、プレイヤオブジェクト２０２の後方に仮想カメラ２１０が配置される。仮想カメラ２１０の左右方向における画角の左端と右端を破線で示してある。図１２では、三人称視点のゲームの場合について示してあるが、一人称視点のゲームの場合には、プレイヤオブジェクト２０２の頭部の位置が仮想カメラ２１０の位置に一致するように、プレイヤオブジェクト２０２および仮想カメラ２１０が配置される。以下で説明する内容は、一人称視点のゲームの場合にも、同様に適用可能である。
【０１２８】
上述したように、この第１実施例では、第１態様−第３態様でゲーム装置１０を使用する場合には、第１コントローラ１４および第２コントローラ１６が使用され、２つの振動モータ８２ｂ、１０２ｂがそれぞれ振動される。また、第４態様でゲーム装置１０を使用し、第３コントローラ１２０を使用する場合にも、２つの振動モータ１６２ｂ、１６４ｂがそれぞれ振動される。
【０１２９】
したがって、仮想空間には、左右二つの受容部Ｌおよび受容部Ｒが設定され、振動源ＶＳで発生された振動が受容部Ｌおよび受容部Ｒのそれぞれで受容され、受容部Ｌおよび受容部Ｒのそれぞれで受容された振動が使用時に左右に配置される２つの振動部で発生される。第１態様−第３態様では、受容部Ｌで受容される振動が振動部８２（第１コントローラ１４）で発生され、受容部Ｒで受容される振動が振動部１０２（第２コントローラ１６）で発生される。また、第４態様で、第３コントローラ１２０が使用される場合には、受容部Ｌで受容された振動が左側振動部１６２（左側のグリップ）で発生され、受容部Ｒで受容された振動が右側振動部１６４（右側のグリップ）で発生される。
【０１３０】
図１２に示す例では、振動源ＶＳは、仮想空間における敵オブジェクト２０４の行動によって生じる振動を発生するものであり、敵オブジェクト２０４の位置に設定される。受容部Ｌは、プレイヤオブジェクト２０２の左手の位置に設定され、受容部Ｒは、プレイヤオブジェクト２０２の右手の位置に設定される。つまり、第１実施例では、振動源ＶＳ、受容部Ｌおよび受容部Ｒは、それぞれ点で表され、図１２においては、それぞれ×印で示してある。このことは、後述する図１４、図１５、図１９、図２１および図２２に示される×印について同じである。
【０１３１】
また、受容部Ｌで受容される振動の大きさは、振動源ＶＳと受容部Ｌの間における仮想空間の状況（空間状況または空間状態）に応じて振動源ＶＳで発生される振動が減衰することにより決定される。同様に、受容部Ｒで受容される振動の大きさは、振動源ＶＳと受容部Ｒの間における空間状況または空間状態（以下、単に「空間状況」という）に応じて振動源ＶＳで発生される振動が減衰されることにより決定される。
【０１３２】
ここで、本明細書においては、空間状況とは、振動源ＶＳと受容部Ｌおよび受容部Ｒのそれぞれの距離ｄを意味する。図１２に示すように、振動源ＶＳと受容部Ｌの距離ｄを距離ｄＬと表記し、振動源ＶＳと受容部Ｒの距離ｄを距離ｄＲと表記することがある。さらに、空間状況は、振動源ＶＳと受容部Ｌおよび受容部Ｒのそれぞれの間の伝達媒体の情報を含んでもよい。また、第１実施例においては、振動は仮想空間内において空中を伝達されるものとする。
【０１３３】
この第１実施例では、振動源ＶＳからの振動は、距離ｄの２乗に反比例して減衰され、受容部Ｌおよび受容部Ｒにそれぞれ伝達される。上述したように、振動データは周波数の値と振幅を示す電圧値の組についてのデータあるため、一例として、電圧値が距離ｄの２乗に反比例して低減される。低減される電圧値、すなわち、コントローラ（１４，１６，１２０）に送信される振動データの電圧値は、数式１に従って算出される。数１において、Ｖは低減された電圧値であり、ｃは減衰係数であり、Ｖｏは振動源ＶＳで発生される振動に対応する振動データの電圧値（低減される前の電圧値）である。
【０１３４】
［数式１］
Ｖ＝ｃ×Ｖｏ
図１３は距離ｄに応じた減衰係数ｃの変化を示すグラフである。図１３において、実線で示すように、この第１実施例では、減衰係数ｃは距離ｄの２乗に反比例して変化される。
【０１３５】
なお、物理法則に従う場合には、上記のように、減衰係数ｃは距離ｄの２乗に反比例する値であるが、仮想空間においては、減衰係数ｃは距離ｄに反比例して減衰されてもよい。
【０１３６】
また、上記のように、減衰係数ｃが距離ｄの２乗に反比例させると、距離ｄが小さい場合に、減衰係数ｃが１を超えてしまう。このため、減衰係数ｃが１を超えないように、別の方法で算出されてもよい。
【０１３７】
たとえば、距離ｄに調整値（たとえば、１）を加えるようにしてもよい。かかる場合には、図１３の一点鎖線で示すように、距離ｄの２乗に反比例させる場合の波形を距離ｄが１だけ左にずれた波形となり、距離ｄが小さくても、減衰係数ｃが１を超えることがない。
【０１３８】
また他の方法としては、減衰係数ｃが１でクランプされるようにしてもよい。かかる場合には、図１３の点線で示すように、距離ｄの２乗に反比例させるが、距離ｄが１未満では、減衰係数ｃが１で固定される。
【０１３９】
さらに他の方法としては、減衰係数ｃが１を超えない別の関数で算出されるようにしてもよい。たとえば、別の関数は、指数関数ｅｘｐ（−ｄ）であり、図１３の破線で示すように、距離ｄの大きさに拘わらず１を超えることはない。
【０１４０】
また、振動は単に減衰されるのみならず、距離ｄが所定値（限界距離Ｄ）を超える場合には、振動を発生させない（減衰係数ｃを計算しない）ようにしてもよい。図１３を用いて説明した減衰係数ｃは距離ｄが無限大に近づいても０にはならず、減衰係数ｃが所定値（たとえば、０．１）を下回るとほぼ変化がないため、距離ｄの違いに応じた振動を提示するのは困難である。また、減衰係数ｃを計算しないでよい範囲を設けることで、計算処理負荷を軽減することもできる。
【０１４１】
ただし、限界距離Ｄを超えたところで急に減衰係数ｃが０になってしまうと、振動が急に途絶えることとなり、プレイヤは違和感ないし不連続感を覚えるため、このような不都合を回避するように、限界距離Ｄにおいて０になるような単調減少関数（たとえば、１−ｄ／Ｄ）の値を減衰係数ｃに乗算した減衰係数を採用してもよい。
【０１４２】
なお、この第１実施例では、振動データの周波数の値に関係無く、減衰係数ｃを用いて振幅を示す電圧値を低減させるようにしてあるが、これに限定される必要はない。周波数が大きい場合には、周波数が低い場合に比べて、振動の減衰量（減衰率）が大きいため、周波数が高くなるにつれて、振動の減衰率が大きくなるような別の関数の値を減衰係数ｃに乗算した減衰係数を採用するようにしてもよい。この場合、上記の単調減少関数の値がさらに乗算されてもよい。
【０１４３】
また、振動データは受容部Ｌおよび受容部Ｒのそれぞれについて算出されるため、減衰係数ｃも受容部Ｌおよび受容部Ｒのそれぞれについて算出される。以下、各減衰係数ｃを区別する必要がある場合には、受容部Ｌについての振動データ（以下、「左側振動データ」と呼ぶことがある）を算出するための減衰係数ｃを減衰係数ｃＬと表記し、受容部Ｒについての振動データ（以下、「右側振動データ」と呼ぶことがある）を算出するための減衰係数ｃを減衰係数ｃＲと表記ことにする。
【０１４４】
以上のように、図１２（および後述する図１４）に示す例では、受容部Ｌおよび受容部Ｒは、プレイヤオブジェクト２０２の左手および右手の位置に基づいて設定される。なお、図１２に示す例では、受容部Ｌおよび受容部Ｒは、プレイヤオブジェクト２０２の左手および右手と同じ位置に設定されるが、これに限定される必要はない。たとえば、後述する図１４の例のように、受容部Ｌおよび受容部Ｒは、プレイヤオブジェクト２０２の左手および右手の位置に基づいて決まる、左手および右手の位置以外の位置に設定しても良い。
【０１４５】
また、プレイヤオブジェクト２０２が左手および右手を有していない場合には、プレイヤオブジェクトの左右に備わった所定の部位を左手および右手とみなして、当該部位の位置に基づいて受容部Ｌおよび受容部Ｒを設定してもよい。たとえば、プレイヤオブジェクト２０２が自動車を模したオブジェクトである場合には、左側および右側の車輪（前輪または後輪）の位置に、または、左側および右側のヘッドライトの位置に受容部Ｌおよび受容部Ｒを設定してもよい。
【０１４６】
また、プレイヤオブジェクト２０２が剣のオブジェクトまたは／および盾のオブジェクトを持つ場合には、プレイヤオブジェクト２０２の手の描画処理が省かれることがある。かかる場合には、プレイヤオブジェクト２０２の左手および右手に相当する位置に受容部Ｌおよび受容部Ｒを設定してもよい。具体的には、剣のオブジェクトの柄に対応する位置に受容部Ｌ（または受容部Ｒ）を設定し、盾のオブジェクトの持ち手に対応する位置に受容部Ｒ（または受容部Ｌ）を設定してもよい。
【０１４７】
図１４は仮想空間における受容部Ｌおよび受容部Ｒの設定方法の他の例を示す図解図である。図１４に示す例では、プレイヤオブジェクト２０２の左手および右手の位置を用いて、左手および右手の位置以外の位置に、受容部Ｌおよび受容部Ｒが設定される場合の例が示される。
【０１４８】
なお、図１４に示す例では、上述したように、プレイヤオブジェクト２０２の手の位置に設定される受容部Ｌおよび受容部Ｒを受容部Ｌ１および受容部Ｒ１と表記し、プレイヤオブジェクト２０２の手以外の位置に設定される受容部Ｌおよび受容部Ｒには、別の数字を付加して表記することにより、異なる位置に設定される受容部Ｌおよび受容部Ｒを識別するようにしてある。以下、第１実施例においては、異なる位置に設定される受容部Ｌおよび受容部Ｒを識別可能に表記する場合も同様に、付加される数字を変えることにする。
【０１４９】
図１４に示すように、仮想カメラ２１０の位置（視点位置）とプレイヤオブジェクト２０２の左手の位置を通る直線上の位置に受容部Ｌ２が設定され、視点位置とプレイヤオブジェクト２０２の右手の位置を通る直線上の位置に受容部Ｒ２が設定されてもよい。たとえば、受容部Ｌ２の位置は、視点位置とプレイヤオブジェクト２０２の左手の位置の中点であり、受容部Ｒ２の位置は、視点位置とプレイヤオブジェクト２０２の右手の位置の中点であるが、中点に限定される必要はない。
【０１５０】
また、図１４に示すように、プレイヤオブジェクト２０２の左手の位置と右手の位置を通る直線上であり、左手の位置および右手の位置以外の位置に、受容部Ｌ３および受容部Ｒ３が設定されてもよい。図１４に示す例では、受容部Ｌ３は仮想カメラ２１０の画角の左端よりも外側（左側）に設定され、受容部Ｒ３は仮想カメラ２１０の画角の右端よりも外側（右側）に設定される。ただし、これは一例であり、受容部Ｌ３は画角の左端の線上の位置に設定されてもよいし、画角の左端とプレイヤオブジェクト２０２の左手の間の位置に設定されてもよい。同様に、受容部Ｒ３は画角の右端の線上の位置に設定されてもよいし、画角の右端とプレイヤオブジェクト２０２の右手の間の位置に設定されてもよい。
【０１５１】
なお、上述したように、プレイヤオブジェクト２０２が自動車の場合には、自動車の左右の車輪または左右のヘッドライトの位置に基づいて受容部Ｌ２、Ｌ３および受容部Ｒ２、Ｒ３が設定されてもよい。
【０１５２】
図１５は仮想空間における受容部Ｌおよび受容部Ｒの設定方法のその他の例を示す図解図である。図１５に示す例では、プレイヤオブジェクト２０２の左手および右手の位置に関係なく、受容部Ｌおよび受容部Ｒが設定される場合の例が示される。具体的には、図１５に示す例では、プレイヤオブジェクト２０２の向きまたは仮想カメラ２１０の向きに応じて、受容部Ｌおよび受容部Ｒが設定される。
【０１５３】
図１５に示すように、プレイヤオブジェクト２０２の顔または胴体が向いている方向と直交する面上であり、プレイヤオブジェクト２０２を基準にした左右の点に受容部Ｌ４および受容部Ｒ４が設定されてもよい。図１５に示す例では、受容部Ｌ４は仮想カメラ２１０の画角の左端とプレイヤオブジェクト２０２の間の位置に設定され、受容部Ｒ４は仮想カメラ２１０の画角の右端とプレイヤオブジェクト２０２の間の位置に設定される。ただし、受容部Ｌ４は画角の左端の線上に設定されてもよいし、画角の左端の外側（左側）に設定されてもよい。また、受容部Ｒ４は画角の右端の線上に設定されてもよいし、画角の右端の外側（右側）に設定されてもよい。
【０１５４】
なお、上述したように、プレイヤオブジェクト２０２が自動車または飛行機の場合には、自動車または飛行機の進行方向に直交する面上であり、自動車および飛行機を基準にした左右の点に受容部Ｌ４および受容部Ｒ４が設定されてもよい。
【０１５５】
また、図１５に示すように、仮想カメラ２１０が向いている方向（カメラ方向）と直交する面上であり、仮想カメラ２１０の位置（視点位置）を基準とした左右の点に受容部Ｌ５および受容部Ｒ５が設定されてもよい。図１５に示す例では、受容部Ｌ５は仮想カメラ２１０の画角の左端の外側（左側）の位置に設定され、受容部Ｒ５は仮想カメラ２１０の画角の右端の外側（右側）の位置に設定される。ただし、受容部Ｌ５は、仮想カメラ２１０の画角の左端の線上に設定されてもよいし、仮想カメラ２１０の画角の左端と仮想カメラ２１０の間の位置に設定されてもよい。また、受容部Ｒ５は、仮想カメラ２１０の画角の右端の線上に設定されてもよいし、仮想カメラ２１０の画角の右端と仮想カメラ２１０の間の位置に設定されてもよい。プレイヤオブジェクト２０２の手の位置または向いている方向に基づいて受容部を設定する場合には、プレイヤオブジェクト２０２が感じる振動をプレイヤに感じさせることができ、プレイヤ自身がプレイヤオブジェクト２０２になったような印象を持たせて、ゲームの臨場感を高めることができる。また、仮想カメラ２１０の向きに基づいて受容部Ｌおよび受容部Ｒを設定する場合には、プレイヤオブジェクト２０２を後ろから操作しているプレイヤ自身が感じる振動を表現することで、プレイヤ自身が仮想空間内にいるかのような印象を持たせることができる。
【０１５６】
図１５に示す例によって受容部Ｌおよび受容部Ｒの位置を設定することによって、プレイヤオブジェクト２０２の手の位置が高速に変化して、距離ｄＬ、ｄＲが短時間で頻繁に変化するような場合であっても、計算処理の負荷を大きくすることなく受容部Ｌおよび受容部Ｒの位置を算出できる。また、仮想カメラ２１０の向きに基づいた受容部Ｌおよび受容部Ｒの設定は、プレイヤオブジェクト２０２の位置や向きが頻繁に変化する場合にも計算処理の負荷を大きくすることなく受容部Ｌおよび受容部Ｒの位置を算出できる。また、計算処理の負荷低減の目的ではなく、ゲームの開発者等がプレイヤに持たせたい印象に合わせて、プレイヤオブジェクト２０２の手の位置に拘わらず受容部Ｌおよび受容部Ｒを設定する場合もある。
【０１５７】
以上のように、図１２、図１４および図１５を用いて、受容部Ｌおよび受容部Ｒを仮想空間に設定する複数の例を説明した。一般的に、受容部Ｌと受容部Ｒの距離が長くなると、距離ｄＬと距離ｄＲが同じでない場合には、結果として、振動モータ８２ｂ、１６２ｂに与えられる左側振動データと振動モータ１０２ｂ、１６４ｂに与えられる右側振動データの差異が大きくなり、ステレオ効果が強調されると考えられる。ステレオ効果をどの程度強調または緩和するかについては、ゲーム体験とのバランスを考慮して、ゲーム毎にまたはゲーム内のシーン毎に最適な位置に受容部Ｌおよび受容部Ｒが設定される。
【０１５８】
図１６は図３に示したＲＡＭ２２のメモリマップ３００の一例を示す図解図である。図１６に示すように、ＲＡＭ２２は、プログラム記憶領域３０２およびデータ記憶領域３０４を含む。プログラム記憶領域３０２には、各種プログラムが記憶される。各種プログラムは、ゲーム装置１０に電源が投入された後の適宜のタイミングでフラッシュメモリ２４からその一部または全部が読み出されてＲＡＭ２２に記憶される。
【０１５９】
なお、各種プログラムは、フラッシュメモリ２４に代えて、ゲーム装置１０に着脱可能なメモリまたは光ディスクから取得されても良いし、ゲーム装置１０が他の情報処理装置（コンピュータ）との通信機能を備える場合には、当該他の情報処理装置から、直接的にまたはネットワークを介して取得（ダウンロード）されてもよい。
【０１６０】
図１６に示すように、プログラム記憶領域３０２には、メイン処理プログラム３０２ａ、画像生成プログラム３０２ｂ、画像表示プログラム３０２ｃ、通信プログラム３０２ｄ、操作検出プログラム３０２ｅ、使用態様判別プログラム３０２ｆ、振動制御プログラム３０２ｇおよびアプリケーションプログラム３０２ｈなどが記憶される。
【０１６１】
メイン処理プログラム３０２ａは、ゲーム装置１０の動作のメインルーチンを処理するためのプログラム（オペレーティングシステム）である。画像生成プログラム３０２ｂは、ポリゴンデータやテクスチャデータなどのデータを含む画像生成用データ３０４ｂを用いて、表示装置１２に表示する画像に対応する画像データを生成するためのプログラムである。画像表示プログラム３０２ｃは、画像生成プログラム３０２ｂに従って生成した画像データを表示装置１２に出力するためのプログラムである。
【０１６２】
通信プログラム３０２ｄは、第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０などのコントローラとの間でデータの送受信（通信）を行うためのプログラムである。操作検出プログラム３０２ｅは、第１コントローラ１４、第２コントローラ１６および第３コントローラ１２０などのコントローラからの操作データを検出し、操作データバッファ３０４ａに記憶するためのプログラムである。ただし、各コントローラから送信される操作データには、当該コントローラを個別に識別可能な情報が付加される。
【０１６３】
使用態様判別プログラム３０２ｆは、ゲーム装置１０の使用態様を判別するためのプログラムである。ただし、使用態様判別プログラム３０２ｆは、第３コントローラ１２０を使用するかどうかについても判別する。つまり、使用態様判別プログラム３０２ｆでは、第１コントローラ１４、第２コントローラ１６およびこれらと異なる別のコントローラ（第３コントローラ１２０）の使用態様が判別される。
【０１６４】
振動制御プログラム３０２ｇは、アプリケーションプログラム３０２ｈからの要求に応じて、本体装置１０ａに通信可能に接続されたコントローラ（１４，１６，１２０）に設けられる振動モータ８２ｂ、１０２ｂ、１６２ｂ、１６４ｂ（１４ｃ，１６ｃ，１２０ｃ）を駆動制御するためのプログラムである。この第１実施例では、第１態様−第３態様の場合には、アプリケーションプログラム３０２ｈから第１コントローラ１４の振動モータ８２ｂを駆動させるための左側振動データ３０４ｊがオペレーティングシステムに入力されるとともに、第２コントローラ１６の振動モータ１０２ｂを駆動させるための右側振動データ３０４ｋがオペレーティングシステムに入力される。また、第４態様の場合には、アプリケーションプログラム３０２ｈから第３コントローラ１２０の振動モータ１６２ｂを駆動させるための左側振動データ３０４ｊがオペレーティングシステムに入力されるとともに、第３コントローラ１２０の振動モータ１６４ｂを駆動させるための右側振動データ３０４ｋがオペレーティングシステムに入力される。
【０１６５】
アプリケーションプログラム３０２ｈは、上述したように、ゲームなどのアプリケーションについてのプログラムである。ただし、この第１実施例では、アプリケーションプログラム３０２ｈの実行中に、振動を提示することがオペレーティングシステムに要求（指示）されるとともに、振動データがオペレーティングシステムに入力されることがある。ただし、振動を提示する場合には、振動源ＶＳで発生された振動に対応する振動データ（振動源振動データ３０４ｇ）から、受容部Ｌおよび受容部Ｒのそれぞれに伝達される振動に対応する左側振動データ３０４ｊおよび右側振動データ３０４ｋが数式１に従って算出される。このとき、振動源ＶＳと受容部Ｌの距離ｄＬおよび振動源ＶＳと受容部Ｒとの距離ｄＲが算出され、受容部Ｌに伝達される振動を算出するための減衰係数ｃＬおよび受容部Ｒに伝達される振動を算出するための減衰係数ｃＲも算出される。また、この明細書においては、アプリケーションプログラム３０２ｉは、本体機能には含まれないプログラムを意味することにする。
【０１６６】
なお、図示等は省略するが、プログラム記憶領域３０２には、メッセージの送受信を行う他の本体機能についてのプログラムも記憶される。また、プログラム記憶領域３０２には、アプリケーションプログラム３０２ｈとは異なる他のアプリケーションプログラムが記憶されることもある。
【０１６７】
データ記憶領域３０４には、操作データバッファ３０４ａ、画像生成用データ３０４ｂ、使用態様データ３０４ｃ、第３コントローラ使用データ３０４ｄ、振動源位置データ３０４ｅ、受容部位置データ３０４ｆ、振動源振動データ３０４ｇ、距離データ３０４ｈ、減衰係数データ３０４ｉ、左側振動データ３０４ｊおよび右側振動データ３０４ｋなどが記憶される。
【０１６８】
操作データバッファ３０４ａは、操作検出プログラム３０２ｅによって検出された操作データを時系列に従って記憶する。画像生成用データ３０４ｂは、表示装置１２に表示する画像（ゲーム画面２００などの画面）に対応する画像データを生成するためのポリゴンデータおよびテクスチャデータなどのデータである。
【０１６９】
使用態様データ３０４ｃは、使用態様判別プログラム３０２ｆに従って判別されたゲーム装置１０の使用態様についてのデータである。たとえば、使用態様データ３０４ｃは、２ビットのレジスタで構成され、第１態様が判別されるとレジスタに“００”が設定され、第２態様が判別されるとレジスタに“０１”が設定され、第３態様が判別されるとレジスタに“１０”が設定され、第４態様が判別されるとレジスタに“１１”が設定される。
【０１７０】
第３コントローラ使用データ３０４ｄは、第３コントローラ１２０を使用するかどうかを判別するためのデータである。振動源位置データ３０４ｅは、アプリケーションプログラム３０２ｈを実行することによって仮想空間に出現（配置）された振動源ＶＳの位置（座標）についてのデータである。受容部位置データ３０４ｆは、アプリケーションプログラム３０２ｈを実行することによって仮想空間に設定された受容部Ｌおよび受容部Ｒのそれぞれについての位置（座標）についてのデータである。
【０１７１】
振動源振動データ３０４ｇは、アプリケーションプログラム３０２ｈが実行されることによって振動源ＶＳから発生される振動に対応する振動データである。距離データ３０４ｈは、振動源ＶＳと受容部Ｌとの距離ｄＬについてのデータおよび振動源ＶＳと受容部Ｒとの距離ｄＲについてのデータである。減衰係数データ３０４ｉは、受容部Ｌに伝達される振動、すなわち、振動モータ８２ｂまたは振動モータ１６２ｂを駆動する左側振動データ３０４ｊを算出するための減衰係数ｃＬについてのデータおよび受容部Ｒに伝達される振動、すなわち、振動モータ１０２ｂまたは振動モータ１６４ｂを駆動する右側振動データ３０４ｋを算出するための減衰係数ｃＲについてのデータである。
【０１７２】
左側振動データ３０４ｊは、振動モータ８２ｂまたは振動モータ１６２ｂを駆動させるための振動データである。右側振動データ３０４ｋは、振動モータ１０２ｂまたは振動モータ１６４ｂを駆動するための振動データである。
【０１７３】
図示は省略するが、データ記憶領域３０４には、ゲーム装置１０の動作を制御するために、必要な他のデータが記憶されたり、必要なカウンタ（タイマ）が設けられたりする。
【０１７４】
図１７は図３に示したＣＰＵ２０のゲーム全体処理についての限定しない一例を示すフロー図である。たとえば、ゲーム全体処理は、ゲームのアプリケーションプログラム（ここでは、アプリケーションプログラム３０２ｈ）に従って実行される。なお、この第１実施例では、基本的には、図１７に示すフロー図の各ステップの処理をＣＰＵ２０が実行するものとして説明するが、ＣＰＵ２０以外のプロセッサや専用回路が一部のステップを実行するようにしてもよい（図１８も同様）。
【０１７５】
プレイヤによってアプリケーションプログラム３０２ｈの実行が指示されると、ＣＰＵ２０は、ゲーム全体処理を開始し、ステップＳ１で、初期処理を実行する。初期処理では、たとえば、ＣＰＵ２０は、ゲーム画面２００を生成および表示するための仮想空間を構築し、この仮想空間に登場するプレイヤオブジェクト２０２および敵オブジェクト２０４等の各キャラクタないし各オブジェクトを初期位置に配置する。また、ＣＰＵ２０は、ゲーム処理（Ｓ５）で用いる各種パラメータの初期値を設定する。
【０１７６】
なお、詳細な説明は省略するが、ゲーム全体処理の開始に先立って、ゲーム装置１０の使用態様が判別される。ただし、ゲーム装置１０の使用態様が判別される前に、第１コントローラ１４および第２コントローラ１６が本体装置１０ａに装着されているかどうかが判断され、第１コントローラ１４および第２コントローラ１６が本体装置１０ａから分離されている場合には、本体装置１０ａと第１コントローラ１４、第２コントローラ１６および別のコントローラ（第３コントローラ１２０）との間でペアリング処理が実行される。ゲーム装置１０の使用態様が判別されると、判別された使用態様に応じた使用態様データ３０４ｃがデータ記憶領域３０４に記憶される。また、第３コントローラ１２０の使用の有無に応じた第３コントローラ使用データ３０４ｄがデータ記憶領域３０４に記憶される。
【０１７７】
続いて、ＣＰＵ２０は、ステップＳ３で、コントローラ（１４，１６，１２０）から送信されてくる操作データを取得し、ステップＳ５で、ゲーム処理を実行する。たとえば、ゲーム処理では、操作データに従ってプレイヤオブジェクト２０２を移動させるなどの任意のアクションを実行する。また、アプリケーションプログラム３０２ｈに従って敵オブジェクト２０４を移動させるなどの任意のアクションを実行する。さらに、必要に応じて、アイテムを仮想空間に出現させる（配置する）。さらにまた、必要に応じて、振動源ＶＳから振動を発生させる。
【０１７８】
次のステップＳ７では、ＣＰＵ２０およびＧＰＵは、表示装置１２に表示するためのゲーム画像を生成および表示する。簡単に説明すると、ＣＰＵ２０およびＧＰＵは、ステップＳ５のゲーム処理の結果を表すデータおよび画像生成用データ３０４ｂをＲＡＭ２２から読み出し、ＶＲＡＭにゲーム画像データを生成し、表示装置１２に出力する。
【０１７９】
続いて、ステップＳ９では、振動源ＶＳから振動を発生させるかどうかを判断する。ステップＳ９で“ＮＯ”であれば、つまり、振動源ＶＳから振動を発生させない場合には、ステップＳ２３に進む。一方、ステップＳ９で“ＹＥＳ”であれば、つまり、振動源ＶＳから振動を発生する場合には、ステップＳ１１で、振動源振動データ３０４ｇを生成する。ここでは、ＣＰＵ２０は、振動源ＶＳから発生される振動に対応する振動データ（振動源振動データ３０４ｇ）をデータ記憶領域３０４に記憶する。上述したように、振動源振動データ３０４ｇはＣＰＵ２０によって生成されてもよいし、予めフラッシュメモリ２４に記憶された振動源振動データ３０４ｇがＣＰＵ２０によって読み出されてもよい。また、このとき、仮想空間における振動源ＶＳの位置のデータ（振動源位置データ３０４ｅ）もデータ記憶領域３０４に記憶される。
【０１８０】
続くステップＳ１３では、受容部Ｌおよび受容部Ｒを設定する。受容部Ｌおよび受容部Ｒは、上記のいずれかの方法で仮想空間に設定される。このとき、受容部Ｌの位置および受容部Ｒの位置のそれぞれについてのデータ（受容部位置データ３０４ｆ）がデータ記憶領域３０４に記憶される。
【０１８１】
次にステップＳ１５では、振動源ＶＳと受容部Ｌの距離ｄＬおよび振動源ＶＳと受容部Ｒの距離ｄＲを算出する。このとき、距離ｄＬおよび距離ｄＲについてのデータ（距離データ３０４ｈ）がデータ記憶領域３０４に記憶される。続いて、ステップＳ１７では、減衰係数ｃを算出する。ここでは、受容部Ｌについての減衰係数ｃＬおよび受容部Ｒについての減衰係数ｃＲが算出され、減衰係数ｃＬおよび減衰係数ｃＲのデータ（減衰係数データ３０４ｉ）がデータ記憶領域３０４に記憶される。
【０１８２】
そして、ステップＳ１９では、数１に基づいて、左側振動データ３０４ｊおよび右側振動データ３０４ｋを算出する。つまり、振動源ＶＳで発生され受容部Ｌおよび受容部Ｒに伝達される振動に対応する振動データが算出される。算出された左側振動データ３０４ｊおよび右側振動データ３０４ｋは、データ記憶領域３０４に記憶される。
【０１８３】
次のステップＳ２１では、左側振動データ３０４ｊおよび右側振動データ３０４ｋを振動制御部（オペレーティングシステム）に送信する。このとき、コントローラ（１４，１６，１２０）を振動させることの指示も振動制御部に送信される。そして、ステップＳ２３では、ゲームを終了するかどうかを判断する。ステップＳ２３の判断は、たとえば、ゲームオーバーになったか否か、あるいは、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップＳ２３で“ＮＯ”であれば、つまりゲームを終了しない場合には、ステップＳ３に戻る。一方、ステップＳ２３で“ＹＥＳ”であれば、つまりゲームを終了する場合には、ゲーム全体処理を終了する。
【０１８４】
図１８は図３に示したＣＰＵ２０の振動制御処理の限定しない一例を示すフロー図である。たとえば、ＣＰＵ２０は、アプリケーションプログラムから振動を発生させることを要求（指示）されると、振動制御処理を開始する。ただし、左側振動データ３０４ｊおよび右側振動データ３０４ｋのそれぞれについて、振動制御処理が並行して実行される。
【０１８５】
図１８に示すように、ＣＰＵ２０は、振動制御処理を開始すると、ステップＳ５１で、アプリケーションプログラムから振動データが入力されたかどうかを判断する。ステップＳ５１で“ＮＯ”であれば、つまり、アプリケーションプログラムから振動データが入力されていなければ、ステップＳ５１に戻る。
【０１８６】
一方、ステップＳ５１で“ＹＥＳ”であれば、つまり、アプリケーションプログラムから振動データが入力されれば、ステップＳ５３で、振動データ（左側振動データ３０４ｊまたは右側振動データ３０４ｋ）を該当するコントローラ（１４，１６，１２０）に送信する。したがって、振動データを受信したコントローラ（１４，１６，１２０）では、振動データに従って、振動モータ（８２ｂ，１０２ｂ，１６２ｂ，１６４ｂ）が駆動される。このため、振動モータ（８２ｂ，１０２ｂ，１６２ｂ，１６４ｂ）は、振動信号に応じたパターンで出力（振動）する。
【０１８７】
そして、ステップＳ５５では、終了かどうかを判断する。ここでは、ＣＰＵ２０は、振動を提示する処理を有するアプリケーションが終了されたかどうか、または、当該アプリケーションにおいて振動を提示するシーンが終了されたかどうかを判断する。ステップＳ５５で“ＮＯ”であれば、つまり、終了でなければ、ステップＳ５１に戻る。一方、ステップＳ５５で“ＹＥＳ”であれば、つまり、終了であれば、振動制御処理を終了する。
【０１８８】
この第１実施例によれば、振動源から左右二つの受容部に伝達される振動を、振動源と左側の受容部の間の空間状況に基づいて算出するとともに、振動源と右側の受容部の間の空間状況に基づいて算出して、左右の振動部をそれぞれ振動させるので、仮想空間における多様な状況に応じた振動を提示することができる。
【０１８９】
また、第１実施例によれば、左右の振動部をそれぞれ振動させるので、振動についてのステレオ効果を得ることができる。したがって、プレイヤは、ゲーム画面およびゲーム音声を視聴するのみならず、振動を知覚することにより、ゲームへの高い没入感を得ることができる。
【０１９０】
なお、この第１実施例では、距離の２乗に反比例して振動を減衰させるため、電圧値を低減（変化）させるようにしてあるが、これに限定される必要はない。仮想空間の状況に応じて、周波数を変化させるようにしてもよい。たとえば、プレイヤオブジェクト２０２が振動源ＶＳに接近する（距離が短い）場合には、周波数を高くし、プレイヤオブジェクト２０２が振動源ＶＳから遠ざかる（距離が長い）場合には、周波数を低くしてもよい。また、プレイヤオブジェクト２０２の状態が変化される場合にも、周波数を変化させることもできる。たとえば、プレイヤオブジェクト２０２の大きさが変化する場合には、プレイヤオブジェクト２０２が大きくなったときに、周波数が低くされ、プレイヤオブジェクト２０２が小さくなったときに、周波数が高くしてもよい。また、プレイヤオブジェクト２０２が、敵オブジェクト２０４の攻撃を受けたときに、ダメージを受ける通常状態と、ダメージを受けない無敵状態との間で変化される場合には、無敵状態に変化したときに、通常状態のときよりも周波数が高くされ、通常状態に変化されたときに、元の周波数に戻すようにしてもよい。ただし、周波数の変化は上述した場合と高低が逆に変化されてもよい。このように、プレイヤオブジェクト２０２の状態に応じて振動データを変化させることもできる。このため、上述したように、周波数に応じて振幅の減衰率を変える場合には、プレイヤオブジェクト２０２の状態に応じて変化させることができる。つまり、プレイヤオブジェクト２０２の状態に応じて減衰率（変化率）を変えることができると言える。
【０１９１】
また、振動源ＶＳとしての敵オブジェクト２０４の状態が変化される場合には、振動源ＶＳから発生される振動に対応する振動データが変化されてもよい。振動データを変化させる方法は、プレイヤオブジェクト２０２の状態が変化される場合と同様である。
【０１９２】
このように、プレイヤオブジェクト２０２または／および敵オブジェクト２０４の状態に応じて、振動データが変化される。つまり、仮想空間に配置されるオブジェクトの状態に応じて振動データが変化される。このため、仮想空間に配置されるオブジェクトの状態についても、空間状況と言うことができる。
【０１９３】
さらに、この第１実施例では、振動源ＶＳと受容部（Ｌ、Ｒ）の距離（ｄＬ、ｄＲ）の２乗に反比例するように振動源ＶＳで発生された振動を減衰させるようにしたが、これに限定される必要はない。たとえば、プレイヤオブジェクト２０２の左手に受容部Ｌ１が設定され、プレイヤオブジェクト２０２の右手に受容部Ｒ１が設定され、プレイヤオブジェクト２０２が剣のオブジェクトのような棒状のオブジェクトを右手（または左手）に持つ状況において、棒状のオブジェクトが振動源ＶＳに触れる場合には、距離に反比例して振動源ＶＳで発生された振動が減衰される。つまり、伝達媒体には、振動源ＶＳと受容部Ｌの間に介在される物（オブジェクト）および振動源ＶＳと受容部Ｒの間に介在される物（オブジェクト）が含まれる。ただし、伝達媒体は、振動源と受容部の間に介在される物（オブジェクト）に限定される必要はない。仮想空間において、気象を表現する場合には、気温または／および気圧の変化、大気中の現象などによって、減衰率を変化させてもよい。したがって、伝達媒体には、仮想空間における大気が含まれることがある。たとえば、大気中の現象は、雲の発生、降雨および風の発生のいずれか１つまたは２つ以上である。
【０１９４】
さらにまた、この第１実施例では、第１態様−第４態様でゲーム装置１０を使用する場合について説明したが、第２態様−第４態様では、本体装置１０ａとコントローラ（１４、１６、１２０）が通信可能に接続されて使用される。また、かかる場合には、本体装置１０ａを充電台を介してテレビジョン受像機と接続することにより、ゲーム画面およびゲーム音声をテレビジョン受像機から出力することもできる。したがって、第２態様−第４態様でゲーム装置１０が使用される場合には、本体装置１０ａおよびコントローラ（１４、１６、１２０）を備えるゲームシステムが構成されているとも言える。また、上記のとおり、本体装置１０ａは振動制御装置としても機能するため、ゲームシステムは振動制御システムとしても機能する。
【０１９５】
［第２実施例］
第２実施例のゲーム装置１０は、左側振動データおよび右側振動データの算出方法が異なる以外は、第１実施例と同じであるため、異なる内容について説明することとし、重複した説明は省略する。
【０１９６】
図１９は第２実施例において振動源ＶＳから受容部Ｌおよび受容部Ｒに伝達される振動に対応する振動データの算出方法を説明するための図解図である。第２実施例においても、第１実施例と同様に、振動源ＶＳは、敵オブジェクト２０４などの所定のキャラクタないしオブジェクトに設定される。また、第２実施例においても、第１実施例と同様に、受容部Ｌおよび受容部Ｒはプレイヤオブジェクト２０２の手の位置（Ｌ１、Ｒ１）、プレイヤオブジェクト２０２の手の位置に基づく位置（Ｌ２、Ｒ２）、プレイヤオブジェクト２０２の手の位置に基づく他の位置（Ｌ３、Ｒ３）、プレイヤオブジェクト２０２の向き（プレイヤオブジェクト２０２の顔または胴体の向き）に基づく位置（Ｌ４、Ｒ４）または仮想カメラ２１０の向きに基づく位置（Ｌ５、Ｒ５）に設定される。なお、図１９では、プレイヤオブジェクト２０２は省略してある。
【０１９７】
この第２実施例では、振動源ＶＳおよび受容部Ｌおよび受容部Ｒが設定されると、受容部Ｌの位置と受容部Ｒの位置との中点ＣＰが算出される。振動源ＶＳと中点ＣＰを結ぶ直線が、受容部Ｌと受容部Ｒを通る直線に対してなす角度θに応じて減衰係数ｃが算出される。図１９には、受容部Ｌについての減衰係数ｃＬを算出する場合の例が示される。この場合、図１９からも分かるように、中点ＣＰから受容部Ｌを見た方向が０°に設定され、中点ＣＰから受容部Ｒを見た方向が１８０°に設定される。
【０１９８】
以下に示す条件（１）−（３）をすべて満たす関数ｆが減衰係数ｃの算出に用いられる。
（１）定義域が［０°，１８０°］である。
（２）定義域におけて、関数ｆは広義の単調減少関数である。
（３）ｆ（０°）≦１であり、かつ、ｆ（１８０°）≧０である。
【０１９９】
図２０は、条件（１）−（３）を満たす関数ｆＡ、ｆＢ、ｆＣで算出した場合の角度θに対する減衰係数ｃの変化を示すグラフが示される。図２０では、関数ｆＡで算出される減衰係数ｃの変化は実線で示され、関数ｆＢで算出される減衰係数ｃの変化は点線で示され、関数ｆＣで算出される減衰係数ｃの変化は一点鎖線で示される。ただし、関数ｆＡは数式３で示され、関数ｆＢは数式４で示され、関数ｆＣは数式５で示される。
【０２００】
［数式３］
ｆＡ（θ）＝１−θ／３６０
図２０からも分かるように、関数ｆＡは、一次関数であり、最も単純な例と言える。この関数ｆＡを用いた場合には、振動源ＶＳで発生される振動が角度θの大きさで受容部Ｌと受容部Ｒに分散されるように、減衰係数ｃが算出される。
【０２０１】
［数式４］
ｆＢ（θ）＝ｍａｘ（１−θ／１５０，０）
関数ｆＢは角度θが所定値（第２実施例では、１５０°）を超える場合には減衰係数ｃを０にするようにしてある。第３態様および第４態様の場合には、たとえば、左側の振動モータ８２ｂ、１６２ｂの振動が筐体を通して右手にも伝達される。このような使用態様においては、角度θが所定値を超える場合には、減衰係数ｃを０にすることにより、振動が発生される側とは反対側の手に振動が伝わり難くされる。つまり、左右の振動の差が強調される。
【０２０２】
［数式５］
2018112953.tif 000003
【０２０３】
図２０からも分かるように、関数ｆＣは減衰係数ｃがＳ字状に変化する関数である。角度θが９０°付近でグラフの傾きが急であるため、たとえば、プレイヤオブジェクト２０２の正面付近で振動源ＶＳの位置が横方向に変化した場合に、その変化が強調されて、振動が伝達されるという利点がある。
【０２０４】
図示は省略するが、受容部Ｒについての減衰係数ｃＲを算出する場合には、中点ＣＰから受容部Ｒを見た方向が０°に設定され、中点ＣＰから受容部Ｌを見た方向が１８０°に設定される。減衰係数ｃＲの算出方法は、減衰係数ｃＬの算出方法と同じである。
【０２０５】
第２実施例では、関数ｆＡ−ｆＣのいずれかに従って算出された減衰係数ｃＬおよび減衰係数ｃＲを用いて、左側振動データ３０４ｊおよび右側振動データ３０４ｋが算出される。したがって、厳密には、距離ｄＬおよび距離ｄＲを算出して左側振動データ３０４ｊおよび右側振動データ３０４ｋを算出する場合とは異なるが、第２実施例においても、近似的に振動のステレオ効果が得られる。
【０２０６】
第２実施例によれば、振動源と２つの受容部の距離を算出しない場合であっても、仮想空間における多様な状況に応じた振動を提示することができる。
【０２０７】
［第３実施例］
第３実施例のゲーム装置１０は、振動源ＶＳおよび受容部Ｌおよび受容部Ｒの設定方法が異なる以外は、第１実施例と同じであるため、異なる内容について説明することとし、重複した説明は省略する。
【０２０８】
振動源ＶＳは、点ではなく、線、面または立体である場合も考えられる。同様に、受容部Ｌおよび受容部Ｒもまた、点ではなく、線、面または立体である場合も考えられる。図２１に示す例では、振動源Ｖ１と振動源Ｖ２が設けられ、プレイヤオブジェクト２０２の左手に受容部Ｌが設定され、プレイヤオブジェクト２０２が右手に持つ剣などの細長い棒状の道具（オブジェクト）２０６に受容部Ｒが設定される。
【０２０９】
振動源ＶＳ１は長方形または直方体のキャラクタないしオブジェクトであり、この場合、振動源ＶＳ１と左手に設定された受容部Ｌの距離ｄＬ１は振動源ＶＳ１と受容部Ｌとの最短距離に決定され、減衰係数ｃＬ１が求められる。同様に、振動源ＶＳ１と受容部Ｒとの距離ｄＲ１は、振動源ＶＳ１とオブジェクト２０６の最短距離に決定され、振動係数ｃＲ１が求められる。
【０２１０】
また、振動源ＶＳ２は点であり、受容部Ｌも点であるため、実施例１と同様に、振動源ＶＳ２と受容部Ｌの距離ｄＬ２を用いて振動係数ｃＬ２が求められる。振動源ＶＳ２と受容部Ｒとの距離ｄＲ２は、振動源ＶＳ２とオブジェクト２０６の最短距離に決定され、振動係数ｃＲ２が求められる。
【０２１１】
図２１に示す例では、振動源ＶＳの形状とゲーム画面２００に描画されるオブジェクトの形状が同じ場合について説明してあるが、これらの形状は同じである必要はない。たとえば、振動を発生するオブジェクトとして敵オブジェクト２０４が描画される場合には、振動源ＶＳとしての敵オブジェクト２０４の形状は、円、四角形、球または直方体（立方体）に近似されてよい。同様に、受容部Ｌおよび受容部Ｒの形状と、ゲーム画面２００に描画される受容部Ｌおよび受容部Ｒに対応するキャラクタないしオブジェクトの形状も一致する必要はない。たとえば、オブジェクト２０６は、直線、長方形、長円または棒（直方体）の形状に近似されてよい。つまり、計算処理を軽減するために、振動源ＶＳおよび受容部Ｌおよび受容部Ｒの形状は単純化することができる。
【０２１２】
したがって、振動源ＶＳ１のように、厚みのある物体であっても、第１実施例で示したように、振動源ＶＳを一点だけで近似する場合もある。第１実施例では、振動源ＶＳを敵オブジェクト２０４の位置に近似してあるが、敵オブジェクト２０４の中心または重心の位置に近似することもできる。また、図２１に示す例では、振動源ＶＳ１が長方形または直方体であるため、長方形のうち受容部（Ｌ，Ｒ）に最も近い辺の中心または直方体のうち受容部に最も近い面の中心点に、振動源ＶＳを近似することもできる。また、幾何学的な意味の中心に限定される必要は無く、ゲームの文脈を考慮した上で、プレイヤの視点から見た場合の代表点として認識され易い点に振動源ＶＳの位置が近似されてもよい。たとえば、振動源ＶＳが敵オブジェクト２０４である場合には、敵オブジェクト２０４を見たときの特徴的な点（たとえば、口または鼻）を振動源ＶＳの位置に近似することができる。
【０２１３】
振動源ＶＳ１と振動源ＶＳ２が同時に振動を発生しない場合には、第１態様−第３態様では、振動源ＶＳ１からの振動に基づいて算出された左側振動データ３０４ｊが振動モータ８２ｂに与えられるとともに、振動源ＶＳ１からの振動に基づいて算出された右側振動データ３０４ｋが振動モータ１０２ｂに与えられる。また、第１態様−第３態様では、振動源ＶＳ２からの振動に基づいて算出された左側振動データ３０４ｊが振動モータ８２ｂに与えられるとともに、振動源ＶＳ２からの振動に基づいて算出された右側振動データ３０４ｋが振動モータ１０２ｂに与えられる。
【０２１４】
また、振動源ＶＳ１と振動源ＶＳ２が同時に振動を発生しない場合には、第４態様では、振動源ＶＳ１からの振動に基づいて算出された左側振動データ３０４ｊが振動モータ１６２ｂに与えられるとともに、振動源ＶＳ１からの振動に基づいて算出された右側振動データ３０４ｋが振動モータ１６４ｂに与えられる。また、第４態様では、振動源ＶＳ２からの振動に基づいて算出された左側振動データ３０４ｊが振動モータ１６２ｂに与えられるとともに、振動源ＶＳ２からの振動に基づいて算出された右側振動データ３０４ｋが振動モータ１６４ｂに与えられる。
【０２１５】
一方、振動源ＶＳ１と振動源ＶＳ２が同時に振動を発生する場合には、第１態様−第３態様では、振動源ＶＳ１からの振動に基づいて算出された左側振動データと振動源ＶＳ２からの振動に基づいて算出された左側振動データが合成された左側振動データ３０４ｊが振動モータ８２ｂに与えられるとともに、振動源ＶＳ１からの振動に基づいて算出された右側振動データと振動源ＶＳ２からの振動に基づいて算出された右側振動データが合成された右側振動データ３０４ｋが振動モータ１０２ｂに与えられる。
【０２１６】
また、振動源ＶＳ１と振動源ＶＳ２が同時に振動を発生する場合には、第４態様では、振動源ＶＳ１からの振動に基づいて算出された左側振動データと振動源ＶＳ２からの振動に基づいて算出された左側振動データが合成された左側振動データ３０４ｊが振動モータ１６２ｂに与えられるとともに、振動源ＶＳ１からの振動に基づいて算出された右側振動データと振動源ＶＳ２からの振動に基づいて算出された右側振動データが合成された右側振動データ３０４ｋが振動モータ１６４ｂに与えられる。
【０２１７】
たとえば、振動データを合成する場合には、２つの振動データに含まれる周波数の平均値が算出されるとともに、２つの振動データに含まれる電圧値の平均値が算出される。ただし、振動データには、周波数と電圧値の組が複数含まれることがあるため、この場合には、各振動データに含まれる周波数と電圧値の組を周波数の大きさに従う順番（昇べきの順または降べきの順）に並べて、同じ順番の組同士の平均値が算出される。合成の方法は一例であり、限定される必要はない。振動データがアナログの振動信号（振動波形）である場合には、振動波形同士を合成するようにしてもよい。
【０２１８】
ここでは、２つの振動源ＶＳ１および振動源ＶＳ２が同時に振動を発生する場合について説明してあるが、振動源ＶＳが３つ以上の場合も同様である。
【０２１９】
第３実施例においても、第１実施例と同様に、仮想空間における多様な状況に応じた振動を提示することができる。
【０２２０】
なお、第１実施例および第２実施例では省略したが、振動源ＶＳが複数存在する場合については、第３実施例で示した場合と同様に、複数の振動源ＶＳからの振動を合成して、左側振動データ３０４ｊおよび右側振動データ３０４ｋが算出される。
【０２２１】
［第４実施例］
第４実施例のゲーム装置１０は、振動源ＶＳから伝達される振動に二重に減衰係数を掛けるようにした以外は、第１実施例と同じであるため、異なる内容について説明することとし、重複した説明は省略する。
【０２２２】
図２２に示すように、第４実施例では、受容部Ｌおよび受容部Ｒとは別に、プレイヤ自身の左手および右手に相当する位置に、受容部Ｌ０および受容部Ｒ０が設定される。ただし、プレイヤの左手および右手に相当する位置は、仮想のプレイヤ２２０の頭部が仮想カメラ２１０の位置に配置され、仮想のプレイヤ２２０の頭部（顔）の向きは仮想カメラ２１０の方向（視線方向）と同じに設定される。また、仮想のプレイヤ２２０の頭部と胴体の向きは同じである。さらに、仮想のプレイヤ２２０の左手は、胴体の左斜め前方であり、頭部よりも下方に設定され、仮想のプレイヤ２２０の右手は、胴体の右斜め前方であり、頭部よりも下方に設定される。
【０２２３】
この第４実施例では、プレイヤオブジェクト２０２の左手に設定された受容部Ｌに伝達される振動がさらに仮想のプレイヤ２２０の左手に設定された受容部Ｌ０に伝達される。受容部Ｌに伝達される振動に対応する振動データは第１実施例で示した場合と同様に算出され、さらに、受容部Ｌ０に伝達される振動に対応する振動データは受容部Ｌを振動源ＶＳと仮定して、第１実施例で示した場合と同様に算出される。つまり、振動源ＶＳで発生される振動に対応する振動データに、振動源ＶＳと受容部Ｌの距離ｄＬに基づいて算出された減衰係数ｃＬが乗算された後に、受容部Ｌと受容部Ｌ０の距離ｄＬ０に基づいて算出された減衰係数ｃＬ０が乗算され、左側振動データ３０４ｊが算出される。
【０２２４】
同様に、プレイヤオブジェクト２０２の右手に設定された受容部Ｒに伝達される振動がさらに仮想のプレイヤ２２０の右手に設定された受容部Ｒ０に伝達される。受容部Ｒに伝達される振動に対応する振動データは第１実施例で示した場合と同様に算出され、さらに、受容部Ｒ０に伝達される振動に対応する振動データは受容部Ｒを振動源ＶＳと仮定して、第１実施例で示した場合と同様に算出される。つまり、振動源ＶＳで発生される振動に対応する振動データに、振動源ＶＳと受容部Ｒの距離ｄＲに基づいて算出された減衰係数ｃＲが乗算された後に、受容部Ｒと受容部Ｒ０の距離ｄＲ０に基づいて算出された減衰係数ｃＲ０が乗算され、右側振動データ３０４ｋが算出される。
【０２２５】
第１態様−第３態様では、上記のように算出された左側振動データ３０４ｊに従って振動モータ８２ｂが駆動されるとともに、上記のように算出された右側振動データ３０４ｋに従って振動モータ１０２ｂが駆動される。また、第４態様では、上記のように算出された左側振動データ３０４ｊに従って振動モータ１６２ｂが駆動されるとともに、上記のように算出された右側振動データ３０４ｋに従って振動モータ１６４ｂが駆動される。
【０２２６】
なお、第１実施例で示したように、仮想カメラ２１０の位置に基づいて受容部Ｌ５および受容部Ｒ５が設定される場合には、受容部Ｌ０および受容部Ｒ０は、受容部Ｌ５および受容部Ｒ５と同様の位置にされるため、上記のように、２段階で減衰係数ｃを乗算することには意味がない。
【０２２７】
第４実施例においても、第１実施例と同様に、仮想空間における多様な状況に応じた振動を提示することができる。第４実施例のようにすることで、１段階目の計算で、プレイヤオブジェクトが感じる振動を表現しつつ、２段階目の計算により、プレイヤ自身が仮想空間にいてプレイヤオブジェクトを操作している印象を感じさせることができる。
【０２２８】
なお、第４実施例の変形は、第３実施例にも適用することができる。
【０２２９】
また、第４実施例では省略したが、振動源ＶＳが複数存在する場合については、第３実施例で示した場合と同様に、複数の振動源ＶＳからの振動を合成して、左側振動データおよび右側振動データが算出される。
【０２３０】
なお、上述の各実施例では、アプリケーションから入力される振動データは、周波数を示す値および振幅を示す電圧値の組についてのデータであるが、上述したように、振動信号（振動波形）そのものを振動データとすることもできる。かかる場合には、本体装置に内蔵されるＣＰＵ２０は、振動信号から振動データを生成するようにしてもよい。たとえば、振動信号を所定時間幅（たとえば、５ｍｓｅｃ〜数１０ｍｓｅｃ）の区間に区切り、各区間について周波数分解し、たとえば、周波数分解の結果に含まれる周波数と振幅との組み合わせのうち、主たる成分が抽出され、抽出された成分が各区間における代表の値として決定する。その結果、振動信号に対応して、周波数を示す値と振幅を示す電圧値との組み合わせからなるデータの集合が振動データとして得られる。ただし、周波数と振幅の組み合わせのデータの集合を振動データとしてもよい。
【０２３１】
また、上述の各実施例では、ゲーム装置を第１態様−第４態様で使用し、２つの振動部を同時に振動させる場合について説明したが、これに限定される必要はない。たとえば、第２態様でゲーム装置を使用する場合には、プレイヤは第１コントローラまたは第２コントローラを使用することができる。また、第４態様でゲーム装置を使用する場合には、第３コントローラとは異なり、振動部（振動モータ）を１つだけ備える場合もある。これらの場合には、受容部を１つ設定し、１つの振動源から１つの受容部に伝達される振動が振動部で発生されるようにしてもよい。また、複数の振動源から１つの受容部に伝達される振動を合成した振動が振動部で発生されるようにしてもよい。
【０２３２】
さらに、上述の各実施例では、ゲーム装置を第１態様−第４態様で使用し、一人のプレイヤがゲームをプレイする場合について説明したが、これに限定される必要はない。ゲーム装置（本体装置）には、最大で８つのコントローラを接続することができるため、ゲーム装置を第２態様−第４態様で使用する場合には、第３コントローラのような別のコントローラをさらに接続して、複数のプレイヤでゲームのようなアプリケーションをプレイ（操作）することもできる。複数人でゲームをプレイする場合には、プレイヤ毎に使用するコントローラが選択される。このため、アプリケーションプログラムは、プレイヤ毎に使用するコントローラを識別する。また、この場合、アプリケーションプログラムは、各プレイヤのプレイヤオブジェクトが仮想空間に配置され、各プレイヤのプレイヤオブジェクトに対応して設定された受容部（Ｌ、Ｒ）に伝達される振動に対応する振動データ（左側振動データおよび右側振動データ）をそれぞれ算出し、オペレーティングシステムに、振動を提示するプレイヤが使用するコントローラに振動を発生させることを指示するとともに、算出した左側振動データおよび右側振動データを該当するコントローラに送る（入力）する。
【０２３３】
また、上述の各実施例では、３次元の仮想空間に、振動源および受容部が設定される場合について説明したが、２次元の仮想空間に、振動源および受容部が設定されてもよい。この場合、たとえば、図１２に示したように、プレイヤオブジェクト２０２および敵オブジェクト２０４を上方から見るように、それぞれ２次元の仮想空間に配置し、プレイヤオブジェクト２０２および敵オブジェクト２０４を上方から見た２次元のゲーム画面を表示装置１２に表示する。また、敵オブジェクト２０４の位置に振動源ＶＳが設定され、プレイヤオブジェクト２０２の左手の位置に受容部Ｌが設定され、プレイヤオブジェクト２０２の右手の位置に受容部Ｒが設定される。かかる場合にも、振動源ＶＳと受容部Ｌとの距離ｄＬおよび振動源ＶＳと受容部Ｒとの距離ｄＲが算出され、振動源ＶＳから受容部Ｌに伝達される振動が距離ｄＬに基づいて減衰され、受容部Ｒに伝達される振動が距離ｄＲに基づいて減衰される。
【０２３４】
なお、上述の各実施例で示した具体的な装置の外観および数値は一例であり、実際の製品に応じて適宜変更可能である。また、図１７および図１８に示したフロー図は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。
【符号の説明】
【０２３５】
１０  …ゲーム装置
１０ａ  …本体装置
１２  …表示装置
１４，１６，１１０，１２０  …コントローラ
１４ａ，１６ａ，１２０ａ  …操作ボタン
２０  …ＣＰＵ
２２  …ＲＡＭ
２４  …フラッシュメモリ
２６  …コントローラ通信部
２８，３０，７２，９２  …端子
７０，９０，１５０  …コントローラ制御部
７４，９４，１５２  …通信モジュール
７６，９６，１５４  …メモリ
７８，９８，１５６  …操作ボタン群
８０，１００，１５８，１６０（１４ｂ，１６ｂ，１２０ｂ）  …アナログスティック
８２，１０２，１６２，１６４  …振動部
８２ｂ，１０２ｂ，１６２ｂ，１６４ｂ（１４ｃ，１６ｃ，１２０ｃ）  …振動モータ
【図１】
2018112953.tif 000004
【図２】
2018112953.tif 000005
【図３】
2018112953.tif 000006
【図４】
2018112953.tif 000007
【図５】
2018112953.tif 000008
【図６】
2018112953.tif 000009
【図７】
2018112953.tif 000010
【図８】
2018112953.tif 000011
【図９】
2018112953.tif 000012
【図１０】
2018112953.tif 000013
【図１１】
2018112953.tif 000014
【図１２】
2018112953.tif 000015
【図１３】
2018112953.tif 000016
【図１４】
2018112953.tif 000017
【図１５】
2018112953.tif 000018
【図１６】
2018112953.tif 000019
【図１７】
2018112953.tif 000020
【図１８】
2018112953.tif 000021
【図１９】
2018112953.tif 000022
【図２０】
2018112953.tif 000023
【図２１】
2018112953.tif 000024
【図２２】
2018112953.tif 000025
【手続補正書】
【提出日】平成30年2月5日(2018.2.5)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０１５５
【補正方法】変更
【補正の内容】
【０１５５】
また、図１５に示すように、仮想カメラ２１０が向いている方向（カメラ方向）と直交する面上であり、仮想カメラ２１０の位置（視点位置）を基準とした左右の点に受容部Ｌ５および受容部Ｒ５が設定されてもよい。図１５に示す例では、受容部Ｌ５は仮想カメラ２１０の画角の左端の外側（左側）の位置に設定され、受容部Ｒ５は仮想カメラ２１０の画角の右端の外側（右側）の位置に設定される。ただし、受容部Ｌ５は、仮想カメラ２１０の画角の左端の線上に設定されてもよいし、仮想カメラ２１０の画角の左端と仮想カメラ２１０の間の位置に設定されてもよい。また、受容部Ｒ５は、仮想カメラ２１０の画角の右端の線上に設定されてもよいし、仮想カメラ２１０の画角の右端と仮想カメラ２１０の間の位置に設定されてもよい。プレイヤオブジェクト２０２の手の位置または向いている方向に基づいて受容部Ｌおよび受容部Ｒを設定する場合には、プレイヤオブジェクト２０２が感じる振動をプレイヤに感じさせることができ、プレイヤ自身がプレイヤオブジェクト２０２になったような印象を持たせて、ゲームの臨場感を高めることができる。また、仮想カメラ２１０の向きに基づいて受容部Ｌおよび受容部Ｒを設定する場合には、プレイヤオブジェクト２０２を後ろから操作しているプレイヤ自身が感じる振動を表現することで、プレイヤ自身が仮想空間内にいるかのような印象を持たせることができる。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１９９
【補正方法】変更
【補正の内容】
【０１９９】
図２０は、条件（１）−（３）を満たす関数ｆＡ、ｆＢ、ｆＣで算出した場合の角度θに対する減衰係数ｃの変化を示すグラフが示される。図２０では、関数ｆＡで算出される減衰係数ｃの変化は実線で示され、関数ｆＢで算出される減衰係数ｃの変化は点線で示され、関数ｆＣで算出される減衰係数ｃの変化は一点鎖線で示される。ただし、関数ｆＡは数式２で示され、関数ｆＢは数式３で示され、関数ｆＣは数式４で示される。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０２００
【補正方法】変更
【補正の内容】
【０２００】
［数式２］
ｆＡ（θ）＝１−θ／３６０
図２０からも分かるように、関数ｆＡは、一次関数であり、最も単純な例と言える。この関数ｆＡを用いた場合には、振動源ＶＳで発生される振動が角度θの大きさで受容部Ｌと受容部Ｒに分散されるように、減衰係数ｃが算出される。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０２０１
【補正方法】変更
【補正の内容】
【０２０１】
［数式３］
ｆＢ（θ）＝ｍａｘ（１−θ／１５０，０）
関数ｆＢは角度θが所定値（第２実施例では、１５０°）を超える場合には減衰係数ｃを０にするようにしてある。第３態様および第４態様の場合には、たとえば、左側の振動モータ８２ｂ、１６２ｂの振動が筐体を通して右手にも伝達される。このような使用態様においては、角度θが所定値を超える場合には、減衰係数ｃを０にすることにより、振動が発生される側とは反対側の手に振動が伝わり難くされる。つまり、左右の振動の差が強調される。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０２０２
【補正方法】変更
【補正の内容】
【０２０２】
［数式４］
2018112953.tif 000026
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０２０８
【補正方法】変更
【補正の内容】
【０２０８】
振動源ＶＳは、点ではなく、線、面または立体である場合も考えられる。同様に、受容部Ｌおよび受容部Ｒもまた、点ではなく、線、面または立体である場合も考えられる。図２１に示す例では、振動源ＶＳ１と振動源ＶＳ２が設けられ、プレイヤオブジェクト２０２の左手に受容部Ｌが設定され、プレイヤオブジェクト２０２が右手に持つ剣などの細長い棒状の道具（オブジェクト）２０６に受容部Ｒが設定される。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０２０９
【補正方法】変更
【補正の内容】
【０２０９】
振動源ＶＳ１は長方形または直方体のキャラクタないしオブジェクトであり、この場合、振動源ＶＳ１と左手に設定された受容部Ｌの距離ｄＬ１は振動源ＶＳ１と受容部Ｌとの最短距離に決定され、減衰係数ｃＬ１が求められる。同様に、振動源ＶＳ１と受容部Ｒとの距離ｄＲ１は、振動源ＶＳ１とオブジェクト２０６の最短距離に決定され、減衰係数ｃＲ１が求められる。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０２１０
【補正方法】変更
【補正の内容】
【０２１０】
また、振動源ＶＳ２は点であり、受容部Ｌも点であるため、実施例１と同様に、振動源ＶＳ２と受容部Ｌの距離ｄＬ２を用いて減衰係数ｃＬ２が求められる。振動源ＶＳ２と受容部Ｒとの距離ｄＲ２は、振動源ＶＳ２とオブジェクト２０６の最短距離に決定され、減衰係数ｃＲ２が求められる。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０２２２
【補正方法】変更
【補正の内容】
【０２２２】
図２２に示すように、第４実施例では、受容部Ｌおよび受容部Ｒとは別に、プレイヤ自身の左手および右手に相当する位置に、受容部Ｌ０および受容部Ｒ０が設定される。ただし、プレイヤの左手および右手に相当する位置は、次のように設定される。仮想のプレイヤ２２０の頭部が仮想カメラ２１０の位置に配置され、仮想のプレイヤ２２０の頭部（顔）の向きは仮想カメラ２１０の方向（視線方向）と同じに設定される。また、仮想のプレイヤ２２０の頭部と胴体の向きは同じである。さらに、仮想のプレイヤ２２０の左手は、胴体の左斜め前方であり、頭部よりも下方に設定され、仮想のプレイヤ２２０の右手は、胴体の右斜め前方であり、頭部よりも下方に設定される。