(57)【特許請求の範囲】
【請求項１】
各々に固有の大きさ及び重量が設定された複数のキャラクタが存在する仮想空間において、該複数のキャラクタの各々についての当該仮想空間における移動量がベクトル量により指示されるキャラクタの移動制御装置であって、
前記複数のキャラクタのうちの２体のキャラクタが接触状態にあるかどうかを判定する接触判定手段と、
前記接触判定手段により接触状態にあると判定された２体のキャラクタについて、一方のキャラクタに対して指示される移動方向を中心とした一定の角度範囲に、他方のキャラクタが存在するかどうかを判定する一定角度判定手段と、
前記一定角度判定手段により一定の角度範囲に存在すると判定された場合に、前記接触判定手段により接触状態にあると判定された２体のキャラクタをユニットとして設定するユニット設定手段と、
前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタの各々に設定された重量及び移動量に応じて、ユニット全体の移動量をベクトル演算により算出する移動量算出手段と、
前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタを、前記移動量算出手段により算出された移動量に従って、ユニット全体で前記仮想空間において移動させるユニット移動手段と
を備えることを特徴とするキャラクタの移動制御装置。
【請求項２】
前記複数のキャラクタは、第１のキャラクタと、該第１のキャラクタと敵対する第２のキャラクタとを含み、
前記接触判定手段は、前記第１のキャラクタと前記第２のキャラクタとが接触状態にあるかどうかを判定する
ことを特徴とする請求項１に記載のキャラクタの移動制御装置。
【請求項３】
前記一定の角度範囲は、前記複数のキャラクタの各々の大きさに応じて個別に定められており、
前記一定角度判定手段は、前記接触判定手段により接触状態にあると判定された２体のキャラクタについて、一方のキャラクタに対して定められた一定の角度範囲に他方のキャラクタが存在するかどうかを判定するとともに、他方のキャラクタに対して定められた一定の角度範囲に一方のキャラクタが存在するかどうかを判定し、
前記ユニット設定手段は、前記接触判定手段により接触状態にあると判定された２体のキャラクタの何れについても前記一定角度判定手段により一定の角度範囲に存在すると判定された場合に、前記接触判定手段により接触状態にあると判定された２体のキャラクタをユニットとして設定する
ことを特徴とする請求項１または２に記載のキャラクタの移動制御装置。
【請求項４】
前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタについて、一方のキャラクタに対して指示される移動方向を中心とした前記一定の角度範囲以上の特定の角度範囲外に他方のキャラクタが存在するものとなったかどうかを判定する特定角度判定手段と、
前記特定角度判定手段により前記特定の角度範囲外に存在するものとなったと判定されたときに、前記ユニット設定手段により設定されたユニットを解除する角度範囲ユニット解除手段とをさらに備える
ことを特徴とする請求項１乃至３のいずれか１項に記載のキャラクタの移動制御装置。
【請求項５】
前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタの各々に対して指示される移動量が所定量以下となったかどうかを判定する移動量判定手段と、
前記移動量判定手段により前記所定量以下となったと判定されたときに、前記ユニット設定手段により設定されたユニットを解除する移動量ユニット解除手段とをさらに備える
ことを特徴とする請求項１乃至４のいずれか１項に記載のキャラクタの移動制御装置。
【請求項６】
前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタに設定された重量の比率、または該２体のキャラクタについての重量及び移動量から算出される運動量の比率を算出するキャラクタ比率算出手段をさらに備え、
前記移動量算出手段は、前記キャラクタ比率算出手段が算出した比率に応じて前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタの各々に対して重み付けをして、ユニット全体の移動量をベクトル演算により算出する
ことを特徴とする請求項１乃至５のいずれか１項に記載のキャラクタの移動制御装置。
【請求項７】
前記仮想空間は、３次元仮想空間であり、
前記複数のキャラクタの各々についての移動量は、３次元ベクトルにより指示され、
前記移動量算出手段は、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタが所定の条件を満たす状態で接触しているときに、該２体のキャラクタの移動量を指示する３次元ベクトルのうちの高さ方向を除いた２次元ベクトルで、ユニット全体の移動量を算出する
ことを特徴とする請求項１乃至６のいずれか１項に記載のキャラクタの移動制御装置。
【請求項８】
各々に固有の大きさ及び重量が設定された複数のキャラクタが存在する仮想空間において、該複数のキャラクタの各々についての当該仮想空間における移動量がベクトル量により指示されるキャラクタの移動を制御するためのプログラムであって、
前記複数のキャラクタのうちの２体のキャラクタが接触状態にあるかどうかを判定する接触判定手段、
前記接触判定手段により接触状態にあると判定された２体のキャラクタについて、一方のキャラクタに対して指示される移動方向を中心とした一定の角度範囲に、他方のキャラクタが存在するかどうかを判定する一定角度判定手段、
前記一定角度判定手段により一定の角度範囲に存在すると判定された場合に、前記接触判定手段により接触状態にあると判定された２体のキャラクタをユニットとして設定するユニット設定手段、
前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタの各々に設定された重量及び移動量に応じて、ユニット全体の移動量をベクトル演算により算出する移動量算出手段、及び、
前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタを、前記移動量算出手段により算出された移動量に従って、ユニット全体で前記仮想空間において移動させるユニット移動手段
としてコンピュータ装置を機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばゲームなどに適用される複数のキャラクタが存在する仮想空間において、当該仮想空間における各キャラクタの移動を制御するための技術に関する。
【背景技術】
【０００２】
近年のネットワーク技術の進歩に伴い、複数のプレイヤが参加してゲームが進行するオンラインゲーム（ネットワークゲーム）が盛んに行われるようになってきている。オンラインゲームを行うためのシステムは、オンラインゲームを運営する者が管理するサーバ装置と、このサーバ装置にインターネットなどのネットワークを介して接続可能な各プレイヤのクライアント装置とから構成されるものとなっている。
【０００３】
上記のオンラインゲームのうちのＲＰＧ（Role Playing Game）では、同時に多数のプレイヤが参加することで、そのプレイヤキャラクタ同士で、敵キャラクタとのバトルを協力して行わせたり、或いはプレイヤ同士がプレイヤキャラクタにバトルを行わせたりして進行していくものとなっている。もっとも、このようなバトルにおいては、プレイヤキャラクタに対しては各プレイヤからの入力に従って、敵キャラクタは所定の思考ルーチンの処理に従って、個別に移動が指示される（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−２００４４９号公報（段落００５８等）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プレイヤキャラクタや敵キャラクタなどの仮想空間内に存在する複数のキャラクタが接触したときは、キャラクタ毎に個別に指示されたままに移動させてしまうと、キャラクタの体同士がめり込んでしまうので、指示されたままに移動させることができない。そこで、接触状態となったキャラクタの体同士がめり込んでしまわないように、何らかの処理を行う必要がある。
【０００６】
もっとも、ゲームにおいてキャラクタが接触する相手は他のキャラクタだけという訳ではないが、キャラクタが建物などの構造物に接触した場合には、それ以上先にキャラクタが移動できないようにすればよい。しかし、キャラクタ同士の接触の場合、そもそも何れのキャラクタも仮想空間において移動しようとするものであるため、一方のキャラクタに合わせて他のキャラクタの移動を制御してしまうのでは、接触状態にある複数のキャラクタの動きが不自然なものとなってしまう。
【０００７】
キャラクタ以外の物体（例えば、ボールなど）同士が接触した場合には、物理法則に従って各物体の動きをモデル化し、それに従って各物体を仮想空間において移動させていけばよい。しかし、物体の場合は、接触状態となったときにだけ他の物体の動きを考慮して次にどの様に移動させればよいのかを決めればよいのに対して、バトルにおけるキャラクタは、敵を倒そうとする動きを常にとるのが普通であるので、このような物体同士が衝突した動きと同じに制御すると、その動きが不自然なものとなってしまう。
【０００８】
本発明は、仮想空間に存在する２体のキャラクタが接触状態となったときに、当該２体のキャラクタが一体となって仮想空間を移動していく様子を的確に再現することができるキャラクタの移動制御装置等を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の第１の観点にかかるキャラクタの移動制御装置は、各々に固有の大きさ及び重量が設定された複数のキャラクタが存在する仮想空間において、該複数のキャラクタの各々についての当該仮想空間における移動量がベクトル量により指示されるキャラクタの移動制御装置であって、前記複数のキャラクタのうちの２体のキャラクタが接触状態にあるかどうかを判定する接触判定手段と、前記接触判定手段により接触状態にあると判定された２体のキャラクタについて、一方のキャラクタに対して指示される移動方向を中心とした一定の角度範囲に、他方のキャラクタが存在するかどうかを判定する一定角度判定手段と、前記一定角度判定手段により一定の角度範囲に存在すると判定された場合に、前記接触判定手段により接触状態にあると判定された２体のキャラクタをユニットとして設定するユニット設定手段と、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタの各々に設定された重量及び移動量に応じて、ユニット全体の移動量をベクトル演算により算出する移動量算出手段と、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタを、前記移動量算出手段により算出された移動量に従って、ユニット全体で前記仮想空間において移動させるユニット移動手段とを備えることを特徴とする。
【００１０】
上記キャラクタの移動制御装置では、仮想空間において、各々に固有の大きさ及び重量が設定された複数のキャラクタが存在するが、各々が別々に仮想空間を移動していくため、２体のキャラクタが接触状態になることがある。キャラクタ同士が接触状態となった場合、そのまま各キャラクタに対して指示された移動量のまま移動させる訳にはいかない。一方、接触状態にある何れのキャラクタも仮想空間を移動し得る存在であるため、仮想空間に設置された構造物に１のキャラクタが接触した場合のような手法で接触状態にある各キャラクタを移動させる訳にはいかず、また、物理法則に従って物体同士が衝突した場合の動きを各キャラクタにそのままさせても、キャラクタの動きとしては不自然なものとなる。
【００１１】
これに対して、上記キャラクタの移動制御装置では、接触状態にある２体のキャラクタについて、一方に対して指示される移動方向を中心とした一定の角度範囲に他方のキャラクタが存在する場合には、当該接触状態にある２体のキャラクタをユニットとして設定する。そして、ユニット全体の移動量をベクトル演算により算出して、ユニットに含まれる２体のキャラクタをユニット全体で仮想空間において移動させる。これにより、仮想空間を別方向に移動しようとするキャラクタ同士の押し合いにより、２体のキャラクタが一体となって仮想空間を移動していく様子を的確に再現することができるものとなる。
【００１２】
なお、前記一定角度判定手段が判定する一定の角度範囲は、９０度よりも大きく１８０度よりも小さい範囲とすることができ、より好ましくは、１２０度以上１５０度以下の範囲とすることができる。また、一定の角度範囲にキャラクタの移動方向が含まれるのであれば、一定の角度範囲は、必ずしも左右対称に設定されるものでなくてもよい（但し、通常の場合は左右対称に設定するのが好ましい）。キャラクタの移動方向から右回りに何度、左回りに何度というように一定の角度範囲を設定するのであれば、左右対称でない場合も、移動方向を中心とした一定の角度範囲の概念に含まれる。
【００１３】
また、ユニット設定手段は、接触状態にあることを条件として少なくとも２体のキャラクタをユニットとして設定するというものであり、３体以上のキャラクタが接触状態にあると判定される場合には、これら３体以上のキャラクタをまとめてユニットとして設定することがあってもよい。３体以上のキャラクタがユニットとして設定される場合、個々のキャラクタについて一定の角度範囲に他のキャラクタが存在するかどうかを判定するものとすればよい。
【００１４】
なお、上記の一定角度判定手段及びユニット設定手段に代えて、前記一定角度判定手段は、前記接触判定手段により接触状態にあると判定された２以上のキャラクタに対して指示される移動方向がなす角の角度範囲が、一定の角度範囲にあるかどうかを判定するものとし、前記ユニット設定手段は、前記一定角度判定手段により一定の角度範囲にあると判定された場合に、前記接触判定手段により接触状態にあると判定された２以上のキャラクタをユニットとして設定するものとしてもよい。
【００１５】
上記キャラクタの移動制御装置において、前記複数のキャラクタは、第１のキャラクタと、該第１のキャラクタと敵対する第２のキャラクタとを含むものであってもよい。この場合において、前記接触判定手段は、前記第１のキャラクタと前記第２のキャラクタとが接触状態にあるかどうかを判定するものとすることができる。
【００１６】
仮想空間を移動する際に譲り合いをせずに押し合いをする状態となってしまうのは、通常は敵対する者同士であるので、互いに敵対する第１のキャラクタと第２のキャラクタとが接触状態にあると判定したときに、その移動方向のなす角に応じてユニットとして設定することで、仮想空間を別方向に移動しようとする互いに敵対するキャラクタの押し合いにより、２体のキャラクタが一体となって仮想空間を移動していく様子を的確に再現することができるものとなる。
【００１７】
なお、第１のキャラクタに対して２つの第２のキャラクタ（第２−１、第２−２とする）が接触状態にある場合に、一定角度判定手段は、第１のキャラクタの移動方向を中心とした一定の角度範囲に第２−１のキャラクタが存在するかと第２−２のキャラクタが存在するかとを判定するとともに、第２−１のキャラクタの移動方向を中心とした一定の角度範囲に第１のキャラクタが存在するかと第２−２のキャラクタの移動方向を中心とした一定の角度範囲に第１のキャラクタが存在するかとを判定し、第２−１のキャラクタと第２−２のキャラクタについては互いに一定の角度範囲に存在するかの判定は行わない。
【００１８】
また、このような場合に、第１のキャラクタの移動方向を中心とした一定の角度範囲に第２−１のキャラクタは存在するが第２−２のキャラクタは存在しないと判定された場合は、第１のキャラクタと第２−１のキャラクタとをユニットとして設定し、第２−２のキャラクタをユニットには含めないものとすればよい。
【００１９】
上記キャラクタの移動制御装置において、前記一定の角度範囲は、前記複数のキャラクタの各々の大きさに応じて個別に定められたものであってもよい。この場合において、前記一定角度判定手段は、前記接触判定手段により接触状態にあると判定された２体のキャラクタについて、一方のキャラクタに対して定められた一定の角度範囲に他方のキャラクタが存在するかどうかを判定するとともに、他方のキャラクタに対して定められた一定の角度範囲に一方のキャラクタが存在するかどうかを判定し、前記ユニット設定手段は、前記接触判定手段により接触状態にあると判定された２体のキャラクタの何れについても前記一定角度判定手段により一定の角度範囲に存在すると判定された場合に、前記接触判定手段により接触状態にあると判定された２体のキャラクタをユニットとして設定するものとすることができる。
【００２０】
仮想空間におけるキャラクタの位置は、通常、その基準点（重心位置）の位置によって示されるので、キャラクタの移動量を指示するベクトルもその基準点からのベクトルとして計算されてしまう。これに対して、大きなキャラクタの方が小さなキャラクタよりも、接触状態にある他のキャラクタの移動を規制することになるハズである。ここでは、キャラクタの各々の大きさに応じて一定の角度範囲を個別に定めることによって、２体のキャラクタの押し合いをキャラクタの大きさに見合った的確な状態で再現することができるものとなる。
【００２１】
上記キャラクタの移動制御装置は、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタについて、一方のキャラクタに対して指示される移動方向を中心とした前記一定の角度範囲以上の特定の角度範囲外に他方のキャラクタが存在するものとなったかどうかを判定する特定角度判定手段と、前記特定角度判定手段により前記特定の角度範囲外に存在するものとなったと判定されたときに、前記ユニット設定手段により設定されたユニットを解除する角度範囲ユニット解除手段とをさらに備えるものとすることができる。
【００２２】
一旦ユニットとして移動が制御されたキャラクタ同士であっても、各々が移動しようとする方向が変わればユニットを解除して個々のキャラクタ毎に移動した方が自然となることもあるが、ここでユニットを解除する特定の角度範囲をユニットを設定する一定の角度範囲以上としているため、２体のキャラクタのユニットの設定と解除が頻繁になりすぎるのを防ぐことができる。
【００２３】
上記キャラクタの移動制御装置は、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタの各々に対して指示される移動量が所定量以下となったかどうかを判定する移動量判定手段と、前記移動量判定手段により前記所定量以下となったと判定されたときに、前記ユニット設定手段により設定されたユニットを解除する移動量ユニット解除手段とをさらに備えるものとすることができる。
【００２４】
一旦ユニットとして移動が制御されたキャラクタであっても、そもそも当該キャラクタがあまり移動しようとしていないのにユニットのままに設定していると、ユニット全体としての移動量を求めるために無駄な処理が生じてしまう。ここでは、２体のキャラクタの各々に対して指示される移動量が所定量以下となったときにユニットを解除するので、無駄な処理負荷を生じさせるのを防ぐことができる。
【００２５】
上記キャラクタの移動制御装置は、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタに設定された重量の比率、または該２体のキャラクタについての重量及び移動量から算出される運動量の比率を算出するキャラクタ比率算出手段をさらに備え、前記移動量算出手段は、前記キャラクタ比率算出手段が算出した比率に応じて前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタの各々に対して重み付けをして、ユニット全体の移動量をベクトル演算により算出するものすることができる。
【００２６】
なお、前記移動量算出手段による２体のキャラクタの各々に対する重み付けは、前記キャラクタ比率算出手段が算出した比率（小／大とする）が第１割合（例えば、９割）以上の場合は、何れかのキャラクタをランダムに選んで重み付けをし、第１割合未満第２割合（例えば、８割）以上の場合には、重量または運動量が大きい方のキャラクタの重みを大きくすることができる。この重み付けは、ユニットが設定されてから解除されるまでの間で変化させることができる。また、前記キャラクタ比率算出手段が算出した比率が第２割合未満の場合には、重量または運動量が小さい方のキャラクタの重みを０としてもよい。
【００２７】
２体のキャラクタが含まれるユニット全体の動きとしては、現実世界であれば単なるベクトル和で決まるのではなく、互いの重量や運動量の関係で拮抗したり、一方的となったりする場合がある。ここでは、ユニット全体の移動量を算出する際に、ユニットに含まれる２体のキャラクタの重量や運動量の比率に応じて重み付けを行っているので、ユニットに含まれるキャラクタの移動が拮抗したり一方的となったりする様子を的確に再現することができるものとなる。
【００２８】
上記キャラクタの移動制御装置において、前記仮想空間は、３次元仮想空間であり、前記複数のキャラクタの各々についての移動量は、３次元ベクトルにより指示されるものであってもよい。この場合において、前記移動量算出手段は、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタが所定の条件を満たす状態で接触しているときに、該２体のキャラクタの移動量を指示する３次元ベクトルのうちの高さ方向を除いた２次元ベクトルで、ユニット全体の移動量を算出するものすることができる。
【００２９】
なお、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタが所定の条件を満たす状態で接触しているとは、キャラクタ同士の傾斜角が所定の角度以下で接触している状態や、キャラクタ同士の高低差が所定量以下となっている場合とすることができる。
【００３０】
各キャラクタの移動する仮想空間が３次元仮想空間である場合、キャラクタの移動量も３次元ベクトルにより指示されるものとなるが、ユニットに含まれるキャラクタ同士の傾斜角が所定の角度以下となっている場合、或いはユニットに含まれるキャラクタ同士の高低差が所定量以下となっている場合などの所定の条件を満たす場合は、キャラクタの移動に対して高さ方向のベクトルはあまり関係しない。このようなキャラクタの高さ方向のベクトルを除いた２次元ベクトルでユニット全体の移動量を算出することで、ベクトル演算の演算量を小さくすることができる。
【００３１】
上記目的を達成するため、本発明の第２の観点にかかるプログラムは、各々に固有の大きさ及び重量が設定された複数のキャラクタが存在する仮想空間において、該複数のキャラクタの各々についての当該仮想空間における移動量がベクトル量により指示されるキャラクタの移動を制御するためのプログラムであって、前記複数のキャラクタのうちの２体のキャラクタが接触状態にあるかどうかを判定する接触判定手段、前記接触判定手段により接触状態にあると判定された２体のキャラクタについて、一方のキャラクタに対して指示される移動方向を中心とした一定の角度範囲に、他方のキャラクタが存在するかどうかを判定する一定角度判定手段、前記一定角度判定手段により一定の角度範囲に存在すると判定された場合に、前記接触判定手段により接触状態にあると判定された２体のキャラクタをユニットとして設定するユニット設定手段、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタの各々に設定された重量及び移動量に応じて、ユニット全体の移動量をベクトル演算により算出する移動量算出手段、及び、前記ユニット設定手段により設定されたユニットに含まれる２体のキャラクタを、前記移動量算出手段により算出された移動量に従って、ユニット全体で前記仮想空間において移動させるユニット移動手段としてコンピュータ装置を機能させることを特徴とする。
【００３２】
上記第２の観点にかかるプログラムは、コンピュータ読み取り可能な記録媒体に記録して提供することができる。このコンピュータ読み取り可能な記録媒体は、上記コンピュータ装置に着脱可能に構成され、上記コンピュータ装置とは別個に提供される記録媒体としてもよい。このコンピュータ読み取り可能な記録媒体は、上記コンピュータ装置内に設けられ、上記コンピュータ装置と共に提供される固定ディスク装置などの記録媒体としてもよい。上記第２の観点にかかるプログラムは、ネットワーク上に存在する他のサーバ装置から、そのデータ信号を搬送波に重畳して、ネットワークを通じて上記コンピュータ装置に配信することもできる。
【００３３】
上記第１の観点にかかるキャラクタの移動制御装置、上記第２の観点にかかるプログラムに含まれる各手段により実行される処理を各ステップとして順次実行する方法も、本発明の範囲に含まれる。また、上記第１の観点にかかるキャラクタの移動制御装置は、スタンドアロンの装置であっても、クライアント−サーバシステムのサーバ装置であってもよい。上記第２の観点にかかるプログラムも、スタンドアロンの装置で実行されるプログラムであっても、サーバ装置で実行されるプログラムであってもよい。上記第１の観点にかかるキャラクタの移動制御装置、及び上記第２の観点にかかるプログラムは、ビデオゲームへの適用に好適なものではあるが、ビデオゲーム以外への適用も可能である。
【図面の簡単な説明】
【００３４】
【図１】本発明の実施の形態にかかるネットワークゲームシステムの構成を示す図である。
【図２】図１のビデオゲーム装置の構成を示すブロック図である。
【図３】図１のサーバ装置の構成を示すブロック図である。
【図４】接触状態にあるプレイヤキャラクタと敵キャラクタとの移動制御を説明する図である。
【図５】プレイヤキャラクタテーブルと敵キャラクタテーブルとを示す図である。
【図６】本発明の実施の形態にかかるネットワークゲームシステムのバトルにおいて、サーバ装置が実行する処理を示すフローチャートである。
【図７】３体のキャラクタが接触状態にある場合の移動制御を説明する図である。
【発明を実施するための形態】
【００３５】
以下、添付図面を参照して、本発明の実施の形態について説明する。
【００３６】
図１は、この実施の形態にかかるネットワークゲームシステムの構成を示すブロック図である。図示するように、このネットワークゲームシステムは、複数（ここでは、３つのみを図示）のビデオゲーム装置１００と、サーバ装置２００とから構成される。ビデオゲーム装置１００は、それぞれサーバ装置２００にネットワーク１５１を介して接続される。
【００３７】
このネットワークゲームシステムで適用されるゲームでは、ビデオゲーム装置１００を利用する各プレイヤは、全てのプレイヤに共通の仮想３次元空間（ゲーム空間）に形成されたフィールド上で自己のプレイヤキャラクタを移動させていくことによりゲームを進行していく。また、各プレイヤキャラクタは、各々のプレイヤキャラクタからの指示に従ってフィールド上で移動していくものの、複数のプレイヤキャラクタによりパーティを形成して団体行動することもできる（但し、単独行動を妨げない）。プレイヤキャラクタ、或いはプレイヤキャラクタのパーティは、フィールド上の随所で遭遇する敵キャラクタ（１体または２体以上）とのバトルを行っていく。
【００３８】
このネットワークゲームシステムにおけるバトルでは、各プレイヤは、自己のプレイヤキャラクタに対して攻撃や防御の指示を出すだけではなく、バトルが行われている一定範囲のエリア（以下、バトルエリアという）内では、自己のプレイヤキャラクタを自由に移動させることができる。また、プレイヤキャラクタだけではなく、サーバ装置２００の所定の思考ルーチンにより制御される敵キャラクタも、バトルエリア内を自由に移動することができる。プレイヤキャラクタと敵キャラクタの何れもバトルエリアを自由に移動することができるので、これらが接触することがあるが、このときの各キャラクタの移動の制御については後述する。
【００３９】
図２は、図１のビデオゲーム装置１００の構成を示すブロック図である。図示するように、ビデオゲーム装置１００は、装置本体１０１を中心として構築される。この装置本体１０１は、その内部バス１１９に接続された制御部１０３、ＲＡＭ（Random Access Memory）１０５、ハードディスク・ドライブ（ＨＤＤ）１０７、サウンド処理部１０９、グラフィック処理部１１１、ＤＶＤ／ＣＤ−ＲＯＭドライブ１１３、通信インターフェイス１１５、及びインターフェイス部１１７を含む。
【００４０】
この装置本体１０１のサウンド処理部１０９は、スピーカーであるサウンド出力装置１２５に、グラフィック処理部１１１は、表示画面１２２を有する表示装置１２１に接続されている。ＤＶＤ／ＣＤ−ＲＯＭドライブ１１３には、記録媒体（本実施の形態では、ＤＶＤ−ＲＯＭまたはＣＤ−ＲＯＭ）１３１を装着し得る。通信インターフェイス１１５は、ネットワーク１５１に接続される。インターフェイス部１１７には、発光部１６０と受信部１６１とメモリーカード１６２とが接続されている。
【００４１】
制御部１０３は、ＣＰＵ（Central Processing Unit）やＲＯＭ（Read Only Memory）などを含み、ＨＤＤ１０７や記録媒体１３１上に格納されたプログラムを実行し、装置本体１０１の制御を行う。制御部１０３は、現在時刻を計時する内部タイマを備えている。ＲＡＭ１０５は、制御部１０３のワークエリアである。ＨＤＤ１０７は、プログラムやデータを保存するための記憶領域である。サウンド処理部１０９は、制御部１０３により実行されているプログラムがサウンド出力を行うよう指示している場合に、その指示を解釈して、サウンド出力装置１２５にサウンド信号を出力する。
【００４２】
グラフィック処理部１１１は、制御部１０３から出力される描画命令に従って、フレームメモリ（フレームバッファ）１１２（図では、グラフィック処理部１１１の外側に描かれているが、グラフィック処理部１１１を構成するチップに含まれるＲＡＭ内に設けられる）に画像を展開し、表示装置１２１の表示画面１２２上に画像を表示するビデオ信号を出力する。グラフィック処理部１１１から出力されるビデオ信号に含まれる画像の１フレーム時間は、例えば３０分の１秒である。
【００４３】
ＤＶＤ／ＣＤ−ＲＯＭドライブ１１３は、記録媒体１３１に対しプログラム及びデータの読み出しを行う。通信インターフェイス１１５は、ネットワーク１５１に接続され、他のコンピュータとの通信を行う。
【００４４】
入力装置１６３は、受光部１６３ａと、加速度センサ１６３ｂと、送信部１６３ｃを含んでいる。受光部１６３ａは、発光部１６０に含まれる各ＬＥＤから照射された光を受光する。入力装置１６３の向きによって、受光部１６３ａが光を受光できるＬＥＤの数及び位置に違いが生じる。加速度センサ１６３ｂは、３軸以上の多軸加速度センサからなり、入力装置１６３の傾き及び３次元の動きを検出する。入力装置１６３は、また、方向キー及び複数の操作ボタンを備えている。当該ビデオゲーム装置１００を使用するプレイヤキャラクタの動作は、入力装置１６３が備える操作ボタンや方向キーの操作、或いは入力装置１６３の傾き及び３次元の動きによって指示が与えられるものとなる。
【００４５】
送信部１６３ｃは、入力装置１６３の状況に応じた赤外線信号、より詳しくは、受光部１６３ａの受光状態、加速度センサ１６３ｂにより検出された入力装置１６３の傾き、並びに入力装置１６３の動く方向及び速度、方向キー及び操作ボタンからの入力に応じた赤外線信号を送信する。送信部１６３ｃから送信された赤外線信号は、入力装置１６３からの入力データとして受信部１６１により受信される。
【００４６】
インターフェイス部１１７は、受信部１６１により受信された入力データをＲＡＭ１０５に出力し、制御部１０３がそれを解釈して演算処理を実施する。インターフェイス部１１７は、また、制御部１０３からの指示に基づいて、ＲＡＭ１０５に記憶されているゲームの進行状況を示すデータをメモリーカード１６２に保存させ、メモリーカード１６２に保存されている中断時のゲームのデータを読み出して、ＲＡＭ１０５に転送する。
【００４７】
ビデオゲーム装置１００でゲームを行うためのプログラム及びデータは、最初例えば記録媒体１３１に記憶されている。記録媒体１３１に記憶されているデータとしては、ゲーム空間に存在するオブジェクト（ゲーム空間に形成されたフィールド、自身及び他者のプレイヤキャラクタ、敵キャラクタ）を構成するためのグラフィックデータを全て含んでいる。
【００４８】
記録媒体１３１に記憶されたプログラム及びデータは、実行時にＤＶＤ／ＣＤ−ＲＯＭドライブ１１３により読み出されて、ＲＡＭ１０５にロードされる。制御部１０３は、ＲＡＭ１０５にロードされたプログラム及びデータを処理し、描画命令をグラフィック処理部１１１に出力し、サウンド出力の指示をサウンド処理部１０９に出力する。制御部１０３が処理を行っている間の中間的なデータは、ＲＡＭ１０５に記憶される。
【００４９】
図３は、図１のサーバ装置２００の構成を示すブロック図である。図示するように、サーバ装置２００は、装置本体２０１を中心として構築される。装置本体２０１は、その内部バス２１９に接続された制御部２０３、ＲＡＭ２０５、ハードディスク・ドライブ（ＨＤＤ）２０７、ＤＶＤ／ＣＤ−ＲＯＭドライブ２１３、通信インターフェイス２１５を含む。ＤＶＤ／ＣＤ−ＲＯＭドライブ２１３には、記録媒体（ＤＶＤ−ＲＯＭまたはＣＤ−ＲＯＭ）２３１を装着し得る。
【００５０】
制御部２０３は、ＣＰＵ（Central Processing Unit）やＲＯＭ（Read Only Memory）などを含み、ＨＤＤ２０７や記録媒体２３１上に格納されたプログラムを実行し、サーバ装置２００の制御を行う。制御部２０３は、現在時刻を計時する内部タイマを備えている。ＲＡＭ２０５は、制御部２０３のワークエリアである。ＨＤＤ２０７は、プログラムやデータを保存するための記憶領域である。通信インターフェイス２１５は、ネットワーク１５１に接続され、ビデオゲーム装置１００のそれぞれとの通信を行う。
【００５１】
サーバ装置２００でネットワークゲームを行うためのプログラム及びデータは、最初例えば記録媒体２３１に記憶され、ここからＨＤＤ２０７にインストールされる。そして、このプログラム及びデータは実行時にＨＤＤ２０７から読み出されて、ＲＡＭ２０５にロードされる。制御部２０３は、ＲＡＭ２０５にロードされたプログラム及びデータを処理し、ビデオゲーム装置１００のそれぞれから送られてくるメッセージなどを元にネットワークゲームを進行させる。制御部２０３が処理を行っている間の中間的なデータは、ＲＡＭ２０５に記憶される。
【００５２】
以下、この実施の形態にかかるネットワークゲームシステムにおいて、バトルにおけるプレイヤキャラクタと敵キャラクタのバトルエリア内での移動について説明する。前述したとおり、バトルにおいてプレイヤキャラクタ及び敵キャラクタの各々は、バトルエリア内において個々に移動することができるが、その移動量は、仮想３次元空間における３次元ベクトルにより指示される。プレイヤキャラクタ及び敵キャラクタの各々がバトルエリア中の障害物や他のキャラクタに干渉されずに自由に移動できる状況にあるときには、各々の移動量を指示する３次元ベクトルに従って移動させられる。
【００５３】
もっとも、プレイヤキャラクタ及び敵キャラクタの各々がバトルエリア中に障害物や他のキャラクタに接触したときには、各々の移動量を指示する３次元ベクトルのままに移動させる訳にはいかない。ここで、プレイヤキャラクタ同士、敵キャラクタ同士、或いはキャラクタとキャラクタ以外の障害物の接触により移動が干渉されるときは、従来のゲームにおいて適用されてきたのと同じ手法が適用され、この実施の形態において問題とされるものではない。
【００５４】
しかし、この実施の形態において、プレイヤキャラクタと敵キャラクタとが接触したときには、接触状態にあるプレイヤキャラクタと敵キャラクタとの移動に、従来のゲームとは異なる手法が適用される。図４（ａ）〜（ｅ）は、この実施の形態において、接触状態にあるプレイヤキャラクタと敵キャラクタとの移動制御を説明する図である。
【００５５】
図４（ａ）に示すように、プレイヤキャラクタ３００と敵キャラクタ３５０とがバトルエリアにおいて接触状態となったと判定すると（接触状態か否かは、各キャラクタの大きさに応じて従来と同じ手法により判定することができる）、プレイヤキャラクタ３００の移動ベクトル３０１の方向を中心としたユニット角３０２の範囲内に敵キャラクタ３５０が存在するかと、敵キャラクタ３５０の移動ベクトル３５１の方向を中心としたユニット角３５２の範囲内にプレイヤキャラクタ３００が存在するかが判定される。
【００５６】
なお、ユニット角３０２、３５２は、それぞれプレイヤキャラクタ３００、敵キャラクタ３５０に対して１２０°以上１５０°以下の範囲で、大きさの大きいキャラクタほどユニット角が大きくなるように予め設定されたものである。ここで、プレイヤキャラクタ３００のユニット角３０２が１２０°の場合、移動ベクトル３０１の方向から右回りに６０°、左回りに６０°の範囲が、ユニット角３０２の範囲内ということとなる。後述する解除角３０５、３５５も、それぞれプレイヤキャラクタ３００、敵キャラクタ３５０に対して、大きさに応じて予め設定されたものとなっているが、その大きさは、ユニット角３０２、３５２よりも僅かに大きく、１３０°以上１６０°以下の範囲にある。
【００５７】
ユニット角３０２の範囲内に敵キャラクタ３５０が存在し、且つユニット角３５２の範囲内にプレイヤキャラクタ３００が存在すると判定されると、図４（ｂ）に示すように、接触状態にあるプレイヤキャラクタ３００と敵キャラクタ３５０とがユニット３１０として設定される。ユニット角３０２の範囲内に敵キャラクタ３５０が存在するだけ、或いはユニット角３５２の範囲内にプレイヤキャラクタ３００が存在するというだけでは、プレイヤキャラクタ３００と敵キャラクタ３５０とはユニット３１０として設定されない。
【００５８】
また、プレイヤキャラクタ３００と敵キャラクタ３５０に予め設定された重量の比に応じて、重み付けされた移動ベクトル３０４、３５４が設定される。なお、移動ベクトルの重み付けは、キャラクタの重量比（小／大とする）が９割以上の場合には、重みを付ける方をランダムに選択し、重量比が９割未満８割以上の場合には、重量が大きいキャラクタに重みを付ける。重量比が８割未満の場合には、重量が小さいキャラクタの移動ベクトルを０とする。この重み付けは、後述するようにユニットが解除されるまでの各フレーム期間において個別になされる。
【００５９】
次に、図４（ｃ）に示すように、重み付けの処理を行った後のプレイヤキャラクタ３００の移動ベクトル３０４と敵キャラクタ３５０の移動ベクトル３５４とをベクトル合成して、ユニット３１０全体での移動ベクトル３１１を求める。そして、ユニット３１０に含まれるプレイヤキャラクタ３００も敵キャラクタ３５０も、ここで求めた移動ベクトル３１１に従ってバトルエリアにおいて移動される。なお、このベクトル合成を行う際に、プレイヤキャラクタ３００と敵キャラクタ３５０との傾斜が所定の角度以下となっている場合（或いは、両者の高低差が所定量以下となっている場合）には、高さ方向を除いた２次元ベクトルでベクトル合成を行い、高さ方向のベクトル成分を０としてユニット３１０の移動ベクトル３１１を求めることができる。
【００６０】
また、図４（ｄ）に示すように、プレイヤキャラクタ３００と敵キャラクタ３５０とがユニット３１０として設定された後であっても、各フレーム期間において、プレイヤキャラクタ３００の移動ベクトル３０１の方向を中心とした解除角３０５の範囲外に敵キャラクタ３５０が存在するかと、敵キャラクタ３５０の移動ベクトル３５１の方向を中心とした解除角３５５の範囲外にプレイヤキャラクタ３００が存在するかが判定される
【００６１】
また、図示はしないが、プレイヤキャラクタ３００と敵キャラクタ３５０とがユニット３１０として設定された後であっても、各フレーム期間において、プレイヤキャラクタ３００の移動ベクトル３０１の大きさが０となっているかと、敵キャラクタ３５０の移動ベクトル３５１の大きさが０となっているかとが判定される。
【００６２】
解除角３０５の範囲外に敵キャラクタ３５０が存在する、解除角３５５の範囲外にプレイヤキャラクタ３００が存在する、移動ベクトル３０１と移動ベクトル３５１の大きさが何れも０であるの条件のうちの１つの条件でも成立した場合には、図４（ｅ）に示すように、ユニット３１０が解除され、プレイヤキャラクタ３００と敵キャラクタ３５０は、それぞれ移動ベクトル３０１、３５１に従って、バトルエリアにおいて個別に移動させられるものとなる。
【００６３】
以下、この実施の形態にかかるネットワークゲームシステムにおいて、バトルにおいてプレイヤキャラクタと敵キャラクタが接触状態となったときの移動を制御するために必要なデータについて説明する。この実施の形態にかかるネットワークゲームシステムでは、ゲームの進行のためのデータは全てサーバ装置２００に集中されてサーバ装置２００の制御によりゲームを進めることとなるので、ここでは、サーバ装置２００のＲＡＭ２０５またはＨＤＤ２０７にて管理されるデータについて説明する。
【００６４】
サーバ装置２００においては、各ビデオゲーム装置１００のプレイヤに係るプレイヤキャラクタに関するデータを登録したプレイヤキャラクタテーブルと、これと敵対してバトルを行う敵キャラクタを登録した敵キャラクタテーブルとが用意されている。図５（ａ）は、プレイヤキャラクタテーブルを示す図であり、図５（ｂ）は、敵キャラクタテーブルを示す図である。プレイヤキャラクタと敵キャラクタとでテーブルを別に用意したのは、ユニット化の対象となるのがプレイヤキャラクタと敵キャラクタとが接触している場合だからであり、プレイヤキャラクタと敵キャラクタの別を区別する必要があるからである。
【００６５】
図示するように、プレイヤキャラクタテーブル４００も敵キャラクタテーブル５００も、キャラクタを一意に識別するためのＩＤ（Ｐ−ＩＤ、Ｅ−ＩＤ）と、キャラクタの大きさ及び重量と、仮想３次元空間における基準点（重心）の位置と、各キャラクタに対して指示される移動量を示す３次元の移動ベクトルと、各キャラクタに対して設定されたユニット角及び解除角を登録している。なお、プレイヤキャラクタテーブル４００の移動ベクトルは、ビデオゲーム装置１００から送られてきた情報に従って、敵キャラクタテーブル５００の移動ベクトルは、サーバ装置２００の思考ルーチンの実行に従って、１フレーム期間毎に設定される。
【００６６】
以下、この実施の形態にかかるネットワークゲームシステムにおいて実行される処理について説明する。この実施の形態にかかるネットワークゲームシステムでは、各ビデオゲーム装置１００は入力装置１６３から入力された指示に関する情報等を送るのみで、ゲームの実行の制御はサーバ装置２００において行われるものであるため、ビデオゲーム装置１００において実行される処理については詳細な説明を省略する。また、バトルにおけるバトルエリア内でのキャラクタの移動以外には本発明に特有の処理はないため、このようなものは省いて説明する。
【００６７】
図６は、この実施の形態にかかるネットワークゲームシステムのバトルにおいて、サーバ装置２００が実行する処理を示すフローチャートである。このフローチャートの処理は、バトル毎に１つのプロセスとして起動され、また、バトルが終了するまでの各フレーム期間において実行されるものである。
【００６８】
処理が開始されると、サーバ装置２００の制御部２０３は、バトルに参加しているプレイヤキャラクタと敵キャラクタとのうちに、前のフレーム期間までにユニットとして設定されているプレイヤキャラクタと敵キャラクタの組があるかどうかを判定する（ステップＳ１０１）。ユニットとして設定されているプレイヤキャラクタと敵キャラクタの組がなければ、そのままステップＳ１０５の処理に進む。
【００６９】
ユニットとして設定されているプレイヤキャラクタと敵キャラクタの組があれば、制御部２０３は、当該ユニットに含まれるプレイヤキャラクタと敵キャラクタについての移動ベクトルをプレイヤキャラクタテーブル４００と敵キャラクタテーブル５００から読み出し、その何れもが０となっているかを判定する（ステップＳ１０２）。双方とも移動ベクトルが０となっていれば、ステップＳ１０４の処理に進む。
【００７０】
何れか一方でも移動ベクトルが０となっていなければ、制御部２０３は、プレイヤキャラクタの解除角の範囲外に敵キャラクタが存在するか、敵キャラクタの解除角の範囲外にプレイヤキャラクタが存在するかを判定する（ステップＳ１０３）。何れか一方でも解除角の範囲外に存在すれば、ステップＳ１０４の処理に進む。何れも解除角の範囲内に存在すれば、そのままステップＳ１０５の処理に進む。
【００７１】
ステップＳ１０４では、制御部２０３は、ユニット化されていたプレイヤキャラクタと敵キャラクタのユニットを解除する。なお、ステップＳ１０２〜Ｓ１０４の処理は、バトルにおいてユニット化されているプレイヤキャラクタと敵キャラクタの組が２つ以上あれば、各々のユニットについて実行されるものとなる。そして、ステップＳ１０５の処理に進む。
【００７２】
ステップＳ１０５では、制御部２０３は、バトルにおいて接触状態となっているプレイヤキャラクタと敵キャラクタとが生じているかどうかを判定する。接触状態となっているプレイヤキャラクタと敵キャラクタとが生じていなければ、そのままステップＳ１０９の処理に進む。接触状態となっているプレイヤキャラクタと敵キャラクタとが生じていれば、制御部２０３は、当該接触状態となっているプレイヤキャラクタと敵キャラクタの移動ベクトルをプレイヤキャラクタテーブル４００と敵キャラクタテーブル５００とから読み出し、その何れかが０となっているかどうかを判定する（ステップＳ１０６）。何れかの移動ベクトルが０となっていれば、そのままステップＳ１０９の処理に進む。
【００７３】
何れも移動ベクトルが０となっていなければ、制御部２０３は、プレイヤキャラクタのユニット角の範囲内に敵キャラクタが存在し、且つ敵キャラクタのユニット角の範囲内にプレイヤキャラクタが存在するかどうかを判定する（ステップＳ１０７）。何れか一方でもユニット角の範囲内に存在しなければ、そのままステップＳ１０９の処理に進む。何れもユニット角の範囲内に存在すれば、制御部２０３は、接触状態にあるプレイヤキャラクタと敵キャラクタとをユニットとして設定する（ステップＳ１０８）。そして、ステップＳ１０９の処理に進む。
【００７４】
ステップＳ１０９では、制御部２０３は、ステップＳ１０８でユニットとして設定した、或いは前のフレーム期間までに既にユニットとして設定されたプレイヤキャラクタと敵キャラクタの重量をプレイヤキャラクタテーブル４００と敵キャラクタテーブル５００とから読み出し、その重量比を算出する。そして、算出した重量比に従って、ユニットに含まれるプレイヤキャラクタと敵キャラクタの移動ベクトルに重み付けをする。
【００７５】
制御部２０３は、この重み付けの処理を行った後のプレイヤキャラクタの移動ベクトルと敵キャラクタの移動ベクトルを合成し、ユニット全体の移動ベクトルを算出する（ステップＳ１１０）。なお、ステップＳ１０２〜Ｓ１０４の処理は、バトルにおいてユニット化されているプレイヤキャラクタと敵キャラクタの組が２つ以上あれば、各々のユニットについて実行されるものとなる。
【００７６】
次に、制御部２０３は、ステップＳ１０８でユニットとして設定した、或いは前のフレーム期間までに既にユニットとして設定されたプレイヤキャラクタと敵キャラクタを、ステップＳ１１０で合成した移動ベクトルに従って、バトルエリアにおいて移動させる（ステップＳ１１１）。制御部２０３は、また、ユニットとして設定されていないプレイヤキャラクタ及び敵キャラクタを、プレイヤキャラクタテーブル４００または敵キャラクタテーブル５００に登録されている移動ベクトルに従って、バトルエリアにおいて移動させる（ステップＳ１１２）。そして、このフローチャートの処理を終了する。
【００７７】
以上説明したように、この実施の形態にかかるネットワークゲームシステムでは、複数のプレイヤキャラクタ及び複数の敵キャラクタが仮想３次元空間に存在し、ゲームにおいてプレイヤキャラクタ（のパーティ）と敵キャラクタとのバトルが行われることがある。このバトルにおいて、プレイヤキャラクタも敵キャラクタもバトルエリア内で自由に移動することができるので、プレイヤキャラクタと敵キャラクタとが接触状態となることがある。プレイヤキャラクタと敵キャラクタとが接触状態となった場合は、それぞれに指示されている移動ベクトルによっては、プレイヤキャラクタと敵キャラクタとをそのままに移動させる訳にはいかない。
【００７８】
ここで、プレイヤキャラクタも敵キャラクタも、バトルエリア内を移動することができるものであるため、必ず固定状態にある構造物にキャラクタが接触した場合のようにプレイヤキャラクタと敵キャラクタとを移動させることができない。また、物理法則に従って物体同士が衝突した場合の動きをプレイヤキャラクタと敵キャラクタにそのまま適用しても、キャラクタの動きとしては非常に不自然なものとなってしまう。
【００７９】
これに対して、この実施の形態にかかるネットワークゲームシステムでは、プレイヤキャラクタの移動ベクトルの方向を中心としたユニット角の範囲内に敵キャラクタが存在し、且つ敵キャラクタの移動ベクトルの方向を中心としたユニット角の範囲内にプレイヤキャラクタが存在すると、接触状態にあるプレイヤキャラクタと敵キャラクタとをユニットとして設定する。そして、ユニットに含まれるプレイヤキャラクタの移動ベクトルと敵キャラクタの移動ベクトルをベクトル合成して、ユニット全体の移動ベクトルとして求めている。
【００８０】
ユニットに含まれるプレイヤキャラクタと敵キャラクタとは、何れもユニット全体について求められた移動ベクトルに従ってバトルエリアを移動されることになる。これにより、バトルにおいて別の方向に移動しようとしているプレイヤキャラクタと敵キャラクタとが押し合いをしながら、両者が一体となってバトルエリア内を移動していく様子を的確に再現することができる。
【００８１】
また、バトルにおいて接触状態にあるキャラクタをユニット化する対象とするのは、プレイヤキャラクタと敵キャラクタとが接触状態にあるときであり、プレイヤキャラクタ同士や敵キャラクタ同士では接触状態にあってもユニット化しない。プレイヤキャラクタ同士、或いは敵キャラクタ同士のような味方同士の場合、現実の世界であればその移動に譲り合いが見られるハズであるが、このような譲り合いが当然のものとならないプレイヤキャラクタと敵キャラクタという組み合わせでのみユニットとして設定するので、バトルエリア内を別方向に移動しようとする互いに敵対するキャラクタの押し合いにより、２体のキャラクタが一体となってバトルエリアを移動していく様子を的確に再現することができるものとなる。
【００８２】
また、プレイヤキャラクタと敵キャラクタとをユニット化する条件となるユニット角は、何れのキャラクタについても同じに設定されているのではなく、１２０°以上１５０°以下の範囲内で各キャラクタの大きさに応じて個別に設定されている。仮想３次元空間におけるプレイヤキャラクタ及び敵キャラクタの位置は、通常、その基準点（重心位置）の位置によって示されるので、キャラクタの移動ベクトルもその基準点からのベクトルとして計算されてしまう。
【００８３】
これに対して、大きなキャラクタの方が小さなキャラクタよりも、接触状態にある他のキャラクタの移動を規制することになるハズである。ここでは、プレイヤキャラクタと敵キャラクタの各々の大きさに応じてユニット角の大きさを個別に定めることによって、プレイヤキャラクタと敵キャラクタとの押し合いを各々の大きさに見合った的確な状態で再現することができるものとなる。
【００８４】
また、プレイヤキャラクタと敵キャラクタとが一旦ユニット化された後であっても、プレイヤキャラクタの移動ベクトルの方向を中心とした解除角の範囲外に敵キャラクタが存在するものとなったり、敵キャラクタの移動ベクトルの方向を中心とした解除角の範囲外にプレイヤキャラクタが存在するものとなった場合には、一旦設定されたユニットを解除して、プレイヤキャラクタと敵キャラクタとが各々の移動ベクトルに従って個別に移動されるようにしている。
【００８５】
ユニット化されて一体として移動が制御されることとなったプレイヤキャラクタと敵キャラクタの組であっても、各々が移動しようとする方向が変わればユニットを解除して個々のキャラクタ毎に移動した方が自然となることもあるが、ここでユニットを解除するための解除角をユニットを設定するためのユニット角よりも大きくしているため、プレイヤキャラクタと敵キャラクタとのユニットの設定と解除が頻繁になりすぎるのを防ぐことができる。
【００８６】
さらに、ユニットに含まれるプレイヤキャラクタと敵キャラクタの何れの移動ベクトルも０となった場合にも、一旦設定されたユニットを解除して、プレイヤキャラクタと敵キャラクタとが各々の移動ベクトルに従って個別に移動されるようにしている。プレイヤキャラクタと敵キャラクタの移動ベクトルが何れも０となってもユニット化したままでいると、プレイヤキャラクタも敵キャラクタも移動するハズがないのにユニット全体での移動ベクトルを求めるための無駄な処理が生じてしまう。ここでは、ユニットに含まれるプレイヤキャラクタと敵キャラクタの何れの移動ベクトルも０となった場合にユニットを解除するので、無駄な処理負荷を生じさせるのを防ぐことができる。
【００８７】
また、ユニット全体としての移動ベクトルを算出するのに当たって、プレイヤキャラクタと敵キャラクタとの重量比に応じて、プレイヤキャラクタの移動ベクトルと敵キャラクタの移動ベクトルに重み付けを行っている。ユニットを形成するプレイヤキャラクタと敵キャラクタの全体として一体した動きとしては、現実世界であれば単なるベクトル和で決まるのではなく、互いの重量の関係で拮抗したり、一方的となったりする場合がある。ここでは、ユニット全体の移動量を算出する際に、ユニットに含まれるプレイヤキャラクタと敵キャラクタの重量比に応じて重み付けを行っているので、ユニットに含まれるプレイヤキャラクタと敵キャラクタの移動が拮抗したり一方的となったりする様子を的確に再現することができるものとなる。
【００８８】
さらに、プレイヤキャラクタと敵キャラクタが存在する仮想空間は仮想３次元空間であり、プレイヤキャラクタと敵キャラクタとの移動ベクトルは３次元ベクトルで表されるものとなっているが、ユニットに含まれるプレイヤキャラクタと敵キャラクタの傾斜が所定の角度以下となっている場合（或いは、両者の高低差が所定量以下となっている場合）には、高さ方向を除いた２次元ベクトルでベクトル合成を行い、高さ方向のベクトル成分を０としてユニット全体の移動ベクトルを求めるものとしている。
【００８９】
ユニットに含まれるプレイヤキャラクタと敵キャラクタの傾斜が所定の角度以下となっている場合や、両者の高低差が所定量以下となっている場合には、プレイヤキャラクタと敵キャラクタの移動に対して高さ方向のベクトルはあまり関係しない。このような場合において、プレイヤキャラクタ及び敵キャラクタの３次元の移動ベクトルのうちの高さ方向のベクトルを除いた２次元ベクトルでユニット全体の移動量を算出することで、ベクトル演算の演算量を小さくすることができる。
【００９０】
本発明は、上記の実施の形態に限られず、種々の変形、応用が可能である。以下、本発明に適用可能な上記の実施の形態の変形態様について説明する。
【００９１】
上記の実施の形態では、プレイヤキャラクタ及び敵キャラクタの各々について、ユニット角及び解除角がプレイヤキャラクタテーブル４００または敵キャラクタテーブル５００に登録されていた。もっとも、ユニット角は、１２０°以上１５０°以下の範囲で設定するものに限られず、９０°以上１８０°未満の範囲で設定することができる（但し、１２０°〜１５０°の範囲で、より良好な結果が得られる）。また、解除角も、ユニット角以上の角度（但し、１８０°未満）に設定するのであれば、１３０°以上１６０°以下の範囲に限られるものではない。
【００９２】
また、ユニット角及び解除角は、プレイヤキャラクタまたは敵キャラクタの大きさに応じて一義的に決まるものとし、プレイヤキャラクタテーブル４００や敵キャラクタテーブル５００への登録はなくてもよい。例えば、プレイヤキャラクタ及び敵キャラクタが、その大きさ毎に大、中、小の何れかに区分されるものとし、大のユニット角及び解除角は１５０°と１６０°、中のユニット角及び解除角は１３５°と１４５°、小のユニット角及び解除角は１２０°と１３０°となるものとしてもよい。
【００９３】
さらに、ユニット角及び解除角は、プレイヤキャラクタまたは敵キャラクタの移動ベクトルの方向を中心にその範囲が左右対称に設定されるものだけではなく、特殊な形態のキャラクタやキャラクタの状態などによっては左右非対称に設定されるものであってもよい。例えば、左右非対称の形態のキャラクタや左右の手足のうち一方を怪我したキャラクタなどに対して、左右非対称のユニット角及び解除角を設定することができる。但し、何れにしても移動ベクトルの方向はユニット角及び解除角の範囲内に含まれなければならず、この場合も移動ベクトルの方向を中心としてユニット角及び解除角が設定されると考えることができる。
【００９４】
上記の実施の形態では、バトルにおいて接触状態となったプレイヤキャラクタと敵キャラクタをユニット化するのは、プレイヤキャラクタのユニット角の範囲内に敵キャラクタが存在し、且つ敵キャラクタのユニット角の範囲内にプレイヤキャラクタが存在すると判定されたときとしていた。これに対して、ユニット角という概念を用いず、プレイヤキャラクタの移動方向と敵キャラクタの移動方向とがなす角が一定の角度（例えば、１２０°）以上となったことを条件として、バトルにおいて接触状態となったプレイヤキャラクタと敵キャラクタをユニット化してもよい。
【００９５】
一旦ユニット化されたプレイヤキャラクタと敵キャラクタのユニットを解除するのにも、解除角という概念を用いずに、プレイヤキャラクタの移動方向と敵キャラクタの移動方向とがなす角が一定の角度よりも小さい特定の角度（例えば、１２０°に対して１１０°）以下となったことを条件として、一旦設定されたプレイヤキャラクタと敵キャラクタのユニットを解除するものとしてもよい。
【００９６】
上記の実施の形態では、プレイヤキャラクタと敵キャラクタの双方ともに移動ベクトルが０となったときに、ユニットを解除するものとしていた。もっとも、ユニットの解除になるキャラクタの移動量は、０だけに限るものではなく、ほとんど移動が見られないような状態となった（つまり、移動量が所定値以下となった）ならば、ユニットを解除するものとしてもよい。また、プレイヤキャラクタの移動ベクトルについては敵キャラクタの方向に向けたベクトル成分、敵キャラクタの移動ベクトルについてはプレイヤキャラクタの方向に向けたベクトル成分が所定値以下となったならば、ユニットを解除するというようにしてもよい。
【００９７】
上記の実施の形態では、接触状態にあるプレイヤキャラクタと敵キャラクタのユニット全体での移動量をベクトル合成するときの各々のキャラクタの移動ベクトルに対する重み付けは、各々のキャラクタに設定された重量の比率に従って行うものとしていた。もっとも、この重み付けを、各々のキャラクタに設定された重量の比率に従って行うのではなく、各キャラクタの重量と移動量（ここではスカラー量）との積により求められる運動量に従って行うものとしてもよい。
【００９８】
また、重量比または運動量比に応じた移動ベクトルに対する重み付けの手法は、上記の実施の形態のような手法に限るものではなく、例えば、常に重量比そのままの重み付けとするものとしてもよい（この場合は、実質的に運動量のベクトルが合成されるものとなる）。常に重量比や運動量比の重み付けに、ランダムな重み付けを加えるものとしてもよい。また、そもそもユニット全体での移動量をベクトル合成するときの各キャラクタの移動ベクトルの重み付けを全く行わないものとしてもよい。
【００９９】
上記の実施の形態では、１体のプレイヤキャラクタと１体の敵キャラクタとが接触状態となったときに、プレイヤキャラクタのユニット角の範囲内に敵キャラクタが存在し、且つ敵キャラクタのユニット角の範囲内にプレイヤキャラクタが存在することを条件として、プレイヤキャラクタと敵キャラクタとの２体をユニットとして設定するものとしていた。もっとも、複数のプレイヤキャラクタがパーティーを組んでバトルを行ったり、バトルに登場する敵キャラクタが２体以上となることもあるので、３体以上のキャラクタが接触状態となることがある。
【０１００】
３体以上のキャラクタが接触状態となった場合においては、接触状態にある３体以上のキャラクタを１つのユニットとして設定することができる。３体以上のキャラクタをユニット化する手法も、基本的には２体のキャラクタをユニット化する手法と同じであるが、接触状態となったキャラクタの数、種類、或いは接触状態の態様に応じて特有の問題が生じ得る。以下、３体以上のキャラクタをユニット化する場合に特有の問題を挙げて説明する。図７は、３体のキャラクタが接触状態にある場合の移動制御を説明する図である。
【０１０１】
図７（ａ）に示す例では、敵キャラクタ６０１とプレイヤキャラクタ６１１とがユニット６００として設定されており、このユニット６００を構成する敵キャラクタ６０１に別のプレイヤキャラクタ６２１が新たに接触した場合を示している。この場合、敵キャラクタ６０１とプレイヤキャラクタ６２１とが直接的に接触状態になったので、プレイヤキャラクタ６２１の移動ベクトル６２２の方向を中心としたユニット角６２３の範囲内に敵キャラクタ６０１が存在するかと、敵キャラクタ６０１の移動ベクトル６０２の方向を中心としたユニット角６０３の範囲内にプレイヤキャラクタ６２１が存在するかが判定される。
【０１０２】
ユニット角６２３の範囲内に敵キャラクタ６０１が存在し、且つユニット角６０３の範囲内にプレイヤキャラクタ６２１が存在すると判定されると、既にユニット化されていた敵キャラクタ６０１とプレイヤキャラクタ６１１にプレイヤキャラクタ６２１を加えて、ユニット６３０が設定される。なお、この場合において、プレイヤキャラクタ６１１とプレイヤキャラクタ６２１とが接触状態になっているかどうかは問われず、接触状態となっていたとしても、プレイヤキャラクタ６１１とプレイヤキャラクタ６２１の移動方向に応じた判定は行われない。
【０１０３】
図７（ｂ）に示す例では、敵キャラクタ７０１とプレイヤキャラクタ７１１とがユニット７００として設定されており、プレイヤキャラクタ７１１の単体での移動ベクトル７１２の方向ではなく、ユニット７００全体に対して合成した移動ベクトル７０２にプレイヤキャラクタ７１１が移動しているものとする。この状態で、別の敵キャラクタ７２１がプレイヤキャラクタ７１１と接触状態になったものとする。
【０１０４】
この場合、プレイヤキャラクタ７１１と敵キャラクタ７２１が直接的に接触状態になったので、プレイヤキャラクタ７１１の移動ベクトル７１２の方向を中心としたユニット角７１３の範囲内に敵キャラクタ７２１が存在するかと、敵キャラクタ７２１の移動ベクトル７２２の方向を中心としたユニット角７２３の範囲内にプレイヤキャラクタ７１１が存在するかが判定される。プレイヤキャラクタ７１１が実際に移動しているのは合成した移動ベクトル７０２であるものの、判定に用いられるのは、あくまで個別の移動ベクトル７１２の方である。
【０１０５】
ここでは、ユニット角７２２の範囲内にプレイヤキャラクタ７１１が存在するものの、ユニット角７１２の範囲内に敵キャラクタ７２１は存在しないので、敵キャラクタ７２１は、敵キャラクタ７０１及びプレイヤキャラクタ７１１とはユニット化されない。既に設定されていた敵キャラクタ７０１とプレイヤキャラクタ７１１のユニット７００は、そのままである。
【０１０６】
図７（ｃ）に示す例では、敵キャラクタ８０１とプレイヤキャラクタ８１１とがユニット８００として設定されており、このユニット８００を構成するプレイヤキャラクタ８１１に別のプレイヤキャラクタ８２１が新たに接触した場合を示している。この場合、敵キャラクタ８０１とプレイヤキャラクタ８２１とが直接的に接触状態になった訳ではないので、プレイヤキャラクタ８２１の移動ベクトル８２２の方向を中心としたユニット角８２３の範囲内に敵キャラクタ８０１が存在し、且つ敵キャラクタ８０１の移動ベクトル８０２の方向を中心としたユニット角８０３の範囲内にプレイヤキャラクタ８２１が存在したとしても、プレイヤキャラクタ８２１を敵キャラクタ８０１及びプレイヤキャラクタ８１１とユニット化しなくてもよい。
【０１０７】
もっとも、プレイヤキャラクタ８２１の移動ベクトル８２２の方向を中心としてユニット角８２３よりも小さい角度範囲に設定された第２ユニット角８２４の範囲内にプレイヤキャラクタ８２１が存在する場合には、既にユニット化されていた敵キャラクタ８０１とプレイヤキャラクタ８１１にプレイヤキャラクタ８２１を加えて、ユニット８３０を設定することができる。
【０１０８】
なお、図７（ａ）〜（ｃ）では、プレイヤキャラクタと敵キャラクタとを合わせて合計３体のキャラクタとなる場合の例を説明したが、プレイヤキャラクタと敵キャラクタとを合わせて合計４体以上のキャラクタとなる場合についても、図７（ａ）〜（ｃ）の場合と同様にユニット化するかどうかを決めることができる。
【０１０９】
上記の実施の形態では、バトルにおいてプレイヤキャラクタと敵キャラクタとが接触状態となったときに、各々の移動方向に応じて接触状態にあるプレイヤキャラクタと敵キャラクタとをユニット化し、ユニット全体で移動量を求めてバトルエリアにおいて移動させるものとしていた。もっとも、このようなユニット化は、接触状態にあるプレイヤキャラクタと敵キャラクタに適用するのみならず、プレイヤキャラクタ同士、或いは敵キャラクタ同士が接触状態にある場合にも適用するものとしてもよい。また、バトル以外において仮想３次元空間において接触状態となった２体のキャラクタについてもユニット化するものとしてもよい。
【０１１０】
上記の実施の形態では、ネットワークＲＰＧにおいて仮想３次元空間に存在するキャラクタ（プレイヤキャラクタ及び敵キャラクタ）について、本発明を適用した場合を説明したが、仮想空間において複数のキャラクタが移動していくものであれば、ネットワークＲＰＧ以外のゲームにも適用することができる。本発明は、ネットワークゲームにもスタンドアロンのゲームにも、さらにはアドホック通信により通信対戦を行うゲームにも適用可能である。１人プレイのスタンドアロンのゲームでも、プレイヤキャラクタを含めて仮想空間を自由に移動可能な複数のキャラクタが存在する限り、本発明を適用することは可能である。
【０１１１】
また、プレイヤキャラクタが所定の位置に到達することでバトルが開始するＲＰＧに限らず、プレイヤキャラクタが仮想空間を移動しながら敵キャラクタとのバトルを行っていくアクションＲＰＧや、プレイヤキャラクタと敵キャラクタ（或いは、他のプレイヤのプレイヤキャラクタ）とが格闘を行う対戦格闘ゲームにも、本発明を適用することができる。さらには、仮想空間を移動するキャラクタが複数存在するのであれば、ゲーム以外のものに対しても、本発明を適用することができる。また、仮想空間は、仮想３次元空間に限らず、仮想２次元空間であってもよい。
【０１１２】
上記の実施の形態では、サーバ装置２００のプログラム及びデータは、記録媒体２３１に格納されて配布されるものとしていた。これに対して、これらのプログラム及びデータをネットワーク上に存在する他のサーバ装置が有する固定ディスク装置に格納しておき、装置本体２０１にネットワークを介して配信するものとしてもよい。サーバ装置２００において、通信インターフェイス２１５がサーバ装置から受信したプログラム及びデータは、ＨＤＤ２０７に保存し、実行時にＲＡＭ２０５にロードすることができる。ビデオゲーム装置１００のプログラム及びデータについても、同様である。
【符号の説明】
【０１１３】
１００  ビデオゲーム装置
１０１  装置本体
１０３  制御部
１０５  ＲＡＭ
１０７  ＨＤＤ
１０９  サウンド処理部
１１１  グラフィック処理部
１１２  フレームメモリ
１１３  ＤＶＤ／ＣＤ−ＲＯＭドライブ
１１５  通信インターフェイス
１１７  インターフェイス部
１１９  内部バス
１２１  表示装置
１２２  表示画面
１２５  サウンド出力装置
１３１  記録媒体
１５１  ネットワーク
１６１  受信部
１６２  メモリーカード
２００  サーバ装置
２０１  装置本体
２０３  制御部
２０５  ＲＡＭ
２０７  ＨＤＤ
２１３  ＤＶＤ／ＣＤ−ＲＯＭドライブ
２１５  通信インターフェイス
２３１  記録媒体
【図１】
0005372116.tif 000002
【図２】
0005372116.tif 000003
【図３】
0005372116.tif 000004
【図４】
0005372116.tif 000005
【図５】
0005372116.tif 000006
【図６】
0005372116.tif 000007
【図７】
0005372116.tif 000008