【文献】
「3D格闘ツクール公式ガイドブック ザ・モーションマスターズ」,日本,株式会社アスキー,1998年 7月30日,初版,p.190-197,(特に、p.193)
(58)【調査した分野】(Int.Cl.,DB名)
前記指向速度決定手段は、距離を複数の領域に分け、前記距離取得手段によって取得された対象物距離がどの領域に存在するかにより前記指向速度を決定する手段である請求項1または請求項2に記載のゲームプログラム。
【発明を実施するための形態】
【0016】
図面を参照してこの発明の実施形態であるゲームプログラムおよびゲーム装置(コンピュータ)について説明する。
【0017】
≪装置の構成≫
まず、ゲームプログラムが実行されるゲーム装置について説明する。
図1は、ゲームプログラムが実行されるゲーム装置(コンピュータ)の外観図である。
このゲーム装置は、ゲーム装置本体10にコントローラ20が接続されて構成されている。コントローラ20は、遊技者によって操作される。遊技者は、このコントローラ20を用いて、ゲーム中に登場する主キャラクタ等を操作する。なお、ゲームは、遊技者の操作およびゲームプログラム、ゲーム装置で構成されるゲームシステムの処理動作で進行するが、以下の説明では、動作の内容に応じて、主キャラクタを主語とし、主キャラクタの動作として説明する場合がある。
【0018】
ゲーム装置本体10は、ゲームプログラムが記録された記録媒体(記憶媒体)15がセットされるトレイ11を有している。記録媒体15は、たとえばDVD(digital versatile disc)である。ゲーム装置本体10は、この記録媒体15からゲームプログラムを読み取って、このプログラムを実行する。なお、記録媒体15は、DVD以外であってもよく、例えばCD、Blue−ray Disc、または、内蔵のハードディスクなどを用いることができる。
【0019】
また、装置前面には、コントローラ20が接続されるコネクタ12、フラッシュメモリからなるカード型の外部メモリ45(
図2参照)がセットされるメモリスロット13が、それぞれ2つずつ設けられている。
【0020】
コントローラ20は、略コ字形をしており、遊技者が両翼部のハンドルを左右両手で把持して操作する。コントローラ20の左右上面には操作ボタン群およびアナログスティックが設けられている。遊技者は、これら操作ボタン群、アナログスティックを操作して主キャラクタやカメラ位置を制御する。この遊技者の操作に応じてゲーム中の主キャラクタは、たとえば、歩く、銃を構える、振り向く等の動作を行う。
【0021】
図2は、ゲーム装置本体10およびコントローラ20の内部構成を示すブロック図である。
ゲーム装置本体10は、装置全体の動作を制御するCPU31を有している。このCPU31に対してRAM32およびバス33が接続される。RAM32には、ゲームの進行に応じて各種のデータが記憶される。
【0022】
バス33には、グラフィック・プロセッサ・ユニット(GPU)34、インプット・アウトプット (I/O)ポート39が接続される。GPU34には、デジタル映像信号をNTSCテレビジョン方式やPALテレビジョン方式に変換するためのデコーダ37を介して、外部機器であるモニタ(テレビジョン装置:TV)38が接続される。
【0023】
I/Oポート39には、光ディスク等の記録媒体15に記録されているデータを再生し、デコードするためのドライバ(DRV)40,サウンド・プロセッサ(S.P)42、外部メモリ45、コントローラ20およびROM46が接続される。
コントローラ20は、I/Oポート21を介して各種操作子群22をゲーム装置本体10のI/Oポート39に接続する。
【0024】
ROM46には、このゲーム装置本体10を起動するとともに基本的な機能を実現するためのシステムプログラムが記憶されている。外部メモリ45には、遊技者の情報や実行しているゲームの途中経過等が記憶される。遊技者は、ゲームプログラムを記憶した記憶媒体15と自己の外部メモリ45をセットすることにより、途中で中断したゲームを、その中断したタイミングから再開することができる。
【0025】
サウンド・プロセッサ42は、増幅器43を介して、外部機器であるスピーカ44に接続される。このスピーカ44は、一般的には、テレビジョン装置に内蔵されている上記モニタ38と一体のスピーカである。
【0026】
《ゲームプログラムの構成》
次にこのゲーム装置で実行されるゲームプログラムについて説明する。このゲームプログラムは、いわゆるサードパーソンシューティングゲームであり、
図3はサードパーソンシューティングゲームの一場面を表示するゲーム画面を示す図である。
【0027】
サードパーソンシューティングゲームは、遊技者の操作によって活動する主キャラクタが、敵キャラクタを銃等で倒していき、複数のゲームステージをクリアしていくものである。このゲームでは、主キャラクタ、敵キャラクタおよびゲーム空間が生成され、キャラクタがゲーム空間内で活動する。主キャラクタおよび敵キャラクタは互いに相手に攻撃をしかけ、相手に攻撃を命中させると相手にダメージを与え、相手の攻撃が命中するとダメージを受ける。
【0028】
主キャラクタは前記ゲーム空間内で様々なアクションを行う。
図3(A)は、銃を持った主キャラクタがゲーム空間を歩いている様子を示している。遊技者がコントローラ20の左スティック(方向キー)を前に倒せば正面に向かって歩き、左斜めに倒せば左の方向に歩き、右斜めに倒せば右の方向に歩く。
図3(B)は、主キャラクタが箱に向かって銃を構えている様子を示している。遊技者がコントローラ20のR1ボタンを押すと主キャラクタが銃を構え、銃の弾道を示す「レーザーサイト」が表示される。
図3(C)は、主キャラクタが箱に向けて銃を撃ち終わった後の様子を示している。遊技者が銃で狙いたい箇所に左スティックキーで照準を合わせてコントローラ20の□ボタンを押すと主キャラクタがその方向に向けて銃を撃つ。
【0029】
これらの歩く、銃を構える等の基本動作は、それぞれのモーションデータに基づいて一般的なキーフレーム法等を用いて実現(描画)される。モーションデータとは、基本動作の一連の動きに関してキャラクタの1コマ1コマ(1フレーム毎)の動きを描画するための時系列のデータであり、1コマ1コマにおけるキャラクタの姿勢を形成するための各関節の位置や向き(角度)等を特定するためのデータである。一般的に、モーションデータに基づいて変換行列(モデルローカル行列)が生成される。変換行列は、関節の数だけあり、主キャラクタにおける標準姿勢での関節の位置および向きを、平行移動、拡大・縮小、回転等して現在の姿勢での位置および向きに変換するための行列(物体の姿勢の変換行列)である。
【0030】
ここで、主キャラクタの標準姿勢とは、主キャラクタの基準となる姿勢であり、一般的に肩幅に足を開いて直立し、両腕を左右に伸ばした状態(
図5の姿勢から両腕を水平にあげた状態)をいう。この標準姿勢における主キャラクタの体軸をy軸とし、左足踵から右足踵へ向かう直線をx軸とする。このx軸とy軸との交点を原点とする。そして原点から主キャラクタの正面方向へ伸びる直線をz軸とする。このような主キャラクタの足元を原点とした座標系をモデルローカル座標系とする。標準姿勢での各関節のモデルローカル座標系の位置および向きは、行列で表現されてゲームデータとして予め記録媒体15に記録されている。標準姿勢での関節の行列に、対応する変換行列を掛けることで、現在の姿勢での関節のモデルローカル座標系の位置および向きを表す行列を取得できる。この座標変換は、一般的な技術であるので詳細な説明は省略する。モーションデータは、予めゲームプログラムのゲームデータとして記録媒体15に記録されている。
【0031】
また、キャラクタは、モーションデータに基づく基本動作以外に、振り向き動作(指向動作)も行う。指向動作とは、キャラクタが特定の対象物(指向対象物)に対して人間のように振り向く一連の動作であって、キャラクタの体全体ではなく頭などの体の一部が指向対象物に向く動作をいう。本実施形態のキャラクタは、指向対象物に向かって上半身が旋回し、顔の正面が指向対象物に向くような指向動作を行う。
図5に示すような構造の主キャラクタの場合、指向動作は、上半身の1または複数の関節の向きを(関節の位置において)モデルローカル座標系におけるy軸方向に対して回転させて顔(頭)を足の向いている方向と異なる方向に向かせることによって行われる。この指向動作は、キャラクタに基本動作をさせている間に行われ、モーションデータに基づいて基本動作をさせる処理(モーション処理)とは別に演算処理(指向処理)で実現される。
【0032】
上述したゲーム装置にこのゲームプログラムが読み込まれることにより、
図4(A)に示すような機能部を備えたゲームシステムが構成される。ゲームシステムは、操作検出部50、ゲーム進行制御部51、主キャラクタ制御部52、敵キャラクタ制御部53、ゲーム空間制御部54、アタリ判定部55、描画処理部56からなっている。操作検出部50は、CPU31、RAM32等からなるデータ処理部およびコントローラ20を含み、遊技者の各種操作を検出して、ゲーム進行制御部51に伝達する。ゲーム進行制御部51は、CPU31、RAM32等からなるデータ処理部を含み、仮想のゲーム空間やキャラクタを生成するとともに、遊技者の操作や時間の経過等に応じて、上述のゲーム空間を変化させたりキャラクタを活動させたりする等の処理を行ってゲームを進行させる。
【0033】
ゲーム進行制御部51は、主キャラクタの活動を制御する主キャラクタ制御部52、主キャラクタと戦う敵キャラクタの活動を制御する敵キャラクタ制御部53、三次元のゲーム空間の生成および天候などの環境を制御するゲーム空間制御部54、主キャラクタおよび敵キャラクタに相手からの攻撃が当たったか否かを判断するアタリ判定部55を有している。主キャラクタ制御部52は、操作検出部50から入力される操作情報に基づいて主キャラクタの活動を制御する。敵キャラクタ制御部53は、生成されたゲーム空間内に生息する敵キャラクタを生成するとともに、主キャラクタの活動に対応した活動(戦闘)を行わせる。ゲーム空間制御部54は、操作検出部50から入力された操作情報に基づいて選択されたゲームステージのゲーム空間を生成する。アタリ判定部55は、主キャラクタ制御部52および敵キャラクタ制御部53で制御する主キャラクタおよび敵キャラクタが攻撃を受けたか否かを判定する。描画処理部56は、ゲーム進行制御部51が生成したゲーム空間、キャラクタを二次元のスクリーンに投影したゲーム画像を生成してモニタに出力する。
【0034】
主キャラクタ制御部52が生成する主キャラクタは、
図5に示すように人間と同様の構造をしている。すなわち、頭100、首101、胸102、腹103、腰104、腕105、脚106等の部位で構成され、各部位が関節を介して接続された複数の骨で支持されている。主キャラクタの体表面は多数のポリゴンの組み合わせで構成されており、各ポリゴンの頂点は1または複数の関節に関連づけられている。主キャラクタの動作は、関節を移動または回転させることで行われるが、このように関節が動かされたとき、その関節に関連づけられているポリゴンが連動して変形し、これにより、主キャラクタの様々な姿勢の姿が表現される。指向処理では、頭関節111、首関節112、胸関節113、腹関節114の向きをy軸方向に対して所定角度ずつ回転させる。この回転に伴って、これらの関節111〜114に関連する肩、腕等の関節も移動する。これにより、上半身全体で振り向く自然な指向動作を実現することができる。また、頭関節111のみ(または頭関節111および首関節112)の向きを回転させることにより、他の動作をしながら頭のみ振り向く別のパターンの指向動作を実現することができる。
【0035】
主キャラクタ制御部52は、立ち止まる、歩く、銃を構える等の基本動作を制御するためのモーションデータを有している。また、主キャラクタ制御部52は、モーションデータによる処理とは別に、指向動作を制御する演算処理(指向処理)を行う。
図4(B)に示すように、各モーションデータには主キャラクタがその基本動作を行っているときに指向動作の付加を許可するか否かの情報が記憶されている。指向動作の付加が許可されている基本動作を行っているときに指向対象物が現れた場合、主キャラクタはその基本動作と同時に指向動作も行う。一方、指向動作の付加が許可されていない基本動作を行っている場合には、指向対象物が現れても主キャラクタはその基本動作のみ行い、指向動作は行わない。
【0036】
図4(B)において、基本動作のうち、指向動作の付加が許可(○)されているものは、その基本動作中に振り向くことが可能なものである。たとえば、立ち止まっているときや歩行中に横や斜め前に振り向いても不自然ではないため、このような基本動作では指向動作が許可される。また、基本動作のうち、指向動作の付加が禁止(×)されているものは、その基本動作中に振り向くとその動作が成立しないようなものである。たとえば、銃を構えているときに振り向くと銃の向きが変わってしまうため、このような基本動作では指向動作が禁止される。さらに、基本動作のうち、頭100のみで振り向くような指向動作の付加のみ許可(△)されているものがある。たとえば自動車の運転中は、振り向くことは自然だが上半身が動いてしまうと運転ができないため、このような基本動作では頭100のみ旋回させる指向動作のみ許可される。
【0037】
主キャラクタが銃を構える基本動作を行っている場合、指向動作の付加が禁止されているのは、銃を構えている間に指向対象物の方向に振り向かせると、狙いたい方向に銃を構えることができず、不自然な動作になるからであり、さらに、頭100だけを振り向かせた場合も、銃を構えて脇見をしている状態となってしまい不自然だからである。
【0038】
《指向処理の説明》
主キャラクタを指向対象物に振り向かせる指向処理では、顔を指向対象物の方向に旋回させてゆく動作を行うための頭関節111、首関節112、胸関節113、腹関節114の回転角度(指向角度)を毎フレーム演算する処理が行われる。さらに、指向処理では、基本動作のモーションデータによって制御される各関節の向きに関するy軸方向の回転角度に、演算により取得された指向角度を付加する処理が行われる。フレームとは、描画を行う間隔(タイミング)のことであり、一般的に1フレームあたり1/60秒である。指向処理における関節111〜114の指向角度の演算は、主キャラクタから指向対象物までの距離を用いて行われる。つまり、指向処理において主キャラクタを指向対象物に指向させる速度(1フレームあたりに指向する角度)を主キャラクタから指向対象物までの距離に応じて決定する。指向速度は主キャラクタから指向対象物までの距離が近いほど速くし、遠いほど遅くする。これにより、リアリティのある自然な振り向き表現を実現することができる。
【0039】
図6は、指向処理における主キャラクタの指向領域を説明する図である。同図は、三次元のゲーム空間を上方から見たワールド座標系のX−Z軸平面の図である。ワールド座標系は、三次元のゲーム空間における座標系である。指向領域とは、この範囲内に敵キャラクタ等の指向対象物が存在する場合に、主キャラクタに指向動作を行わせる領域である。この実施形態においては、
図6に示すように、指向領域を主キャラクタからの距離が最遠距離以内で、主キャラクタの正面方向(0度)を含む主キャラクタの右90度から左−90度の半円範囲としている。
【0040】
ここで、主キャラクタの正面方向とは、主キャラクタが直立したとき体の正面が向く方向である。つまり、
図5に示すモデルローカル座標系のz軸方向が主キャラクタの正面方向である。指向領域に指向対象物が存在する場合、主キャラクタの顔をその指向対象物の方向に旋回させる。この旋回の角速度である指向速度は主キャラクタから指向対象物までの距離が近いほど速く、遠いほど遅くする。ただし、無制限に速度を変化させると、指向対象物が主キャラクタの至近距離に存在する場合、指向速度が速くなり過ぎてしまい、指向対象物が最遠距離付近に存在する場合、指向速度が遅くなり過ぎてしまう。そこで、本実施形態の制御では、指向速度が変化する範囲を限定し、指向速度を最も速くする限界の距離を最速距離、指向速度を最も遅くする限界の距離を最遅距離として設定する。主キャラクタから指向対象物までの距離が最速距離よりも近い場合、指向速度は最速距離のときの速さと同じ速さとなり、最遅距離よりも遠い場合、最遅距離のときの速さと同じ速さとなる。
【0041】
なお、この実施形態では、指向領域を最遠距離以内で左右90度の角度範囲の半円としているが、指向領域はこのような領域に限定されない。後ろ方向に指向対象物が存在しても主キャラクタに振り向かせるように、指向領域の角度範囲を広げてもよい。また、指向領域内に下限を制限するか否かは任意である。また、最速距離、最遅距離は
図7に示した位置以外の位置に設定してもよい。
【0042】
上述のように、指向対象物が指向領域内に存在する場合、主キャラクタは指向処理によって指向対象物の方向に振り向く。一方、指向対象物が指向領域内に存在しない場合、主キャラクタは指向処理によって正面方向に向き直る。すなわち、指向処理は、指向対象物がなくなったとき主キャラクタの正面への向き直りも制御する。また、指向領域内に複数の指向対象物が存在する場合、原則として最も主キャラクタから距離が近い指向対象物について指向処理を行う。また、指向対象物が主キャラクタの後方から現れた場合、指向対象物が指向領域内に入った時点でその距離に応じた指向処理を行う。
【0043】
また、
図6において、指向対象物が指向領域内に存在した場合に、主キャラクタから指向対象物までの距離をL、主キャラクタの正面方向と主キャラクタおよび指向対象物を結んだ線とが成す角度(目標角度)をa、現在の指向角度をb、目標角度aから現在の指向角度bを引いた差分角度(実際に動かしたい角度)をCとする。
【0044】
ここで、主キャラクタおよび指向対象物を結んだ線は、主キャラクタおよび指向対象物の位置を特定する情報を用いればよく、例えばゲーム空間における主キャラクタおよび指向対象物のゲーム空間への配置の基準となる位置座標(
図5に示す原点のワールド座標系の位置座標)を結ぶ線や、主キャラクタおよび指向対象物の頭関節の位置又は首関節の位置を結ぶ線でもよい。
【0045】
指向処理では、主キャラクタを距離Lに応じた指向速度で指向させるため、距離Lに基づいて1フレームあたりの変更可能角度rを算出し、それから実際に動かしたい角度Cを算出する。実際に動かしたい角度Cは1フレームの変更可能角度rより大きい場合が多い。その場合は、今回のフレームから次回のフレームの間でrだけ振り向きの姿勢を変更する。ただし、Cがr以下の場合は、rにCの値を代入し、Cだけ振り向きの姿勢を変更する。なお、主キャラクタも指向対象物も移動するため、毎フレームごとにr、Cを算出し直す。このように、主キャラクタから指向対象物までの距離Lに応じて1フレームあたりの指向角度rを変えることにより、指向速度を制御する。距離による1フレームあたりの変更可能角度rの計算については
図9の説明で後述する。
【0046】
図7は、
図4のゲーム進行制御部51が実行するゲーム処理を示すフローチャートである。まず、ゲーム処理がスタートすると、遊技者が操作するコントローラから操作情報を取得する(S10)。この取得した操作情報に基づいて、遊技者が操作する主キャラクタの配置処理(S11)およびモーション処理を行う(S12)。配置処理とは、ゲーム空間内の所定位置にキャラクタを生成して配置する処理である。モーション処理とは、操作情報等に基づいて基本動作の選択(モーションデータの選択)、選択したモーションデータに基づく1フレーム毎のキャラクタの姿勢の決定等、を行う処理である。配置処理およびモーション処理については、周知の処理であるので詳細な説明は省略する。そして、指向対象物の有無等に応じて指向処理を行う(S13)。指向処理については
図10の説明で詳述する。同様に、敵キャラクタについても配置処理(S14)、モーション処理(S15)および指向処理を行う(S16)。その後、ゲーム空間処理やアタリ判定などのその他のゲーム処理を行い(S17)、これらの処理の結果を表示処理によって画面に表示する(S18)。ゲームプレイ中は以上の処理が定期的に繰り返される。
【0047】
図8は、
図4の主キャラクタ制御部52が実行する主キャラクタの指向処理を示すフローチャートである(
図7のS13)。指向処理では、まず、主キャラクタに行わせている基本動作に指向動作の付加が許可されているか否かを判定する(S29)。主キャラクタが指向動作の付加が許可されていない基本動作を行っている場合(S29でNO)には、指向処理が付加される余地がないため、この指向処理をスキップしてリターンする。一方、指向動作の付加が許可されている場合(S29でYES)、主キャラクタの指向領域内に指向対象物が存在するか否かを判定する(S30)。指向領域内のオブジェクト(敵キャラクタ等)が、主キャラクタにとって指向対象物であるか否かはそのオブジェクトに付加されている指向対象物フラグ等の情報に基づいて判断される。
【0048】
指向領域内に指向対象物が存在する場合(S30でYES)、この指向対象物を指向処理の対象として選択する(S31)。指向対象物が指向領域内に1つしか存在しない場合、該指向対象物を指向処理の対象として選択し、複数の指向対象物が指向領域内に存在する場合、最も近い指向対象物を指向処理の対象として選択する。指向対象物の選択後、目標角度a、距離Lを計算する(S32)。
【0049】
また、指向対象物が指向領域内に存在しない場合(S30でNO)、主キャラクタの正面(0度)を目標角度aにし、主キャラクタから指向対象物までの距離Lは最遅距離とする(S34)。例えば主キャラクタが指向対象物に指向していた状態において指向対象物が他のキャラクタによって攻撃等されて消滅した場合に、指向処理を行わずに主キャラクタを正面に向けてしまうと、1フレームで突然正面に向き直ってしまい、キャラクタの動きが不自然になる。そこで、最も遅い速度で正面に向き直るという指向処理をすることで自然な動作を実現することができる。
【0050】
次に、距離Lによる1フレームあたりの変更可能角度rを計算する(S35)。1フレームあたりの変更可能角度rは主キャラクタから指向対象物までの距離によって一次関数的に変化する。これについては
図11において詳述する。それから、目標角度aから現在の指向角度bを減算して実際に動かしたい角度Cを計算する(S36)。そして、実際に動かしたい角度Cが1フレームあたりの変更可能角度rより大きいか否かを判定する(S37)。
【0051】
実際に動かしたい角度Cが1フレームあたりの変更可能角度rより大きい場合(S37でYES)、現在の指向角度bに1フレームあたりの変更可能角度rを加算してbの値を更新する(S38)。すなわち、1フレームで実際に動かしたい角度Cだけ指向させることができないため、1フレームあたりの変更可能角度rだけ指向させる。主キャラクタから指向対象物までの距離によって指向速度を制御するためである。
【0052】
一方、実際に動かしたい角度Cの値が1フレームあたりの変更可能角度rの値以下の場合(S37でNO)、1フレームあたりの変更可能角度rの値を実際に動かしたい角度Cの値に補正する(S39)。角度Cの値がrの値以下であれば、1フレームで実際に動かしたい角度Cだけ指向させることができる。したがって、現在の指向角度bに、実際に動かしたい角度Cの値に補正した変更可能角度rを加算して指向角度bの値を更新する。(S38)。すなわち、指向処理は指向角度bの値を保存しつつ、毎フレーム指向角度bの値を更新する処理である。
【0053】
そして、指向処理によって指向させるのが、頭関節111のみ(または頭関節111および首関節112)か否か(
図4(B)で○か△か)を判定する(S40)。指向処理によって指向させるのが頭関節111のみではなく上半身全体である場合(S40でNO)、基本動作によって決定されたそのときの頭関節111の向きに関するy軸方向に対する回転角度にb/2度、基本動作によって決定されたそのときの首関節112、胸関節113、腹関節114の向きに関するy軸方向に対する回転角度にそれぞれb/6度加算して、上半身全体を指向させる(S41)。各関節の向きを所定角度ずつ回転させることにより、下半身はモーションデータに基づく姿勢のままで上半身全体のみ振り向かせることができる。また、指向処理によって指向させるのが、頭関節111のみである場合(S40でYES)、基本動作によって決定されたそのときの頭関節111の向きに関するy軸方向に対する回転角度にb度加算し、頭100のみを指向させる(S42)。これにより、胴体はモーションデータに基づく姿勢のままで頭100のみ振り向かせることができる。例えば、主キャラクタが自動車の運転中に指向処理が許可されている場合、主キャラクタはハンドルを握りシートに座って、胴体は進行方向を向いたままで頭のみ指向対象物の方向に振り向かせることができる。
【0054】
図9は、距離による1フレームあたりの変更可能角度rの計算方法を示すフローチャートである。まず、主キャラクタから指向対象物までの距離Lが最速距離よりも大きいか否か判定する(S50)。距離Lが最速距離以下の場合(S50でNO)、指向速度が速くなり過ぎることを防ぐため、距離Lを最速距離に補正する(S51)。一方、距離Lが最速距離よりも大きい場合(S50でYES)、主キャラクタから指向対象物までの距離Lが最遅距離よりも小さいか否か判定する(S52)。距離Lが最遅距離以上の場合(S52でNO)、指向速度が遅くなり過ぎることを防ぐため、距離Lを最遅距離に補正する(S53)。一方、距離Lが最遅距離よりも小さい場合(S52でYES)、S54の処理に移行する。
【0055】
次に、距離Lに基づいて角度倍率を計算する(S54)。角度倍率は以下の式によって求められる。
角度倍率=2−(L−最速距離)/(最遅距離―最速距離)
【0056】
指向対象物が最遅距離に存在する場合、L=最遅距離なので、角度倍率は1倍となる。指向対象物が最速距離に存在する場合、L=最速距離なので、角度倍率は2倍となる。指向対象物が最遅距離と最速距離との間に存在する場合、角度倍率は1倍から2倍の間となる。このように距離Lの値に応じて角度倍率は1倍から2倍の間で変化する。
【0057】
そして、基礎1フレーム回転角度に角度倍率をかけて距離による1フレームあたりの変更可能角度rを計算する(S55)。基礎1フレーム回転角度とは、指向対象物が最遅距離に存在する時の1フレームに変更可能な角度をいう。この基礎1フレーム回転角度は、予めゲームデータとして記録媒体15に格納されている。
【0058】
すなわち、指向対象物が最遅距離に存在する時は角度倍率が1倍になるため、基礎1フレーム回転角度が1フレームあたりの変更可能角度rになる。指向対象物が最速距離に存在する時は角度倍率が2倍になるため、基礎1フレーム回転角度の2倍が1フレームあたりの変更可能角度rになる。そして、指向対象物が最遅距離と最速距離との間に存在する時は角度倍率が1倍から2倍になるため、1フレームあたりの変更可能角度rは基礎1フレーム回転角度の1倍から2倍の間の線形補間演算により取得される。こうして距離Lの値に応じて1フレームあたりの変更可能角度rの値を1倍から2倍の間で変化させることにより、距離に基づく指向速度の制御を可能にしている。距離に応じた1フレームあたりの変更可能角度rの計算は1フレームごとに繰り返される。
【0059】
なお、本実施形態では、主キャラクタから指向対象物までの距離に基づいて1フレームあたりの変更可能角度rを一次関数的に変化させているが、1フレームあたりの変更可能角度rを主キャラクタから指向対象物までの距離領域に応じて段階的に変化させることも可能である。
【0060】
具体的には、
図10に示すように指向領域を主キャラクタから指向対象物までの距離に応じて複数の領域(領域1〜3)に分け、指向対象物がどの領域に存在しているかによって距離による1フレームあたりの変更可能角度rを決定する。この実施形態では、主キャラクタから最も遠い領域を領域1、次に遠い領域を領域2、最も近い領域を領域3とし、各領域に対応づけて角度情報を登録したテーブルTを設けている。このテーブルTでは、指向対象物が主キャラクタから遠い領域1にいる場合、1度/フレームの速さで主キャラクタを振り向かせ、指向対象物が主キャラクタから中程度の領域2にいる場合、2度/フレームの速さで主キャラクタを振り向かせる。また、指向対象物が主キャラクタから近い領域3にいる場合、3度/フレームの速さで主キャラクタを振り向かせる。
【0061】
この処理を行う場合、
図8の「距離による1フレームあたりの変更可能角度rの計算」処理(S35)において、
図9のS54の処理に代えて、距離Lから指向対象物が存在する領域1〜3を取得する処理を実行する。また、S55の処理に代えて、主キャラクタのテーブルTから該当領域の角度情報を取得して距離による1フレームあたりの変更可能角度r(角度r=テーブルTの該当領域の角度情報)とする処理を実行する。例えば指向対象物が領域3に存在する場合、テーブルTの角度情報は3度であるから、1フレームあたりの変更可能角度rは3度となる。その他の処理は
図8の処理と同様である。この実施形態では、本実施形態のように1フレームあたりの変更可能角度rを計算によって求めなくても、指向対象物の存在領域に基づいて画一的に求めることができるため、処理が簡単で、演算に負荷がかからない。
【0062】
なお、この実施形態において、
図10に示すように複数のキャラクタごとに角度情報の異なる複数のテーブルTを記憶してもよい。そして、キャラクタごとに異なるテーブルTに基づいて1フレームあたりの変更可能角度rを決定し、指向制御する。これにより、簡略な処理で各キャラクタの能力等に応じた指向速度で指向させることができる。領域数は3に限定されず、複数のキャラクタで領域の数や境界を異ならせてもよい。
【0063】
また、本実施形態では、キャラクタから指向対象物までの距離が変化しない場合、キャラクタの1フレーム分の指向角速度は毎フレーム変化しないが、徐々に指向角速度を大きくしていくことも可能である。
【0064】
具体的には、
図8の「距離による1フレームあたりの変更可能角度rの計算」処理(S35)において、
図9のS55の処理を「r=基礎1フレーム回転角度×倍率×補正値」とする。補正値は、例えば0.1→0.3→0.5→1.0というように1フレームごとに値が増加するようにする。これにより、ゆっくりからだんだん速くなるように指向させることができ、実際の人間の動きに近づけることができる。
【0065】
なお、同様の処理を行って、指向速度を減速させるようにすることもできる。例えば、主キャラクタが指向対象物に対してある程度指向した状態となった後に、指向完了状態になるまで指向速度を徐々に減速させていくことで、よりリアリティのある表現を実現できる。
【0066】
補正値をかける処理に代えて、
図9のS55の処理を「r=基礎1フレーム旋回角度×倍率+r/10」としてもよい。前フレームのrの値を記憶しておき、前フレームで大きく動いていたら今フレームでも大きく動くようにする。なお、「r/10」の1/10という数値に限定されず、実施形態に対応する数値を選択する。
【0067】
さらに、本実施形態のような1フレームごとの回転角度を用いる構成に代えて、所定時間ごとの回転角度を用いる構成にしてもよい。具体的には、
図8の「距離による1フレームあたりの変更可能角度rの計算」処理(S35)において、
図9のS55の処理を「r=基礎1フレーム回転角度×倍率×経過時間に応じたフレーム数」とする。そして、これを所定時間ごとの変更可能角度rとし、この値を用いて所定時間ごとに指向制御する。
【0068】
経過時間に応じたフレーム数は以下の式で求められる。「経過時間に応じたフレーム数=前回から今回の同じ処理を行うまでの経過時間(秒)×基本フレーム数(フレーム/秒)」。例えば、前回から今回の同じ処理(S55)を行うまでに1/20秒かかった場合、基本フレーム数を60フレーム/秒とすると1/20秒×60フレーム/秒=3となり、経過時間に応じたフレーム数は3となる。したがって、この場合所定時間ごとの変更可能角度rは基本フレーム時間の3倍となる。このように、前回の処理時間によって次の表示フレームを決定する。
【0069】
これによって、固定フレーム方式だけではなく、可変フレーム方式にも対応することができるというメリットがある。固定フレーム方式とは、フレームレートを固定とするものであり、例えば、60フレーム/秒に固定されている。可変フレーム方式とは、処理の重さ等に応じてフレームレートを可変にするものであり、毎回フレームレートを異ならせることができる。
【0070】
なお、本実施形態では、関節の向きを、モデルローカル座標系におけるy軸方向に対して回転させることで主キャラクタを指向対象物に指向させる動作を行っているが、y軸方向に関する指向動作に限らずx軸方向、z軸方向に関する指向動作をさせてもよい。x軸方向、z軸方向に関する指向動作は、本実施形態の上述のy軸方向に関する指向処理と同様の処理で実現できる。
【0071】
x軸方向に関する指向処理は、本実施形態のy軸方向に対する指向処理と目標角度aの取得に関する処理が異なる。具体的には、ワールド座標系のY−Z軸平面における主キャラクタの正面方向と、主キャラクタおよび指向対象物を結んだ線とが成す角度を目標角度aとする。これにより、例えば、指向対象物が主キャラクタよりも斜め上方に存在する場合、関節の向きをx軸方向、y軸方向に対して回転させて主キャラクタの上半身を斜め上方に指向させることができる。
【0072】
なお、主キャラクタおよび指向対象物を結んだ線は、ゲーム空間における主キャラクタおよび指向対象物の頭関節の位置又は首関節の位置等の指向の基準部位となる頭部分に関連する位置を結ぶ線とするのがよい。これにより、頭部分を基準とした指向動作を実現できるので、同じ高さの地面において主キャラクタが座っていて指向対象物である敵キャラクタが直立しているような場合でも、主キャラクタが敵キャラクタの頭部分を斜め上方に見上げるように指向動作をさせることができる。
【0073】
なお、z軸方向に関する指向処理の場合は、ワールド座標系のX−Y軸平面における目標角度aを用いる。また、指向角度bを関節111〜114に振り分ける割合や変更可能角度r等の設定値は各軸で別々に設定するようにしてもよい。
なお、本実施形態では、主キャラクタについて説明したが、敵キャラクタについても主キャラクタと同様の処理を行う。
【0074】
また、上述したゲーム装置は、一例として家庭用のテレビゲーム機とされているが、家庭用のテレビゲーム機に限らず、携帯型ゲーム機、アーケードゲーム機等の他の種類のゲーム機、又はゲーム機以外の三次元映像を表示する装置、例えばゲームプログラムがローディングされたパーソナルコンピュータ等であってもよい。