(58)【調査した分野】(Int.Cl.,DB名)
仮想空間内の所定のコース内において所定のオブジェクトをプレイヤの操作に基づいて移動させるゲーム処理を実行するゲーム装置のコンピュータに実行させるゲームプログラムであって、
前記プレイヤの操作に基づいた前記所定のオブジェクトの移動方向を制御するための所定の操作装置に対する入力にかかる入力量を取得する移動制御入力量取得ステップと、
前記所定のオブジェクトの現在の移動方向と、前記所定のコースにおける目的地へ向かう方向である進行方向との関係に基づいて、前記移動方向を制御するための入力にかかる入力量に所定の補正値を増減させることで、前記所定のオブジェクトの移動方向が前記コースの進行方向に沿った方向に近づくように当該入力量の補正制御を行う、補正処理ステップと、
前記補正された前記移動方向を制御するための入力にかかる入力量に基づいて、前記仮想空間内における前記所定のオブジェクトの移動を制御する移動制御ステップと、を前記コンピュータに実行させる、ゲームプログラム。
前記ゲームプログラムは、前記コースの一部分に対応し、進行可能な箇所であることを示すパスの情報を複数含むパスデータと、当該複数のパスに基づき構成される進行可能路の幅を示す幅データとを所定の記憶部から取得するパス・幅データ取得ステップを更に実行させ、
前記端データ取得ステップでは、前記パスデータと幅データとに基づいて、前記所定のオブジェクトの位置を基準とした所定範囲内のコースにおける端の位置を算出することで前記端データを取得する、請求項2に記載のゲームプログラム。
前記分岐するルートの少なくとも一部は、前記所定のオブジェクトが所定の条件を満たしている状態であるときに進行可能となるルートである、請求項4に記載のゲームプログラム。
前記補正処理ステップでは、前記コースの幅方向軸における両端のうち前記所定のオブジェクトに近いほうの端から、当該所定オブジェクトまでの距離に基づいて、前記補正値を決定する、請求項2に記載のゲームプログラム。
前記補正処理ステップでは、前記コースの道幅方向軸における両端のうち前記所定のオブジェクトに近いほうの端における前記進行方向と、所定のオブジェクトの移動方向とが為す角度に基づいて、前記補正値を決定する、請求項2に記載のゲームプログラム。
前記ゲームプログラムは、前記コースの道幅方向軸における両端のうち前記所定のオブジェクトに近いほうの端にかかる進行方向とは垂直な方向で、かつ、コースの内側方向に向けた加速度を、前記所定のオブジェクトに更に加える、追加移動ステップを更に前記コンピュータに実行させ、
前記移動制御ステップは、前記補正された前記移動方向を制御するための入力にかかる入力量と、前記追加移動ステップで加えられた加速度とに基づいて、前記所定のオブジェクトの移動を制御する、請求項2に記載のゲームプログラム。
前記追加移動ステップは、前記所定のオブジェクトと当該所定のオブジェクトに近いほうの端との間の距離に応じて、当該所定のオブジェクトに加える加速度の大きさを決定する、請求項8に記載のゲームプログラム。
前記補正処理ステップでは、前記所定のオブジェクトの現在の移動方向と前記進行方向との関係に加えて、前記プレイヤの操作に基づいた前記所定のオブジェクトの移動方向を制御するための入力とに基づいて、前記補正量を決定する、請求項1に記載のゲームプログラム。
前記補正処理ステップは、前記コースの道幅方向軸における両端のいずれか一方から所定範囲内に前記所定のオブジェクトが存在する場合に実行される、請求項1に記載のゲームプログラム。
前記移動制御入力量取得ステップは、自身に加えられた動きを検出するための動きセンサを有するコントローラから出力された、当該コントローラ自身に加えられた動きを示す値に基づいて、前記入力量を算出する、請求項1に記載のゲームプログラム。
仮想空間内の所定のコース内において所定のオブジェクトをプレイヤの操作に基づいて移動させるゲーム処理を実行するゲーム装置のコンピュータを制御するためにゲーム処理
方法であって、
前記プレイヤの操作に基づいた前記所定のオブジェクトの移動方向を制御するための所定の操作装置に対する入力にかかる入力量を取得する移動制御入力量取得ステップと、
前記所定のオブジェクトの現在の移動方向と、前記所定のコースにおける目的地へ向かう方向である進行方向との関係に基づいて、前記移動方向を制御するための入力にかかる入力量に所定の補正値を増減させることで、前記所定のオブジェクトの移動方向が前記コースの進行方向に沿った方向に近づくように当該入力量の補正制御を行う、補正処理ステップと、
前記補正された前記移動方向を制御するための入力にかかる入力量に基づいて、前記仮想空間内における前記所定のオブジェクトの移動を制御する移動制御ステップとを前記コンピュータに実行させる、ゲーム処理方法。
所定のコントローラに対するプレイヤの操作に基づいて、仮想空間内の所定のコース内において所定のオブジェクトを移動させるゲーム処理を実行するゲーム装置であって、
前記所定のオブジェクトの移動方向を制御するための前記所定のコントローラに対する入力にかかる入力量を取得する移動制御入力量取得部と、
前記所定のオブジェクトの現在の移動方向と、前記所定のコースにおける目的地へ向かう方向である進行方向との関係に基づいて、前記移動方向を制御するための入力にかかる入力量に所定の補正値を増減させることで、前記所定のオブジェクトの移動方向が前記コースの進行方向に沿った方向に近づくように補正制御を行う補正処理部と、
前記補正された前記移動方向を制御するための入力にかかる入力量に基づいて、前記仮想空間内における前記所定のオブジェクトの移動を制御する移動制御部とを備える、ゲーム装置。
所定のコントローラに対するプレイヤの操作に基づいて、仮想空間内の所定のコース内において所定のオブジェクトを移動させるゲーム処理を実行するゲームシステムであって、
前記所定のオブジェクトの移動方向を制御するための前記所定のコントローラに対する入力にかかる入力量を取得する移動制御入力量取得部と、
前記所定のオブジェクトの現在の移動方向と、前記所定のコースにおける目的地へ向かう方向である進行方向との関係に基づいて、前記移動方向を制御するための入力にかかる入力量に所定の補正値を増減させることで、前記所定のオブジェクトの移動方向が前記コースの進行方向に沿った方向に近づくように補正制御を行う補正処理部と、
前記補正された前記移動方向を制御するための入力にかかる入力量に基づいて、前記仮想空間内における前記所定のオブジェクトの移動を制御する移動制御部とを備える、ゲームシステム。
【発明を実施するための形態】
【0023】
以下、本発明の一実施形態について説明する。
【0024】
図1は、本実施形態にかかるゲームシステムの機能ブロック図である。
図1において、ゲームシステム1は、表示手段の一例である家庭用テレビジョン受像機(以下、モニタと記載する)2と、モニタ2に図示しない接続コードを介して接続する据置型のゲーム装置本体3と、当該ゲーム装置本体3と無線接続可能なコントローラ6とを含む。
【0025】
モニタ2は、ゲーム装置本体3から出力されるゲーム画像を表示する。
【0026】
ゲーム装置本体3は、当該ゲーム装置本体3で読み取り可能な所定の記憶媒体(例えばメモリーカード、光ディスク、ハードディスク等)に記憶されたゲームプログラム等に基づいてゲーム処理等を実行する。本実施形態においては、ゲーム装置本体3はプロセッサ部11、メインメモリ12、システムLSI13、無線通信部14およびAV−IC(Audio Video−Integrated Circuit)15等を有する。
【0027】
プロセッサ部11は、メインメモリ12やシステムLSI13等を用いて所定の情報処理プログラムを実行する。これにより、ゲーム装置本体3における各種機能(例えば、ゲーム処理)が実現される。
【0028】
システムLSI13には、GPU(Graphics Processor Unit)16、DSP(Digital Signal Processor)17、入出力プロセッサ18、等が含まれる。
【0029】
GPU16は、プロセッサ部11からのグラフィクスコマンド(作画命令)に従って画像を生成する。DSP17は、オーディオプロセッサとして機能し、メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。入出力プロセッサ18は、無線通信部14を介して、コントローラ6との間でデータの送受信を実行したりする。具体的には、入出力プロセッサ18は、上記無線通信部14を介して、コントローラ6から送信される操作データ等を受信し、メインメモリ12のバッファ領域に記憶(一時記憶)する。
【0030】
また、ゲーム装置本体5において生成される画像および音声のうち、モニタ2に出力される画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、図示しないAVコネクタを介して、読み出した画像データをモニタ2に出力するとともに、読み出した音声データをモニタ2に内蔵されるスピーカに出力する。
【0031】
コントローラ6は、当該コントローラ6に対して行われた操作の内容を示す操作データをゲーム装置本体3に送信するものである。ここで、
図2〜
図3を参照して、本実施形態で用いられるコントローラ6について説明する。
図2は、コントローラ6の外観を示す正面図である。コントローラ6は、左右にグリップ部103L、103R(以下、総称してグリップ部103と呼ぶこともある)を備えるハウジング61と、ハウジング102の表面上に設けられた開口部から突出する第1アナログスティック63および第2アナログスティック64、および複数個の操作ボタンを含むデジタルボタン部とから構成される。当該デジタルボタン部には、十字キー65と、第1種操作ボタン66A〜66D、第2種操作ボタン67A〜67C、Lボタン68L、Rボタン68R、電源ボタン69とが含まれる。第1種操作ボタン66A〜66Dには、当該コントローラ6が接続されたゲーム装置本体3が実行するゲームプログラムに応じた機能が適宜割り当てられる(なお、Lボタン68L、Rボタン68Rも同様に、ゲームプログラムに応じた機能が適宜割り当てられる)。例えば、操作ボタン66A〜66Dは、後述するレースゲームにおいて、自車オブジェクトのアクセル操作やブレーキ操作等に用いられる。また、第2種操作ボタン67A〜67Cは、例えば、ゲーム装置のシステムが直接的に制御を行うような機能が割り当てられる。一例を挙げると、ホームボタンやスタートボタン、セレクトボタンとして用いられる。
【0032】
また、第1アナログスティック63および第2アナログスティック64は、無操作状態である中立状態を中心として、平面内の任意の方向(360度内の任意の方向)に傾けて操作することが可能なジョイスティックであり、当該任意の方向を指示(入力)するために用いられる。なお、本実施形態では、第1アナログスティック63が後述するレースゲームにおけるステアリング操作のために用いられる。
【0033】
次に、
図3を参照して、コントローラ6の内部構成について説明する。
図3は、コントローラ6の構成を示す機能ブロック図である。
図3において、コントローラ6は、通信部75と、デジタルボタン部72と、アナログスティック部73とを備えている。また、これらの構成部はそれぞれ電気的に接続されている。
【0034】
デジタルボタン部72は、上述した第1種操作ボタン66A〜66D、第2種操作ボタン67A〜67C、Lボタン68L、Rボタン68R、電源ボタン69に対する入力状態(各操作ボタンが押下されたか否か)を示す信号を通信部75のマイコン751へ出力する。
【0035】
また、アナログスティック部73は、上述の第1アナログスティック63および第2アナログスティック64に対する入力状態を示す信号を通信部75のマイコン751へ出力する。アナログスティック部73は、それぞれのアナログスティックに対する入力信号を多段階に、例えば、ある方向への方向入力を256段階で検知できる。例えば、ニュートラルポジション(無操作状態である中立状態)が0、ある方向に最大までスライドさせた状態を255とし、その傾き具合を示す信号をマイコン751に出力可能である。
【0036】
通信部75は、マイコン751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理を行う際にメモリ752を記憶領域として用いながら、デジタルボタン部72、アナログスティック部73から取得した上記信号に基づいて操作データを生成する。そして、無線モジュール753を制御して、当該操作データをゲーム装置本体3へ無線送信する。
【0037】
なお、以下の説明では、後述するレースゲームにおける自車オブジェクトの操作を行うコントローラの一例として、上述のようなコントローラ6を例に説明するが、自車オブジェクトの操作に用いるコントローラについては、上記のものに限るものではない。他の実施形態では、例えば、加速度センサや角速度センサや慣性センサ等の動き検出用センサを内蔵したコントローラを用いても良い。この場合は、例えばコントローラ自体の傾き(姿勢)を検出して、これを操作データ(ハンドル操作)として用いれば良い。例えば、
図4に示すような、ハンドル型の形状を模したコントローラを用いても良い。当該ハンドルコントローラには上記の動き検出用センサが内蔵されており、これに基づき当該ハンドルコントローラの傾きを検出し、これを操作データとして用いれば良い。
【0038】
また、例えば、
図5に示すような形状のコントローラ8を用いても良い。
図5は、コントローラ8を正面後方から見た斜視図である。
図5におけるコントローラ8は、ハウジング81と、当該ハウジング81の表面に設けられた複数個の操作ボタンで構成される操作部とを備える。当該ハウジング81は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさであり、例えばプラスチック成型によって形成されている。また、当該コントローラ8は、上記のような動き検出用センサも内蔵している。このようなコントローラ8を、横長の姿勢にして両手で把持し、ハンドルを模した操作を行ってもよい。
【0039】
また、その他、
図6に示すような、表示装置を有するコントローラ9を用いても良い。
コントローラ9は、例えばプラスチック成型によって形成されたハウジング91を有している。また、コントローラ9は、操作部として、2本のアナログスティック92や、十字キーや複数の操作ボタン等を備える。また、コントローラ9は動き検出センサも備える。プレイヤは、コントローラ9に設けられた各ボタンを押下することや、あるいは、コントローラ9自体を動かしてその位置や姿勢を変えることによって、ハンドル操作を行うことができる。
【0040】
また、上記のような据え置き型ゲームシステムの他、
図7に示すような、携帯型ゲーム装置(コントローラとゲーム装置が一体化したもの)であっても、本実施形態で説明する処理は適用可能である。また、このような携帯型ゲーム装置は、上記のような動き検出センサを内蔵していてもよい。
【0041】
次に、本実施形態にかかる情報処理システムで実行される情報処理(各携帯ゲーム10で実行される情報処理)の動作概要を説明する。本実施形態では、レースゲームを例として説明する。
図8は、本実施形態に係るゲーム画面の一例である。本レースゲームでは、仮想3次元空間を仮想カメラで撮影したゲーム画像が表示される。
図8では、自車オブジェクト101が表示されている。プレイヤは、上記コンロトーラ6を用いて、当該自車オブジェクト101の操作を行う。なお、本ゲームでは、基本的には、いわゆるTPS視点での画像が表示されるが、所定の操作でFPS視点での画像に切り替え可能としてもよい。
【0042】
自車オブジェクト101の操作に関して説明する。本実施形態では、上記コントローラ6の第1アナログスティック63を用いて、自車オブジェクト101のハンドル操作(ステアリング操作)を行うことができる。すなわち、第1アナログスティック63を左右方向に傾けることで、ハンドル操作を行うことができる。換言すれば、自車オブジェクト101の移動方向を指示するための入力を行うことができる。また、Aボタン66Aでアクセル、Bボタン66Bでブレーキの操作が可能である。また、本実施形態では、レース中に取得可能なアイテムがコース上に配置されている。そして、プレイヤは、例えばRボタン68Rを押下することで、取得したアイテムを「使用」することもできる。アイテムの使用する、あるいは、一部のアイテムについてはそれを所持しているだけで、プレイヤにとって有利となる所定の効果が発生する。
【0043】
上記のようなレースゲームにおいて、本実施形態では、レースゲームの初心者やレースゲームが下手なプレイヤでも快適にプレイできるようにサポートする処理が実行される。具体的には、上記プレイヤが行ったハンドル操作に基づくハンドル入力データに対して、後述するような処理を施すことで、ハンドル入力の値を補正し、自車オブジェクト101のハンドル制御や移動制御を行う。
【0044】
ここで、ハンドル入力の値について補足説明する。本実施形態では、上記第1アナログスティック63は、ある方向への方向入力を256段階で検知できる。そして、上記第1アナログスティック63を用いてプレイヤが入力可能な左右方向にかかる値(その傾き具合を示す値)については、上記検知された内容が、−1(左)〜+1(右)の範囲内の値(0がニュートラルポジション)に変換されて扱われるものとする。換言すれば、プレイヤが第1アナログスティック63を用いて入力可能なハンドル入力値は、−1〜+1の範囲内の値である。一方、本実施形態におけるレースゲームにおいては、自車オブジェクト101を制御するためのハンドル入力値として、−2〜+2の範囲が割り当てられている。つまり、プレイヤの入力操作に基づいた、−1〜+1の範囲内のハンドル入力値は、後述のような処理によって補正された結果、−2〜+2の範囲内の値となり得る。例えば、プレイヤが入力した−1のハンドル入力値が、後述の処理によって例えば−2に補正され、この補正後のハンドル入力値が自車オブジェクト101の移動制御に用いられることになる。そのため、プレイヤが入力可能なハンドル入力値以上の自車オブジェクト101の移動も可能となっている。
【0045】
上記のようなハンドル入力値の補正(サポート処理)について、より具体的には、本実施形態では、主に、以下のような処理を行う。
(1)コースアウト防止の処理
自車オブジェクト101がコースアウトしそうな場合に、コースアウトを避けようとするプレイヤの操作に基づくハンドル入力値を補正して、コースアウトしないようにハンドル入力値を更に大きな値とする等の処理が実行される。
(2)予測ハンドル処理
現在はコースアウトするような状況ではないが、ハンドル入力の有無に関わらず、自車オブジェクト101がそのまま進むとコースアウトすることが予測される場合に、予めコースアウトしないように、ハンドル入力にコースの進行方向寄りの補正を加える処理が実行される。
(3)基本アシスト処理
プレイヤのハンドル入力が、コースの進行方向(ゴール)に向かおうとするような入力(換言すると、意図的な逆走やコースアウト狙いの操作ではない入力)の場合に、コースの左右の端(壁)からの距離に応じて、コースの進行方向に向くようにハンドル入力値を補正する処理も実行される。
(4)コース向き揃え処理
自車オブジェクト101の位置や予想進行経路に関して、コースアウトの危険性が小さいであろう状態のときに、自車オブジェクト101がなるべくコースに沿ってまっすぐ走れるようにハンドル入力値を補正する処理も実行される。換言すれば、コースアウト等の危険性が小さい状況において、自車オブジェクト101の姿勢(向き)をコースに沿った姿勢(向き)に近づけるようにハンドル入力値に補正をかける、というような処理である。
【0046】
上述のような処理により、レースゲームの初心者や、レースゲームが下手なプレイヤであっても、コースアウト等することなくコースを走行させることができ、レースゲームの興趣性を高めることができる。また、プレイヤの操作に基づくハンドル入力値を補正することで自車オブジェクト101の移動制御を行うため、自車オブジェクト101の挙動に関して、プレイヤに不自然さを感じさせずに、そのハンドル操作をサポートすることもできる。例えが、プレイヤのハンドル操作とは関係なく自車オブジェクトの速度を直接的に補正するような制御の場合に比べて、プレイヤが現実にハンドル操作している内容に沿うようにさりげなく補正することができる。そのため、プレイヤに違和感を与えることなく、上記のようなハンドル操作のサポートが可能となる。
【0047】
また、他のプレイヤと対戦する場合であって、その対戦相手がレースゲームの上手いプレイヤであるような場合でも、上記のようなアシストの処理によって、比較的拮抗したレースを展開することができ、ゲームの興趣性を高めることができる(補足すると、レースゲームが下手なプレイヤほど、上記のようなアシスト処理の恩恵を受けやすい。上手いプレイヤの場合は、上記のようなアシスト処理が働く余地は少ないため、結果的に、拮抗したレース展開が期待できる。)。
【0048】
次に、
図9〜
図34を参照して、本実施形態におけるゲーム処理をより詳細に説明する。
【0049】
図9は、ゲーム装置本体3のメインメモリ12に格納されるプログラムおよび情報の一例を示している。メインメモリ12には、ゲーム処理プログラム301、操作データ302、レースコースデータ305、パスデータ306、アシスト利用設定データ307、アシスト処理用コース情報308、プレイヤハンドル入力値309等が格納される。
【0050】
ゲーム処理プログラム301は、上述したようなレースゲーム処理を実行するためのプログラムである。
【0051】
操作データ302は、コントローラ6に対して行われた各種操作を示すデータである。操作データ302には、デジタルボタンデータ303、アナログスティックデータ304等が含まれる。デジタルボタンデータ303は、上述したような各種デジタルボタンに対して行われた操作内容を示すデータであり、各種ボタンの押下状態を示すデータである。本実施形態では、オンかオフかを示すデータとなる。アナログスティックデータ304は、上記アナログスティックに対して行われた操作内容(傾き方向と傾き具合)を示すデータである。2本のアナログスティックそれぞれについて、所定方向への傾き具合を256段階で示したデータである。
【0052】
レースコースデータ305は、上記のレースコースを構築するためのデータである。コースの形状やコース上の配置物の関するデータ等が含まれている。
【0053】
パスデータ306は、レースゲームのコースに基づいて予め生成されたデータであり、後述する処理で用いられる「パス」の基になるデータである。当該パスの概念について、
図10〜
図11を用いて説明する。
図10は、レースコースの一部分を俯瞰で示した図であり、
図11は、当該レースコースに基づいて生成されたパスの概念を示す模式図である。パスは、レースコースに沿って複数配置されている概念であり、換言すれば、パスのそれぞれは、レースコースの一部分に対応する概念といえる。また、
図11では、円形で示しているが、ゲーム処理においては、球形の概念として捉える。具体的には、パスデータ306には、複数のパスのそれぞれについて、中心座標と、半径(大きさ)と、法線を示す情報と、順序が次のパスを示す情報と、順序が前のパスを示す情報とが含まれる。また、後述する分岐パスであるか通常パスであるかを示す情報もパスデータ306には含まれている。なお、パスの「順序」については、レースコースのスタート地点のパスが1番目であり、ゴール地点のパスが最後の順序となるものとする。また、中心座標について、例えば道幅を示す軸をx軸、高さ方向をy軸、奥行き方向をz軸として考えると、y軸座標は、原則として、コースの路面(地表)部分となるように設定される。また、x軸座標については、道幅の中心となるように設定される。そのため、各パスの中心点(x軸座標)をコースに沿って結んでいくと、概ねレースコースの中心を通るようなラインができることになる(
図12参照)。また、
図11や
図12からわかるように、各パスは、その位置におけるコースの道幅や左右の端(換言すれば、コースの外側と内側の境界)を示すものであるともいえる(レースコースによっては、例えばトンネル状やチューブ状のコースであれば、その高さ等も示すことになる)。このように、パスデータ306は、レースコースの所定の一部分の構成を示すデータであるともいえる。本実施形態では、このようなパスデータ306を用いて、自車オブジェクト101の直近において通過した経路の把握や、直後の進行方向の予測が行われる。また、コースが分岐している場合は、その分岐先の決定等にも用いられる。なお、以下の説明においては、上記のコースの道幅方向軸における左右の端のことを「コース端」と総称する。換言すれば、本実施形態の説明において、「コース端」とは、スタート地点やゴール地点の意味ではなく、コースの横幅における左右の端のことを意図する。
【0054】
ここで、コースの分岐に関して補足説明する。本実施形態のレースゲームでは、自車オブジェクト101が所定の条件を満たした場合、分岐コースが出現する。例えば、レースコース上に配置されている所定のアイテムを自車オブジェクト101が取得したとき、そのアイテムを所持している間(他のアイテムを新たに取得するまでの間)は、分岐コースが出現し、自車オブジェクト101をその分岐コースに移動させることが可能となる。例えば、
図13に示すようなコースおよびパス設定があるとする。
図13は、ヘアピンカーブを俯瞰した図である。また、コースの中央には、「芝生」があるとする。そして、自車オブジェクト101が、右側を走行しているとする。
図13は、上記の所定の条件を満たしていない状態であるとする。この場合は、自車オブジェクト101は、コース内しか走行できず、芝生部分には進入することはできない。一方、所定の条件を満たしている場合は、
図14に示すように、分岐コースに対応する6つのパスが芝生部分に出現する。そして、このパスが配置されている部分には自車オブジェクト101は進入可能となる。つまり、所定の条件を満たしている間は、「芝生を横切る」というような分岐コースが出現することになる。なお、この例では芝生という例を示したが、もちろん、最初から途中で2つに分岐するようなコースであれば(
図15参照)、上記所定の条件を満たすまでもなく、進行方向の分岐が可能となる。なお、以下の説明では、自身の前後いずれかにパスが複数存在しているパスのことを「分岐パス」と呼び、そうではないパスについては「通常パス」と呼ぶこともある。また、各パスの中心点(中心座標)のことを「中心パス点」と呼ぶ。また、右端のパス点については「右端パス点」、左端のパス点については「左端パス点」と呼ぶ。
【0055】
図9に戻り、次に、アシスト利用設定データ307は、本実施形態で示すようなハンドルアシスト機能自体をプレイヤが利用するか否かを示すデータである。例えば、レースゲームの「ゲーム設定」等でプレイヤの入力に基づき設定される。
【0056】
アシスト処理用コース情報308は、上記パスデータ306に基づいて生成されるデータであり、例えば、コースアウトの判定等でレースコースの左右の端を把握するために用いられる。
【0057】
プレイヤハンドル入力値309は、操作データ302、より具体的には、アナログスティックデータ304に基づいて生成される。第1アナログスティック63に対するプレイヤの入力に基づいた自車オブジェクト101のハンドル操作内容(ハンドルの入力量)を示すデータである。具体的には、第1アナログスティック63の左右方向のそれぞれについて256段階で示される第1アナログスティック63の傾き具合を、0をニュートラルポジションとして、−1〜+1の範囲内の値に変換したデータである。
【0058】
次に、
図16のフローチャートを参照して、ゲーム装置本体3のプロセッサ部11によって実行されるレースゲームにおけるハンドルアシスト処理の流れを説明する。なお、ここでは、主に上記のようなハンドルアシストにかかる処理について説明し、その他のゲーム処理については、直接には関係しないため、その説明は省略する。
【0059】
図16は、本実施形態にかかるハンドルアシスト処理の詳細を示すフローチャートである。なお、
図16におけるステップS2〜S7の処理ループは、例えば1フレーム毎に繰り返し実行される。
【0060】
まず、ステップS1で、プロセッサ部11は、パスデータ事前解釈処理を実行する。この処理では、パスデータ306に基づいて、上記
図11で示したような複数のパスを生成する処理が実行される。更に、当該生成したパスに基づいて、アシスト処理用コース情報308を生成する処理が実行される。当該アシスト処理用コース情報308の概念を
図17に示す。
図17は、上記
図11のようなパスに基づいたアシスト処理用コース情報308の例である。当該アシスト処理用コース情報は、各パスの中心点同士を結んだ線と、右端パス点同士を結んだ線と、左端パス点同士を結んだ線で表すことができる情報である。
【0061】
図16に戻り、次に、ステップS2で、プロセッサ部11は、操作データ302を取得する。更に、プロセッサ部11は、当該操作データ302に基づいて、プレイヤの入力に係るハンドル入力値を示すプレイヤハンドル入力値309を生成する(すなわち、第1アナログスティック63の左右方向それぞれにかかる傾き具合を、−1〜+1の範囲内の値に変換する)。
【0062】
次に、ステップS3で、プロセッサ部11は、アシスト利用設定データ307を参照して、「ハンドルアシスト」を利用する設定になっているか否かを判定する。当該判定の結果、利用する設定になっていないときは(ステップS3でNO)、ステップS4で、プロセッサ部11は、アシストを用いない自車オブジェクト101の移動処理を実行する。すなわち、プレイヤハンドル入力値309をそのまま利用する自車オブジェクト101の姿勢および移動の制御を行う。その後、上記ステップS2に戻り、処理が繰り返される。
【0063】
一方、「ハンドルアシスト」を利用する設定になっているときは(ステップS3でYES)、ステップS5で、プロセッサ部11は、パス決定処理を実行する。
【0064】
[パス決定処理]
ここで、
図18〜
図20を用いて、当該パス決定処理で行われる処理の概要について説明する。この処理では、自車オブジェクト101の現在位置からみて前後2つずつのパスを決定する処理が行われる。また、分岐がある場合には、その分岐先を判定する処理も実行される。具体的には、まず、自車オブジェクト101の位置および向きに基づいて、自車オブジェクト101に最も近いパス点が検索される。以下ではこのパス点を「基準パス点」と呼ぶ。なお、この基準パス点の検索においては、前回選ばれたパス点の前後にあるパス点を優先的に選ぶような制御も実行される。更に、当該基準パス点の前後に設定されているパス点を検索し、当該基準パス点が「通常パス」であるか「分岐パス」であるかを判定する処理も実行される(前後いずれかに複数のパス点が存在すれば、分岐パスとされる)。つまり、現在位置を基準とした分岐先の有無をリアルタイムに判断するため、例えば、所定条件が満たされたために急に「隠しルート」が出現したという場合にも柔軟に対応できる。
【0065】
基準パス点が決定されると、次に、自車オブジェクト101の移動速度およびハンドル入力値に基づいて、「基準方向」が算出される。この基準方向は、その時点における自車オブジェクトの進行方向を示す方向ベクトルである。更に、この基準方向を用いて、基準パス点から前後2つずつのパス点が決定される。以下では、この前後2つずつのパス点について、第1前方パス点、第2前方パス点、第1後方パス点、第2後方パス点と呼ぶ。また、基準バス点が上記のような分岐パスである場合は、その分岐先の決定も行われる。基準パスが分岐パスである場合における第1の前方パス点の決定の一例を、
図18のような自車オブジェクトとパスとの位置関係を例として説明する。
図18では、自車オブジェクト101と、基準方向(ベクトル)401、自車オブジェクト101に最も近いパス402およびその基準パス点403が示される。また、当該パス402は分岐パスでもあり、分岐先となるパス(候補パス)として、第1候補パス404およびその中心点である第1候補パス点405、第2候補パス406およびその中心点である第2候補パス点407も示されている。このような位置関係の場合、まず、基準方向401の先に、衝突する候補パス(球形として判断される)が存在するか否かが判定される。
図18の場合は、第2候補パス406のみが基準方向401と衝突する関係となっている。このように、衝突する候補パスが1つだけの場合は、当該衝突した候補パスにかかるパス点(第2候補パス点407)が、第1前方パス点(換言すれば、次のパス点)として決定される。
【0066】
次に、基準方向401と衝突する候補パスが複数あった場合の例について、
図19を用いて説明する。
図19では、第1候補パス404と第2候補パス406の双方が基準方向401に衝突するような位置関係を示している。この場合は、まず、自車オブジェクト101から、候補となるパス点(
図19の例では、第1候補パス点405および第2候補パス点407)へそれぞれ向かう方向ベクトル411および412を算出する。そして、当該算出した方向ベクトルのうち、基準方向401に最も近い方向ベクトルを判別し、その方向ベクトルにかかる候補パス点を次のパス点(第1前方パス点)として決定する。
図19の例では、方向ベクトル411よりも方向ベクトル412のほうが基準方向401に近いため、第2候補パス点407が第1前方パス点として決定されることになる。
【0067】
次に、基準方向401と衝突するパスがなかった場合の例について、
図20を用いて説明する。
図20では、基準方向401が、第1候補パス404および第2候補パス406のいずれにも衝突しないような位置関係を示している。このような場合は、基準パス点403から各候補パスのパス点405および407へ向かう方向ベクトルのうち、基準方向に最も近くなるようなベクトルにかかるパス点を第1前方パス点として決定する。
図20の例では、方向ベクトル411よりも方向ベクトル412のほうが基準方向401に近いため、第2候補パス点407が第1前方パス点として決定されることになる。
【0068】
また、第2前方パス点についても、上記と同様の処理で決定されることになる。すなわち、上記第1前方パス点にかかるパスを基準パスとして(また、基準方向はそのまま流用して)、上記と同様の処理を行う。
【0069】
また、第1後方パス点の決定については、まず、自車オブジェクト101がそれまでに通過したパスを記憶しておく(例えば最大8つまで記憶しておく)。そして、上記後方パスの候補を検索したときにこれら通過したパスが存在していれば、そのパスにかかるパス点を第1後方パス点として決定する。一方、通過したパス点が記憶されていない場合は、上記の基準方向を逆向きにしたベクトルを用いて、上記と同様の処理を行う。第2後方パス点の決定についても、同様の処理が行われる。
【0070】
上記のようにして、基準パス点と、その前後2つずつのパス点が決定すれば、更に、パスの補間処理も行われる。この補間処理は、上記決定された5つのパスそれぞれの右端パス点、および、左端パス点に基づいて曲線補間を行う処理である。換言すると、上記5つのパス点に基づいてコースの左右の端(壁)を算出する(いわばコースの左右幅の大きさ確定する)処理である。上記決定された5つのパスそれぞれの右端パス点同士を曲線補間しながら結んでいくことで、自車オブジェクト101の前後にかかるコースの右端(いわば、コース幅の右端を示す壁のような概念)が算出される。同様に、左端パス点同士を曲線補間しながら結んでいくことで、自車オブジェクト101の前後にかかるコースの左端(を示す壁のような概念)が算出される。このようにして算出されたコース端の情報が、後述のコースアウト防止処理等における「コース端」として用いられる。また、このような曲線補間を行うことで、後述するアシスト処理によって自車オブジェクト101が走行する際でも、なめらかに走行させることが可能となる。
【0071】
なお、このようなコース左右の端はあくまで上記のパスに基づいて生成されるものであるため、実際に画面に表示されるレースコースの左右端の位置とは厳密に一致している必要はなく、多少ずれた位置となっていてもよい。
【0072】
ところで、上記のようなパス決定処理は、換言すれば、自車オブジェクト101の周辺にかかるコースの構成(コース端の位置等)をリアルタイムで判定(把握)しているということもできる。そのため、上記のようなコース分岐に関して、分岐コースが所定の条件を満たした場合にのみ出現するというような場合でも柔軟に対応することができる。これにより、レースコースのギミック等をより充実させることができ、ゲームの興趣性をより高めることもできる。
【0073】
次に、
図21に、パス決定処理の詳細を示すフローチャートを示す。
図21において、まず、ステップS11で、プロセッサ部11は、上述したような基準方向、および、基準パス点を算出、決定する処理を実行する。また、決定した基準パス点が通常パスであるか分岐パスであるかを判定する処理も実行される。
【0074】
次に、ステップS12で、プロセッサ部11は、上述したような第1前方パス点、第2前方パス点、第1後方パス点、第2後方パス点の4つのパス点を決定する処理を実行する。
【0075】
次に、ステップS13で、プロセッサ部11は、上記決定された5つのパス点に基づいて、上述したような補間処理を実行する。以上で、パス決定処理は終了する。
【0076】
図16に戻り、パス決定処理が終われば、次に、ステップS6で、プロセッサ部11は、アシスト処理を実行する。
図22は、当該アシスト処理の詳細を示すフローチャートである。
図22において、まず、ステップS21で、プロセッサ部11は、コースアウト防止処理を実行する。
【0077】
[コースアウト防止処理]
図23を用いて、このコースアウト防止処理について説明する。
図23は、コースアウト防止処理のいくつかの例を示す模式図である。まず、この処理は、自車オブジェクト101がコース端にかなり接近している状態、換言すればコースアウト寸前といえるような状態のときに実行される。
図23の例でいうと、閾値線451Aよりも左側、または、閾値線451Bよりも右側に自車オブジェクト101(の一部)が存在している状態であることが実行条件とされる。そして、自車オブジェクト101の速度ベクトル452(その速度と方向)と、自車オブジェクト101から最も近いコース端の向き(進行すべき方向)とに基づいて、(プレイヤからのハンドル入力値に加えて)ハンドルを強制的に回す方向およびその量(
図23では、まとめて補正量453として示される)が算出される。ここで、速度ベクトル452には、自車オブジェクト101の移動速度と移動する方向を示す成分が含まれている。
【0078】
図23では、4つの例(Case)を示している。この例では、上記のコース端の向き(進行方向)については、全てのCaseで図の上方向となる。また、この例では、Case1よりもCase2のほうが、自車オブジェクト101がコース左端に対してより垂直な角度で接近していることを示す。また、Case2よりもCase3のほうが、更にコース左端に対して垂直な角度で接近していることを示す。この場合、Case1よりもCase2のほうがより大きくハンドルを切る必要がある。また、Case2よりもCase3のほうがより大きくハンドルを切る必要がある。そのため、ハンドルを回す方向については、いずれも右方向であるが、その量(補正量453A〜453C)については、Case1(補正量453A)よりもCase2(補正量453B)のほうが大きく算出される。また、Case2(補正量453B)よりもCase3(補正量453C)のほうがより大きく算出されることになる。換言すれば、速度ベクトル452がコース端に対して垂直な角度に近づくほど、その補正量は大きく算出され、速度ベクトル452と進行方向との角度差が小さいほど、その補正量も少なくなるような制御が行われる。
【0079】
また、上記のハンドルを回す方向とその量との他に、自車オブジェクト101の速度ベクトル542と、上記コース端の向き(進行すべき方向)とに基づいて、自車オブジェクト101自体を強制的に移動させる力を示す強制移動ベクトル454A〜454Cも算出される。これは、上記のハンドル入力値の補正だけではコースアウトを防げない可能性もあるため、ハンドル入力値の補正とは別に、自車オブジェクト101自体をコース端から遠ざけるように移動させるものである(自車オブジェクト101の姿勢はそのままでコース内側にスライド移動させるようなイメージとなる)。より具体的には、強制移動ベクトルに基づく加速度を自車オブジェクト101に加える。つまり、補正後のハンドル入力値に基づく自車オブジェクト101の移動に、更に強制移動ベクトルに基づく移動を加えることになる。この強制移動ベクトルについても、Case1(強制移動ベクトル454A)よりはCase2(強制移動ベクトル454B)のほうがより強い(長い)ベクトルとなり、Case2(強制移動ベクトル454B)よりもCase3(強制移動ベクトル454C)のほうがより強いベクトルとなる。なお、この例では、上記速度ベクトルが進行方向側に向いていることから、強制移動ベクトルの方向についてはCase1〜3のいずれも右方向となっている。
【0080】
また、Case4の場合は、自車オブジェクト101がやや逆走気味となるような向きでコース右端に近づいている状態を示している。この場合も、自車オブジェクト101の速度ベクトル452と、上記コース端の向き(進行すべき方向)とに基づいて、補正するハンドル方向および補正量453Dと、強制移動ベクトル454Dとが算出される。この場合は、自車オブジェクト101の速度ベクトルが進行方向とは逆方向の成分が含まれていることから、自車オブジェクト101を進行方向側に向けやすくするために、強制移動ベクトルについては、左上方向に向けたベクトル(速度ベクトル452とは逆方向のベクトル)が算出されている。
【0081】
このように、コースアウト防止処理では、今のままではコースアウトが避けられないような状況である場合に、自車オブジェクト101の速度ベクトルと、自車オブジェクト101から最も近いコース端の向きとに基づき、コースアウトしないようにするためのハンドル入力値の補正量と強制移動ベクトルとが算出される。
【0082】
なお、本実施形態では、このコースアウト防止処理では、絶対に自車オブジェクト101がコースアウトしないように、上記ハンドル入力値の補正方向・補正量と強制移動ベクトルが算出される。換言すれば、プレイヤが意図的にコースアウトしようとしても、コースアウト防止処理が機能する限りは、コースアウトができないようになっている。
【0083】
図24に、コースアウト防止処理のフローチャートを示す。
図24において、まず、ステップS31で、プロセッサ部11は、上記のようなコースアウト防止処理を実行する条件が満たされているか否かを判定する。上記の例では、
図23の閾値線451Aおよび451Bの外側(コース端に近い側)に自車オブジェクト101が存在しているか否かを判定し、存在していれば、実行条件を満たすと判定されることになる。なお、当該判定処理は、上記のような閾値線451を用いる判定処理に限るものではなく、同様の判定ができればどのような判定処理を用いてもよい。
【0084】
ステップS31の判定の結果、実行条件が満たされていない場合は(ステップS31でNO)、コースアウト防止処理は終了する。つまり、この場合は実質的なコースアウト防止処理は行われないことになる。一方、実行条件を満たすと判定された場合は(ステップS31でYES)、ステップS32で、プロセッサ部11は、自車オブジェクト101の速度ベクトル452を算出する。更に、ステップS33で、プロセッサ部11は、自車オブジェクト101から最も近いコース端の向きを算出する。そして、ステップS34で、プロセッサ部11は、上記速度ベクトル452およびコース端の向きに基づいて、上記ハンドル入力補正量453、および、上記強制移動ベクトル454を算出する。以上で、コースアウト防止処理は終了する。
【0085】
図22に戻り、コースアウト防止処理の次に、ステップS22で、プロセッサ部11は、自車オブジェクト101がレースコースの路面部分に接しているか否かを判定する。換言すれば、自車オブジェクト101が、(ジャンプ等によって)宙に浮いている状態ではないか否かを判定する。当該判定の結果、路面に接していない場合は(ステップS22でNO)、ステップS24で、後述する基本アシスト処理が実行される。一方、路面に接している場合は(ステップS22でYES)、ステップS23で、プロセッサ部11は、上記のコースアウト防止のための制御が行われたか否かを判定する。すなわち、上記
図24のステップS31でYESと判定されたか否かを判定する。その結果、コースアウト防止のための制御が行われていた場合は(ステップS23でYES)、ステップS26で、プロセッサ部11は、基本アシスト処理を実行する。一方、コースアウト防止のための制御は行われていなかった場合は(ステップS23でNO)、ステップS25で、プロセッサ部11は、予測ハンドル処理を実行する、その後、ステップS26で基本アシスト処理を実行する。
【0086】
[予測ハンドル処理]
上記予測ハンドル処理および基本アシスト処理について説明する。まず、予測ハンドル処理について説明する。
図25〜26は、予測ハンドル処理で行われる処理の概要を説明するための図である。この処理では、すぐにではないが、そのまま進むとコースアウトすることが予想されるような場合に、コースアウトの危険性を下げるために、コースの進行すべき方向により沿って進める状態となるように、ハンドル入力を補正する処理である。
図25の例は、自車オブジェクト101が直進している場合(プレイヤがハンドル操作していない場合も含む)の、予測ハンドルによる補正の一例を示す図である。また、
図26は、直進していない場合、すなわち、左右いずれかのハンドル入力がある状態か、あるいは、自車オブジェクト101が「ドリフト」している状態のときの予測ハンドルの例を示す図である。
【0087】
まず、当該予測ハンドル処理が実行される条件について説明すると、本処理は、コースアウト防止の制御が行われなかった場合で、かつ、自車オブジェクト101からコース端までの直線距離dが所定値よりも短い場合、に実行される。つまり、自車オブジェクト101がコース端からある程度近づいている状態のときに実行され得る。
【0088】
自車オブジェクト101が直進している場合の予測ハンドルの処理として、次のような処理が実行される。まず、自車オブジェクト101の速度ベクトル452に基づき、自車オブジェクト101の進行軌道461を予測する。次に、当該予測した進行軌道461に基づいて、自車オブジェクト101とコース端との衝突点を予測する(以下、この点を予測衝突点と呼ぶ)。そして、この予測衝突点におけるコース端の向き(進行方向)を算出する。
図25では、当該予測衝突点およびその向きについて、点および矢印で構成されるコース端向き462として示している。
【0089】
ここで、予測衝突点について、本実施形態では、自車オブジェクト101の横幅における左右端を基準として算出している。
図25の例では、自車オブジェクト101が左側のコース端に衝突予測される例であるため、自車オブジェクト101の左端とコース端とを結ぶ直線をコース端向き462の算出に利用している(右側のコース端への衝突が予測される場合は、この逆となる)。なお、他の実施形態では、これに限らず、例えば自車オブジェクト101の中心を通る直線を利用して予測衝突点を算出しても良い。
【0090】
そして、上記のように、コース端向き462が算出できれば、当該コース端向き462と速度ベクトル452(速度成分および向き成分)とに基づいて、ハンドルを強制的に回す方向とその量、すなわち、ハンドル入力補正量453が算出される。
図25では、左方向へのハンドル回転とその補正量が算出されることになる。そのため、仮に、
図25のような状態のときにプレイヤがハンドル操作を行っていないとしても、左方向へのある程度のハンドル入力が発生し、自車オブジェクトの向き(姿勢)が少しだけコースの進行方向に沿ったものに変化することになる。
【0091】
ここで、ハンドル入力値の補正量(ハンドルを回す方向およびその量)について、
図27を用いて補足説明する。当該補正量は、
図27のCase1で示されるように、自車オブジェクト101からコース端までの距離dが大きく、予測衝突点における、コースの向きと、自車オブジェクト101の向きとの向きが近いほど、補正量としては小さくなるように算出される。また、Case2で示されるように、コース端までの距離dが小さく、予測衝突点における、コースの向きと、自車オブジェクト101の向きとの向きが遠いほど、補正量は大きくなるように算出される。
【0092】
次に、
図26の、自車オブジェクト101が直進していない場合の予測ハンドル処理について説明する。上記の直進の場合は、進行軌道461も直線になるため、速度ベクトル452で示される向き成分を利用してハンドル入力値の補正量453が算出されていた。一方、左右いずれかのハンドル入力がある状態や、自車オブジェクト101がドリフトしている状態のときは、予測される軌道も直線ではなくなる。そのため、直進していない場合は、上記の速度ベクトル452における向き成分の代わりに、予測衝突点において予測される自車オブジェクト101の向きを利用する。
図26でいうと、速度ベクトル452の向きではなく、衝突時向き463で示される向きを利用して、ハンドル入力値の補正量453を算出する。
【0093】
ここで、予測ハンドル処理が行われる場合とそうではない場合について
図28を用いて補足説明する。この図では、プレイヤが(コースアウトしないような意図の)ハンドル入力を行いながらカーブを通過する場合を想定している。この場合、
図28のCase1で示される状態では、コースアウトしてしまうことが予測されるため、上記予測ハンドル処理が実行され、その結果、プレイヤのハンドル入力値に加えて、更にコース内側に向けたハンドル入力が加えられることになる。一方、
図28のCase2のような場合であれば、コースアウトする見込みがないため、予測ハンドル処理は行われないことになる。
【0094】
次に、
図29に、予測ハンドル処理のフローチャートを示す。
図29において、まず、ステップS41で、プロセッサ部11は、上記のような予測ハンドル処理の実行条件が満たされているか否かを判定する。当該実行条件を満たしていない場合は(ステップS41でNO)、予測ハンドル処理は終了する。一方、実行条件が満たされていた場合は(ステップS41でYES)、次に、ステップS42で、プロセッサ部11は、自車オブジェクト101の速度ベクトル452を算出する。続くステップS43で、プロセッサ部11は、速度ベクトル452に基づいて、上述したような予測衝突点とそこでのコースの向きを示すコース端向き462を算出する。
【0095】
次に、ステップS44で、プロセッサ部11は、所定時間内に自車オブジェクト101が予測衝突点に到達するか否か(つまり、コースアウトすることになるか否か)を判定する。その結果、所定時間内に到達しない場合は(ステップS44でNO)、予測ハンドル処理は終了する(上述の
図28のCase2のような場合に該当)。一方、所定時間内の到達が予測される場合は(ステップS44でYES)、ステップS45で、プロセッサ部11は、予測衝突点における自車オブジェクト101の向きである衝突時向き463を算出する。
【0096】
次に、ステップS46で、プロセッサ部11は、自車オブジェクト101が直進している状態か否かを判定する。その結果、直進している場合は(ステップS46でYES)、ステップS47で、プロセッサ部11は、速度ベクトル452の速度成分、向き成分、および、上記予測衝突点におけるコース端向き462に基づいて、ハンドル入力値の補正量を算出する。一方、直進していない場合は(ステップS46でNO)、ステップS48で、プロセッサ部11は、速度ベクトル452の速度成分と、衝突時向き463と、コース端向き462とに基づいて、ハンドル入力値の補正量を算出する。以上で、予測ハンドル処理は終了する。
【0097】
[基本アシスト処理]
次に、基本アシスト処理について説明する。本処理は、プレイヤのハンドル入力が、コースの進行方向に向かおうとするような入力の場合に、自車オブジェクト101の姿勢をコースの進行方向に沿う姿勢により近づけるためにハンドル入力値を補正する処理である。本処理は、次のような条件が満たされる場合に実行される。まず、1つ目の条件として、プレイヤからのハンドル入力、または、上記コースアウト防止処理または上記予測ハンドル処理に基づくハンドル入力(つまり、プレイヤがハンドル操作していない場合でも、上記の補正によるハンドル操作が発生している)があることが条件となる。2つ目の条件として、ハンドル入力が、コースの前方(進行方向、ゴール方向)に向かうように入力されていることが条件となる。なお、コースアウト防止処理または予測ハンドル処理に基づくハンドル入力は、必然的にコースの前方に向かう入力となるため、実質的には、プレイヤのハンドル入力がコース前方に向かおうとするものであるか否かが判定できればよい。更に、3つ目の条件として、自車オブジェクト101がある程度コース端に近い位置に存在していることも条件となる。具体的には、次に説明する
図30の閾値線471Aより左側、または471Bより右側に自車オブジェクト101存在している場合である(なお、当該閾値線471は、上記コースアウト防止処理の場合よりもコース内側に寄った位置となるよう設定されている)。これら3つの条件を全て満たしている場合に、基本アシスト処理は行われることになる。
【0098】
図30を用いて、基本アシスト処理の処理概要を説明する。
図30では、4つのCaseが示されている。Case1〜3は、自車オブジェクト101(の少なくとも一部)が閾値線471Aより左側に存在している状態である。また、Case4は、自車オブジェクト101(の少なくとも一部)が閾値線471Bより右側に存在している状態である。基本アシスト処理では、まず、自車オブジェクト101の速度ベクトル452と、自車オブジェクト101に最も近いコース端のコース端向き462を算出する。更に、自車オブジェクト101から当該コース端までの距離dも算出する。そして、プレイヤの入力に係るハンドル入力値と、上記距離dと、速度ベクトル452と、コース端向き462とに基づいて、ハンドル入力値の補正量453、および、上記コースアウト防止処理の場合と同様の強制移動ベクトル454を算出する。なお、ハンドル入力値の補正量に関して、本処理では、ハンドルを回す方向(ハンドルの向き)については、ここでは補正はされない。ハンドルを回す量についてのみ、例えば所定の倍率がかけられる等で補正量が算出される。上記のように、本処理は、コース前方に向かおうとするハンドル入力がなされていることが前提となっており、その向きについては補正の必要性はないからである。
【0099】
また、ハンドル入力値の補正量453、および、強制移動ベクトル454の大きさについては、距離dの長さが短くなるほど、強い補正がかかるように算出される。
図30では、Case1よりもCase2のほうが、より強い補正量が算出される。また、Case2よりもCase3のほうが、より強い補正量が算出される。
【0100】
また、Case4では、自車オブジェクト101がやや逆走気味となるような向きとなっている。ここで、上記コースアウト防止処理では、同様の状況の場合、強制移動ベクトルとして速度ベクトルと逆方向のベクトルが算出される例を示していた。一方、当該基本アシスト処理では、強制移動ベクトル454Dの向きについては、常にコース端の向きに垂直な方向となる。この処理では、上記コースアウト防止処理ほどの強い補正は行わないためである。
【0101】
なお、当該基本アシスト処理と上記コースアウト防止処理は重複して実行され得る。そのため、コースアウト防止処理による補正と基本アシスト処理による補正とが合算されてハンドル入力値が補正されることもあり得る。
【0102】
図31に、基本アシスト処理のフローチャートを示す。
図31において、まず、ステップS61で、プロセッサ部11は、上述したような基本アシスト処理の実行条件が満たされているか否かを判定する。実行条件が満たされていない場合は(ステップS61でNO)、基本アシスト処理は終了する。実行条件が満たされている場合は(ステップS61でYES)、ステップS62で、プロセッサ部11は、自車オブジェクト101の速度ベクトル452を算出する。更に、ステップS63で、プロセッサ部11は、自車オブジェクト101から最も近いコース端のコース端向き462を算出する。更に、ステップS64で、プロセッサ部11は、自車オブジェクト101から上記コース端までの距離dを算出する。そして、ステップS65で、プロセッサ部11は、上記速度ベクトル452、コース端向き462、距離d、プレイヤハンドル入力値309に基づいて、ハンドル入力値の補正量453および自車オブジェクトの強制移動ベクトル454を算出する。以上で、基本アシスト処理は終了する。
【0103】
図22に戻り、次に、ステップS27で、プロセッサ部11は、(今回の処理ループにおいて)コースアウト防止の制御、または、予測ハンドルの制御が行われたか否かを判定する。その結果、行われていれば(ステップS27でYES)、アシスト処理は終了する。一方、いずれも行われていなかったときは(ステップS27でNO)、ステップS28で、プロセッサ部11は、コース向き揃え処理を実行する。その後、アシスト処理が終了する。
【0104】
[コース向き揃え処理]
次に、
図32を用いて、上記コース向き揃え処理の概要を説明する。この処理は、コースアウト等の危険性が小さい状況において、自車オブジェクト101がなるべくコースに沿って走れるようにハンドル入力値に補正をかける処理である。その実行条件としては、以下の3つの条件を満たした場合に実行される。まず、1つ目として、(現在の処理ループにおける)これまでの処理において、コースアウト防止処理、予測ハンドル処理、基本アシスト処理の全てのアシスト制御が行われていないことが条件となる。また、2つ目として、自車オブジェクト101がドリフト状態ではないことも条件となる。更に、3つ目として、カーブの外側に向かう状況、またはカーブの内側に向かう場合であって、コース端に衝突する(コースアウトする)と予測される状況であることも条件となる。
【0105】
この処理では、次のような処理が実行される。まず、自車オブジェクト101の速度ベクトル452の算出と、自車オブジェクト101に最も近いコース端向き462の算出が行われる。そして、当該速度ベクトル452およびコース端向き462に基づいて、ハンドル入力値の補正方向および補正量453の算出が行われる。ここで、本処理では、コース端向き462と速度ベクトル452との向きとが大きく違っているほど(両者の角度差が大きいほど)、補正量453が大きくなるように、また、コース端向き462と速度ベクトル452との向きとが近いほど(両者の角度差が小さいほど)、その補正量453が小さくなるように算出される。
図32の例でいうと、コース端向き462と速度ベクトル452の向き(両者のなす角度)について見ると、Case1よりもCase2のほうが、その向きの違いが大きくなっている。そのため、Case1よりもCase2のほうが、その補正量としては大きな値が算出される。更に、Case2とCase3を比べると、Case3のほうが、両者の向きの違いが大きなものとなっている。そのため、そのため、Case2よりもCase3のほうが、その補正量としては大きな値が算出されることになる。
【0106】
なお、本処理においては、プレイヤのハンドル入力を優先させる制御も行われる。例えば、プレイヤからのハンドル入力が検出されている場合は、上記の補正量を弱めたり、あるいは、全く補正しないようにしたりする制御も行われる。
【0107】
コース向き揃え処理の他の一例を
図33に示す。
図33は、自車オブジェクト101がカーブを通過する場合の一例を示す図である。まず、
図33のCase1では、自車オブジェクト101は、カーブの内側に向かう状態となっている。また、カーブの内側の端に衝突する恐れもない状態である。このような場合は、コース向き揃えの処理は行われないことになる。一方、Case2では、自車オブジェクト101がカーブの中間に差し掛かり、自車オブジェクト101がカーブの外側に向かう状態に変化している。このように、カーブの外側に向かう状態となれば、コース向き揃え処理が実行される。その結果、自車オブジェクト101の走行軌道が、少し内側向きに変化することになる、
【0108】
このように、コース向き揃え処理では、他のアシスト処理が行われていない状況で、プレイヤのハンドル入力を優先させながらも、自車オブジェクト101の向きがコース向きに沿う方向に近づくように若干の補正を加える、という処理行うものである。
【0109】
図34に、コース向き揃え処理のフローチャートを示す。
図34において、まず、ステップS71で、プロセッサ部11は、上記のようなコース向き揃え処理の実行条件が満たされているか否かを判定する。その結果、満たされていない場合は(ステップS71でNO)、コース向き揃え処理は終了する。一方、実行条件が満たされていた場合は(ステップS71でYES)、ステップS72で、プロセッサ部11は、自車オブジェクト101の速度ベクトル452を算出する。更に、ステップS73で、プロセッサ部11は、自車オブジェクト101から最も近いコース端向き462を算出する。
【0110】
次に、ステップS74で、プロセッサ部11は、操作データ302を参照して、プレイヤからのハンドル入力が行われているか否かを判定する。その結果、プレイヤのハンドル入力が行われていない場合は(ステップS74でNO)、ステップS75で、プロセッサ部11は、上記速度ベクトル452の向きおよびコース端向き462に基づいて、ハンドル入力の補正値453を算出する。一方、プレイヤからのハンドル入力が行われている場合は(ステップS74でYES)、ステップS76で、プロセッサ部11は、プレイヤのハンドル入力を考慮した補正量の算出処理を行う。例えば、上記ステップS75の処理で算出される補正量453よりも小さな値の補正量となるように補正量453を算出する。また、他の実施形態では、補正量として0を設定するようにしてもよいし、ステップS76の処理自体行わないような制御としても良い。以上で、コース向き揃え処理は終了する。
【0111】
図16に戻り、アシスト処理が終われば、ステップS7で、プロセッサ部11は、上記アシスト処理の結果を反映して自車オブジェクト101を移動させる。すなわち、上述したアシスト処理において算出された補正量を用いて、プレイヤハンドル入力値309を補正し、当該補正後の値で自車オブジェクト101を移動制御する処理が実行される。その後、上記ステップS2に戻り、処理が繰り返される。
【0112】
以上で、本実施形態にかかるハンドルアシスト処理の詳細説明を終了する。
【0113】
このように、本実施形態では、上記のようなアシスト処理を用いて補正量を算出し、プレイヤが入力したハンドル入力値を補正している。そして、当該補正後のハンドル入力値を用いて、自車オブジェクト101の移動制御を行っている。これにより、自車オブジェクト101の動きについてプレイヤに違和感を与えずに、プレイヤのハンドル操作をサポートできる。また、レースゲームが下手なプレイヤであっても、上記のようなアシスト処理によって、レースコースを上手く走れるようにサポートでき、ゲームの興趣性をより高めることができる。
【0114】
また、上記補正内容の決定についても、上記のようにコース端に基づいて補正量を決定している。そのため、コースアウトしそうな場合や、コース端が壁であった場合はその壁への激突等の、コースに沿った走行にプレイヤが失敗しそうな場合を想定した、より適切な補正が可能となる。
【0115】
なお、上述したようなハンドルアシスト処理にかかる制御は、基本的には、コースアウトの回避(コース端への衝突の回避)を主眼としたものであったが、この他、他の実施形態では、例えば所定のオブジェクトとの衝突を回避するために上記のような制御処理を適用してもよい。この場合は、上述した処理におけるコース端との衝突(コースアウト)の判定を、所定のオブジェクトとの衝突に置き換えるような処理とすればよい。特に、上述した処理におけるコース端におけるコースの向き(進行方向、コース端向き)に該当するものとして、所定のオブジェクトとの予測衝突点での接線であって、コースの進行方向側の線を用いるようにすればよい。また、実行する制御に関しては、上述した予測ハンドル処理と、コースアウト防止処理に相当する処理のみを実行するようにすればよい。
【0116】
また、その他、対戦レースの場合に、上述したような処理を適用しても良い。ここで、対戦レースの場合、コースの壁に正面からぶつかってしまった場合の復帰が初心者にとっては難しい場合が多い。そのため、上級者との対戦が十分に楽しめなくなる可能性もある。そこで、上述したような処理を利用してコースの壁を検知するようにして、コース壁に衝突させずに、自車オブジェクトを旋回させるような制御を行ってもよい。このときは、そのときにプレイヤから入力されているハンドル入力方向に自車オブジェクトを旋回させるようにすればよい。また、もしプレイヤからのハンドル入力が無かった場合は、前回(一番最後)までにプレイヤから入力されたハンドル入力方向に旋回させるようにすればよい。そして、コース壁と衝突しなくなる向きまで自車オブジェクトを旋回させれば、このような処理を終了すればよい。
【0117】
また、ハンドル入力に関して、上記の例では、第1アナログスティック63を用いたアナログ入力である場合を例に挙げた。この他、例えば十字キー65による入力をハンドル操作に用いるようにしても良い。この場合は、デジタル入力となるため、上記プレイヤハンドル入力値309は、−1、0、+1のうちのいずれかの値となるが、この場合でも、上記のような補正処理は適用可能である。
【0118】
また、上記実施形態では、コース端の算出については、上記パスデータ306を用いて、自車オブジェクト101の現在位置の前後2パス分におけるコースの端をリアルタイムに算出するようにしていた。この他、他の実施形態では、コース端を示す情報については、上記のようなパスデータの形式に限らず、他の形式でデータを持たせるようにしてもよい。例えば、仮想空間内におけるコース端の座標を羅列したような端データを用いてもよい。このようなデータを用いて、コース端の位置を判別し、上記のようなコースアウトの判定やコース端向き463の算出等を行ってもよい。
【0119】
また、上記の例ではレースゲームの例を挙げたが、この他、例えばレースでは無いドライブゲーム等にも上記の処理は適用可能である。例えば、プレイヤが自分で仮想空間内における目的地(レースゲームのゴールに相当)を設定して、当該仮想空間内を走行するようなドライブゲームにも適用可能である。
【0120】
また、上記実施形態においては、ハンドル入力値を補正するための一連の処理が単一の装置において実行される場合を説明したが、他の実施形態においては、上記一連の処理が複数の情報処理装置からなる情報処理システムにおいて実行されてもよい。例えば、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの一部の処理がサーバ側装置によって実行されてもよい。さらには、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの主要な処理がサーバ側装置によって実行され、当該端末側装置では一部の処理が実行されてもよい。また、上記情報処理システムにおいて、サーバ側のシステムは、複数の情報処理装置によって構成され、サーバ側で実行するべき処理を複数の情報処理装置が分担して実行してもよい。