(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023095181
(43)【公開日】2023-07-06
(54)【発明の名称】ゲームプログラム、ゲーム処理方法及び情報処理装置
(51)【国際特許分類】
A63F 13/577 20140101AFI20230629BHJP
A63F 13/56 20140101ALI20230629BHJP
A63F 13/52 20140101ALI20230629BHJP
G06T 19/00 20110101ALI20230629BHJP
【FI】
A63F13/577
A63F13/56
A63F13/52
G06T19/00 C
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2021210919
(22)【出願日】2021-12-24
(71)【出願人】
【識別番号】595000427
【氏名又は名称】株式会社コーエーテクモゲームス
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】大島 光洋
(72)【発明者】
【氏名】隆藤 唯信
【テーマコード(参考)】
5B050
【Fターム(参考)】
5B050AA10
5B050BA09
5B050CA01
5B050CA07
5B050CA08
5B050EA26
5B050FA02
(57)【要約】
【課題】衝突時のオブジェクトの動きを改善する。
【解決手段】仮想空間内においてオブジェクト毎の衝突を検出するために仮想体であるコリジョンオブジェクト同士の重なりを判定し、オブジェクト及び/又はコリジョンオブジェクトに対応して記憶部に記憶しているパラメータを参照して、重なりを判定した前記コリジョンオブジェクトのそれぞれの押出割合を算出し、前記押出割合に応じて重なったそれぞれの前記コリジョンオブジェクトを押し出し、前記コリジョンオブジェクトの押し出しに応じて前記コリジョンオブジェクトに対応するオブジェクトの表示を制御する、処理をコンピュータに実行させる、ゲームプログラムが提供される。
【選択図】
図7
【特許請求の範囲】
【請求項1】
仮想空間内においてオブジェクト毎の衝突を検出するために仮想体であるコリジョンオブジェクト同士の重なりを判定し、
オブジェクト及び/又はコリジョンオブジェクトに対応して記憶部に記憶しているパラメータを参照して、重なりを判定した前記コリジョンオブジェクトのそれぞれの押出割合を算出し、
前記押出割合に応じて重なったそれぞれの前記コリジョンオブジェクトを押し出し、
前記コリジョンオブジェクトの押し出しに応じて前記コリジョンオブジェクトに対応するオブジェクトの表示を制御する、
処理をコンピュータに実行させる、ゲームプログラム。
【請求項2】
前記パラメータには、前記オブジェクトの属性及びゲームを撮影する仮想カメラからの距離の少なくともいずれかが予め設定されている、
請求項1に記載のゲームプログラム。
【請求項3】
前記オブジェクトの属性は、前記コリジョンオブジェクト内に表示されるオブジェクトの種類、重要度、大きさ、重さ、装備、柔らかさ、動作速度、動作方向、固定、非固定、敵キャラクタ、味方キャラクタ、地面からの高さ、及びオブジェクトが所属するグループの属性の少なくともいずれかを含む、
請求項2に記載のゲームプログラム。
【請求項4】
前記押出割合を算出する処理は、
前記記憶部に記憶しているパラメータから選択したパラメータの組み合わせに応じて、前記押出割合を算出する、
請求項3に記載のゲームプログラム。
【請求項5】
前記重なりを判定する処理は、
前記パラメータが固定の前記コリジョンオブジェクトを含んだ前記コリジョンオブジェクト同士に対して実行され、固定の前記コリジョンオブジェクトとの重なりを判定した場合、固定の前記コリジョンオブジェクトと重なりを判定した前記コリジョンオブジェクトとの貫通深度を算出し、前記貫通深度に応じて前記重なりを判定した前記コリジョンオブジェクトの押出割合を算出する、
請求項3に記載のゲームプログラム。
【請求項6】
前記パラメータの少なくともいずれかは、動的に変化し、
前記押出割合を算出する処理は、
定期的又は不定期に前記パラメータを参照して、重なりを判定した前記コリジョンオブジェクト同士の押出割合を算出する、
請求項1及至請求項5のいずれか一項に記載のゲームプログラム。
【請求項7】
仮想空間内においてオブジェクト毎の衝突を検出するために仮想体であるコリジョンオブジェクト同士の重なりを判定し、
オブジェクト及び/又はコリジョンオブジェクトに対応して記憶部に記憶しているパラメータを参照して、重なりを判定した前記コリジョンオブジェクトのそれぞれの押出割合を算出し、
前記押出割合に応じて重なったそれぞれの前記コリジョンオブジェクトを押し出し、
前記コリジョンオブジェクトの押し出しに応じて前記コリジョンオブジェクトに対応するオブジェクトの表示を制御する、
処理をコンピュータが実行する、ゲーム処理方法。
【請求項8】
仮想空間内においてオブジェクト毎の衝突を検出するために仮想体であるコリジョンオブジェクト同士の重なりを判定する重なり判定部と、
オブジェクト及び/又はコリジョンオブジェクトに対応して記憶部に記憶しているパラメータを参照して、重なりを判定した前記コリジョンオブジェクトのそれぞれの押出割合を算出する算出部と、
前記押出割合に応じて重なったそれぞれの前記コリジョンオブジェクトを押し出し、前記コリジョンオブジェクトの押し出しに応じて前記コリジョンオブジェクトに対応するオブジェクトの表示を制御する表示制御部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ゲームプログラム、ゲーム処理方法及び情報処理装置に関する。
【背景技術】
【0002】
アクションゲームやシミュレーションゲーム等、多数のキャラクタが密集するゲームが知られている。例えば、アクションゲームではプレイヤキャラクタを攻撃しようとする敵キャラクタが、プレイヤキャラクタの周囲に密集する場合がある。
【0003】
これに対して、密集した敵キャラクタの動きを制御する技術が考案されている(例えば特許文献1参照。)。特許文献1には、密集した敵キャラクタの動きをより自然な態様で表示する画像処理方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来の技術では、各キャラクタが密集することにより、キャラクタの挙動に不具合が生じる場合がある。例えば、多数の敵キャラクタがプレイヤキャラクタに接近しようとする場合、敵キャラクタは移動先に別の敵キャラクタがいても進もうとする。このようにしてキャラクタが密集すると、キャラクタ同士の押し合いが発生し、意図したようにキャラクタが動けず、キャラクタの不自然な動きによりゲームの興趣性が低下する要因となる。
【0006】
そこで、1つの側面では、本開示は、衝突時のオブジェクトの動きを改善することを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様では、仮想空間内においてオブジェクト毎の衝突を検出するために仮想体であるコリジョンオブジェクト同士の重なりを判定し、オブジェクト及び/又はコリジョンオブジェクトに対応して記憶部に記憶しているパラメータを参照して、重なりを判定した前記コリジョンオブジェクトのそれぞれの押出割合を算出し、前記押出割合に応じて重なったそれぞれの前記コリジョンオブジェクトを押し出し、前記コリジョンオブジェクトの押し出しに応じて前記コリジョンオブジェクトに対応するオブジェクトの表示を制御する、処理をコンピュータに実行させる、ゲームプログラムが提供される。
【発明の効果】
【0008】
1つの側面では、本開示は、衝突時のオブジェクトの動きを改善することができる。
【図面の簡単な説明】
【0009】
【
図1】実施形態に係るゲームシステムの構成例を示す図。
【
図2】実施形態に係るゲームシステムの他の構成例を示す図。
【
図3】実施形態に係るゲーム機のハードウェア構成を示す図。
【
図4】実施形態に係るゲーム機の機能構成を示す図。
【
図8】実施形態に係るパラメータテーブルの一例を示す図。
【
図9】実施形態に係る押出処理を含むゲーム処理方法を示すフローチャート。
【
図10】実施形態の変形例に係る押出処理を説明する図。
【発明を実施するための形態】
【0010】
以下、本開示を実施するための形態について図面を参照して説明する。なお、本明細書及び図面において、実質的に同一の構成については、同一の符号を付することにより重複した説明を省く場合もある。
【0011】
[ゲームシステム]
図1は、実施形態に係るゲームシステム1の構成例を示す図である。ゲームシステム1は、情報処理装置の一例であるゲーム機3と、ゲームコントローラ5と、表示装置7とを有する。ゲームコントローラ5及び表示装置7の各々は、ゲーム機3と有線又は無線により通信可能に接続されている。
【0012】
ゲーム機3は、例えば据え置き型のゲーム専用機である。但し、これに限定されるものではなく、ゲーム機3は、例えば入力部や表示部等を一体に備えた携帯型のゲーム機でもよい。
【0013】
また、ゲーム機3はゲーム専用機に限らず、例えば、コンピュータ、デスクトップ型コンピュータ、ノート型コンピュータ、タブレット型コンピュータ等のように、コンピュータとして製造、販売等されているものや、スマートフォン、携帯電話、ファブレット等のように、電話機としても機能する携帯端末でもよい。これらの装置は、普段は汎用的な情報処理端末装置として利用されるが、プレイヤがインストールされたゲームプログラムを実行すると、ゲーム専用機と同様、プレイヤがゲームを進行できるようになる。
【0014】
ゲーム機3には、本実施形態のゲームプログラムがインストールされる。ゲームプログラムはCD-ROMなどの光記憶媒体やUSBメモリなどの半導体メモリに記憶された状態で配布されたり、サーバ装置からダウンロードされたりする形態で配布される。
【0015】
プレイヤは、ゲームコントローラ5を用いて各種の操作入力を行う。
図1に示す例では、ゲームコントローラ5は例えば十字キー9、及び複数のボタン8等を有する。なお、ゲームコントローラ5は上記に代えて又は加えて、例えばジョイスティックやタッチパッド等を有してもよい。また、ゲームコントローラ5がマイクを備え、音声操作が可能でもよい。ゲームコントローラ5がジャイロセンサや加速度センサ等を備え、プレイヤがゲームコントローラ5の姿勢を変えることで操作が可能でもよい。
【0016】
また、ゲーム機3は更にネットワーク上のサーバ装置と通信してもよい(
図2参照)。同じゲームプログラムを実行する複数のゲーム機3は、サーバ装置に接続するので、いわゆるオンラインゲームが可能になる。オンラインゲームとは、例えば、多人数で同じゲームプログラムを協調して操作できるゲームをいう。オンラインゲームのサーバ装置は、他のプレイヤの位置や操作コマンドを受け付け、他のプレイヤのゲーム機3に送信する処理等を行ってもよい。ゲーム機3では各プレイヤの描画や操作コマンドの反映処理など実際のゲーム処理を行う。
【0017】
図2は、実施形態におけるゲームシステム1の他の構成例を示す図である。実施形態のゲームシステム1は、ネットワークN(例えば、インターネット等)を介してゲームに関する各種サービスをプレイヤに提供する。ゲームシステム1は、サーバ装置10と端末装置30とを有する。サーバ装置10は、ゲームに関する各種サービスを端末装置30に提供する情報処理装置(処理装置)の一例である。サーバ装置10は、パーソナルコンピュータ、ワークステーション、クラウドコンピュータ等であってよい。
【0018】
端末装置30は、ゲームをプレイする際にプレイヤが使用する情報処理装置の一例である。端末装置30は、ゲーム機でもよいし、コンピュータ、デスクトップ型コンピュータ、ノート型コンピュータ、タブレット型コンピュータ等のように、コンピュータとして製造、販売等されているものや、スマートフォン、携帯電話、ファブレット等のように、電話機としても機能する携帯端末でもよい。
【0019】
端末装置30は、サーバ装置10に対してゲームに関する各種情報(ゲーム処理方法が記載されたゲームプログラムやゲーム画面等)の配信要求を行う。サーバ装置10は、端末装置30から各種情報の配信要求を受け付けると、端末装置30においてプレイするゲームプログラムやゲーム画面のWebページを配信する。
【0020】
端末装置30は、プレイヤにゲーム画面を表示するWebページを閲覧させるためのWebブラウザ機能を有する。これにより、端末装置30は、サーバ装置10から配信されたゲーム画面等のWebページを表示することができる。サーバ装置10は、プレイヤが動作させるプレイヤキャラクタ及びノンプレイヤキャラクタが敵及び味方に分かれて対戦するオンラインゲーム等のゲームを提供してもよい。
【0021】
ゲームシステム1は、
図1に例示するゲーム機3や
図2に例示する端末装置30が別のゲーム機3や別の端末装置30と通信するいわゆるP2P(Peer To Peer)方式でもよい。この場合、
図2のサーバ装置10は設けなくてもよい。また、ゲームシステム1はいわゆるクラウドゲームでもよい。
図1及び
図2のゲームシステム1は一例であり、用途や目的に応じて様々なシステム構成例が考えられる。以下では、主に
図1の構成を用いて本実施形態のゲームシステム1について説明する。
【0022】
ゲーム機3は、対戦ゲームに限らず、バスケットやテニス等のスポーツゲーム、レーシングゲーム、街づくりゲーム等、あらゆるゲームを提供できる。また、ゲーム機3は、ガチャ等によりゲームを提供できる。ただし、本実施形態にて開示するゲームシステム1で実行されるゲームは、キャラクタが密集する対戦ゲーム(アクションゲーム)が好適である。本実施形態では、後述するようにゲーム中に衝突するキャラクタ(オブジェクト)同士の押出割合を算出し、押出割合に応じてキャラクタ(オブジェクト)を押し出すことで衝突時の自然な描画を実現する。
【0023】
なお、オブジェクトとは、本実施形態では主に仮想空間(例えば仮想的な3次元空間)に存在する人や物をまとめてオブジェクトという。例えば、PC、敵キャラクタ、岩、建物等、およそ仮想空間に登場するものはオブジェクトである。
【0024】
[ゲーム機のハードウェア構成]
次に、ゲーム機3のハードウェア構成について、
図3を参照して説明する。
図3は、実施形態に係るゲーム機3のハードウェア構成を示す図である。ゲーム機3は、CPU(Central Processing Unit)121、メモリ122、通信装置123、入力装置124及び表示装置125を有する。CPU121は、ゲーム機3を制御する。メモリ122は、例えば、CPU121が直接アクセス可能なゲーム機3内の記憶媒体である。通信装置123は、他の装置との通信を制御するネットワーク回路などの通信デバイスである。入力装置124は、入力デバイスであり、ゲームコントローラ5のようにゲーム機3に接続され、ゲーム機3の内部に有しなくてもよい。入力装置124は、カメラ又はタッチパネルなどの入力デバイスでもよい。表示装置125は、ディスプレイなどの出力デバイスである。
【0025】
ゲーム機3は、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などの各種マイクロプロセッサ、VRAMやRAM、ROM等の各種のメモリ122を搭載してもよい。
【0026】
ゲーム機3は、演算処理によりゲームプレイするために必要な各種のゲームデータをメモリ122に記憶し、ゲーム処理の実行を制御及び管理するゲーム管理機能を有する。CPU121が所定のゲームプログラム及びゲームデータに基づいて演算処理を行うことにより、ゲーム処理方法が実行される。
【0027】
[ゲーム機の機能構成]
次に、ゲーム機3の機能構成について
図4を参照して説明する。
図4は、実施形態に係るゲーム機3の機能構成を示す図である。ゲーム機3は、制御部11、記憶部12及び通信部13を有する。
【0028】
制御部11は、各部間のデータの受け渡しを行うと共にゲーム機3の制御を行う。制御部11は、CPU121がメモリ122に格納されたゲームプログラムを実行することによって実現される。
【0029】
記憶部12は、ゲームをコンピュータに実行させるゲームプログラム、各種のデータ及び各種の情報を記憶している。記憶部12は、例えばメモリ122によって実現される。記憶部12は、ゲームプログラムが記憶された読み取り専用の記憶領域であるROM(Read Only Memory)と、制御部11による演算処理のワーク領域として使用される書き換え可能な記憶領域であるRAM(Random Access Memory)とを有している。記憶部12は、例えば、フラッシュメモリやハードディスク等の不揮発性の記憶装置によって実現される。ゲームプログラムの一部又は全部はRAMに格納されてもよい。
【0030】
更に、記憶部12は、パラメータテーブル21を記憶する。
図8は、実施形態に係るパラメータテーブル21の一例を示す図である。パラメータテーブル21は、キャラクタやそれ以外のオブジェクトを識別可能なオブジェクトID(キャラクタIDを含む)毎に設定されたコリジョンIDと、オブジェクトID及び/又はコリジョンIDにより識別されるオブジェクト及び/又はコリジョンオブジェクト毎に設定されたパラメータを記憶する。コリジョンオブジェクト及びパラメータについては後述する。
【0031】
通信部13は、端末装置30及び/又はその他の装置との間で通信を行うための機能を有する。通信部13は、端末装置30及び/又はその他の装置から送信される各種データを受信する受信部としての機能と、制御部11の指令に応じて各種データを端末装置30及び/又はその他の装置へ送信する送信部としての機能を有する。通信部13は、例えば、NIC(Network Interface Card)によって実現される。
【0032】
制御部11は、ゲーム実行処理部14、コリジョン制御部15、重なり判定部16、算出部17及び表示制御部18を有する。ゲーム実行処理部14は、仮想空間内において例えばプレイヤが操作するプレイヤキャラクタが敵キャラクタと対戦する対戦ゲームを実行する。ただし、ゲーム実行処理部14が行うゲームは、対戦ゲームに限らず、例えばシミュレーションゲーム、その他のゲームであってもよい。
【0033】
なお、本明細書におけるオブジェクトは、仮想空間に表示される表示部品であり、ゲーム画面に表示されたステージ上で動作可能なオブジェクト及び固定のオブジェクトが含まれる。動作可能なオブジェクトには、プレイヤキャラクタ、ノンプレイヤキャラクタが含まれる。動作不可能なオブジェクトには、建物や山等のオブジェクトが含まれる。キャラクタを含むオブジェクトには、それぞれカプセル状のコリジョンオブジェクトが設定されている(
図5参照)。コリジョンオブジェクトは、オブジェクトを覆うように構成され、オブジェクトの衝突判定に使用される。
図5の例では、コリジョンオブジェクトT1、T2は、キャラクタC1、C2をそれぞれカプセル状に覆い、キャラクタC1、C2の衝突判定に使用される。以下ではコリジョンオブジェクトを、「コリジョン」とも呼ぶ。コリジョンオブジェクトは仮想体であり、画面上では表示されない。よって、プレイヤには、コリジョンT1、T2は見えていない。ただし、コリジョンの形状はカプセル状に限らず、四角、球状、円柱状など、接触判定を行いたいオブジェクトの形状に応じて色々な形のコリジョンオブジェクトを用いることができる。
【0034】
コリジョン制御部15は、仮想空間内においてキャラクタ等のオブジェクトの動きに連動してコリジョンの移動を制御する。重なり判定部16は、仮想空間内においてオブジェクト毎の衝突を検出するために、仮想体であるコリジョン同士の重なりを判定する。パラメータには、コリジョンの固定又は非固定を示すものがある。パラメータが固定の場合、そのコリジョンが覆うオブジェクトは固定され、動かない。パラメータが非固定の場合、そのコリジョンが覆うオブジェクトは動くことができる。算出部17は、パラメータが互いに固定のコリジョンの重なりを判定しなくてよい。
【0035】
算出部17は、コリジョンに対応して記憶部12のパラメータテーブル21に記憶しているパラメータを参照して、重なりを判定したコリジョンのそれぞれの押出割合を算出する。各コリジョンの押出割合は、コリジョン同士の重なり(衝突)を解消するために、各コリジョンを衝突した方向と反対方向に押し出す割合である。重なり判定部16は、パラメータが互いに非固定のコリジョンの重なりを判定し、算出部17は、重なりを判定した非固定同士の各コリジョンの押出割合を算出してもよい。ただし、これに限らず、重なり判定部16は、パラメータが固定のコリジョンを含めて、非固定及び固定にかかわらずコリジョン同士の重なりを判定し、算出部17は、重なりを判定したコリジョンのそれぞれの柔らかさに応じて貫通深度を算出し、貫通深度に応じて重なりを判定した各コリジョンの押出割合を算出してもよい。
【0036】
パラメータには、コリジョン内に表示されるオブジェクトの属性及びゲームを撮影する仮想カメラからの距離の少なくともいずれかを含み、予めパラメータテーブル21に設定されている。オブジェクトの属性は、
図8に示すように、コリジョン内に表示されるオブジェクトの種類、重要度、大きさ、重さ、武器(強さ)、柔らかさ、動作(速度/方向)、固定/非固定、所属勢力、キャラクタ種類、地面からの高さ、オブジェクトが所属するグループの属性の少なくともいずれかであってよい。例えばグループの属性には、プレイヤキャラクタが所属する部隊等のグループの重要度、所属人数、強さ、種類等が含まれる。なお、
図8に示すパラメータは一例であり、これに限らない。例えば、パラメータには、HPや体力等の戦闘に関するパラメータ、育成レベル等が含まれ得る。また、武器は、装備のパラメータの一例であり、装備には武器の他、防具などが含まれる。
【0037】
パラメータの少なくともいずれかは、動的に変化してもよい。例えばパラメータは、ゲームの進行状況、キャラクタの成長等に応じて動的に変化してよい。算出部17は、定期的又は不定期にパラメータを参照して、最新のパラメータに基づき、重なり判定部16が重なりを判定したコリジョン同士の押出割合を算出してもよい。
【0038】
表示制御部18は、キャラクタの動作やオブジェクトの表示を制御する。表示制御部18は、複数のキャラクタやその他のオブジェクトが登場する仮想空間を端末装置30の表示装置125に表示させる。表示制御部18は、ゲーム画面のWebページを制御し、ゲーム画面のWebページを通信部13により端末装置30に送信し、端末装置30の画面に表示する。表示制御部18は、押出割合に応じて重なったそれぞれのコリジョンオブジェクトを押出距離分押し出し、コリジョンオブジェクトの押し出しに応じてそれぞれのコリジョンに対応するオブジェクトの表示を制御する。
【0039】
[押出処理]
ゲーム中にキャラクタ等のオブジェクト同士が衝突した際に、双方のコリジョン又は片方のコリジョンの位置を動かし、オブジェクトの衝突状態を解消する場合がある。以下、この手順をコリジョンの押出処理又は単に押出処理ともいう。従来の押出処理では、各コリジョンの押出割合が固定されていた。本実施形態に係る押出処理では、各コリジョンの押出割合が可変であり、最適化される。
【0040】
従来の押出処理と比較しながら、本実施形態に係る押出処理について、
図5~
図7を参照しながら説明する。
図5及び
図6は、従来の押出処理を説明する図である。
図7は、実施形態に係る押出処理を説明する図である。
【0041】
図5(a)では、コリジョンT1、T2同士が互いに重なっている。コリジョンT1、T2同士が多少でも重なっている場合、キャラクタC1、C2が衝突している状態を示す。換言すれば、キャラクタC1、C2が衝突しているか否かは、キャラクタC1、C2のそれぞれを囲むコリジョンT1、T2が重なっているか否かにより判定できる。コリジョンT1、T2が重なっている距離を貫通深度と呼ぶ。
【0042】
図5(a)の例では、貫通深度はA1で示される。貫通深度A1が0よりも大きい場合、キャラクタC1、C2は衝突している状態である。この場合、コリジョンの押出処理を実行することで貫通深度A1を0にすることができ、これにより、キャラクタC1、C2の衝突状態を解消できる。
図5(a)、(b)の例では、貫通深度A1分だけコリジョンT1を押し出することでキャラクタC1を移動させて表示することにより、キャラクタC1、C2の衝突状態を解消できる。
【0043】
従来、衝突している2つのコリジョンの押出処理は、以下のいずれかにより行われる。
1.2つのコリジョンのうち優先度の低い片方のコリジョンのみ衝突方向と反対に貫通深度分動かす。
2.2つのコリジョンともに貫通深度の1/2だけ互いに反対方向に動かす。
【0044】
1の場合、コリジョンを押し出した片方のキャラクタ(オブジェクト)のみが衝突方向と反対方向に押し出されて表示される。
図5(b)の例では、貫通深度A1分だけコリジョンT1が押し出され、コリジョンT2の押出量は0である。これにより、衝突によって片方のキャラクタC1のみが衝突方向と反対方向に押し出されて表示される。例えば、建物とプレイヤキャラクタとの衝突の場合、建物は押し出さず、プレイヤキャラクタのみを押し出すことが挙げられる。他の例としては、敵キャラクタとプレイヤキャラクタの衝突の場合、プレイヤキャラクタは押し出さず、敵キャラクタのみを押し出すことが挙げられる。更に他の例としては、キャラクタの重要度によって、敵キャラクタがボスであり、プレイヤキャラクタがボスよりも重要度が低い場合、敵キャラクタは押し出さず、プレイヤキャラクタのみを押し出すことが挙げられる。
【0045】
一方、2の場合、コリジョンを半分ずつ押し出すため、双方のキャラクタ(オブジェクト)が衝突方向と反対方向に半分ずつ押し出されて表示される。この場合、
図5(a)の例では、コリジョンT1、T2の押出量はいずれも貫通深度A1の1/2であり、キャラクタC1、C2が衝突方向と反対側に同一の押出距離A1/2だけ押し出される。
【0046】
具体的なコリジョンの押出処理の一例について、
図6を参照して説明する。
図6(a)~(f)は、コリジョンT1~T3を上から見た図である。コリジョン内のオブジェクトは省略している。
【0047】
コリジョンの押出処理を実行するには、貫通深度が最も深い点に、貫通方向を法線とする仮想平面を置き、この平面に対してコリジョンが侵入しなくなるようにコリジョンの押し出しを行う。
図6では2次元の仮想空間を表現しているため、仮想平面は仮想線として示される。
図6(a)~(d)は1の場合の押出処理、
図6(e)、(f)は2の場合の押出処理を示す。
図6(a)、(b)の例では、貫通深度が最も深い点に、貫通方向を法線とする仮想平面VP1を置く。片方のコリジョンを押し出す場合、
図6(b)に示すように、仮想平面VP1に対してコリジョンT1が侵入しなくなるまでコリジョンT1の押出処理を行う。
【0048】
図6(c)、(d)の例では、3つのコリジョンT1~T3が重なっている。例えばコリジョンT2、T3が建物等の固定されたオブジェクトのコリジョンであり、コリジョンT1が非固定のオブジェクトのコリジョンである場合、コリジョンT1、T2に対する仮想平面VP1、及びコリジョンT1、T3に対する仮想平面VP2の両方の仮想平面に対して侵入しなくなるまでコリジョンT1の押し出しを行う。
【0049】
図6(e)、(f)の例では、双方のコリジョンT1、T2を押し出す。この場合、仮想平面VP1を貫通深度の中間に設定し、双方のコリジョンT1、T2を貫通深度の半分ずつ押し出す。
【0050】
コリジョンT1、T2のいずれか一方のみを押し出す場合、コリジョンの押し出しの優先度を判定し、どちらのコリジョンを押し出すか、押出対象のコリジョンを判断するにとどまり、各コリジョンの押出割合の算出は行わない。押し出すと判断されたコリジョンの押出割合は100%であり固定値をとる。なお、コリジョンT1、T2の双方を押し出す場合、押出対象のコリジョンの判定及びコリジョンの押出割合の算出のいずれも行わない。双方のコリジョンの押出割合は50%であり固定値をとる。
【0051】
特に、衝突したコリジョンのいずれか一方のみを押し出す場合(1の場合)、ゲームの状況により優先度が変化するために、優先度に基づく押出対象のコリジョンの判定において衝突する2つのコリジョンの間で押出対象が交互に切り替わる場合がある。その結果、2つのコリジョンが押したり引いたりしながら振動し、不自然な挙動となり、興趣性の低下を招くおそれがある。
【0052】
双方のコリジョンT1、T2を貫通深度の半分ずつ押し出す場合(2の場合)、2つのコリジョン内のキャラクタ(オブジェクト)の強さ等の違いを衝突の結果として表現できず、一様な押出処理となり、キャラクタが密集して衝突が頻繁に発生したときの迫力に欠け、興趣性の低下を招くおそれがある。
【0053】
以上から、本実施形態に係るコリジョンの押出処理では、衝突時の自然なオブジェクトの動きによる興趣性の向上を図るために、重なった各コリジョンの押出割合を0%以上100%以下の間で無段階に設定できるようにする。例えば、
図7に示すように、重なったコリジョンT1、T2の押し出しに使用する仮想平面VP1の位置をコリジョンT1、T2に対応するキャラクタC1、C2(
図5参照)のパラメータによって変更する。
図7の例では、仮想平面VP1は、コリジョンT1、T2を4:1の割合で押し出す位置に置かれている。ただし、4:1の押出割合は、一例でありこれに限らない。
【0054】
このように、本実施形態に係るコリジョンの押出処理では、重なったコリジョンの片方だけを押し出す、又は双方のコリジョンを半分ずつ押し出すのではなく、双方のコリジョンの押出割合(押出距離)を各コリジョンのパラメータに応じて無段階で補正する。これにより、衝突したキャラクタを含むオブジェクト同士の動きをより自然に、かつゲーム性を高めるように描画できる。特に、キャラクタが密集する場面で衝突したキャラクタ同士に不自然な動作が生じ、ゲームの興趣性が低下することを防止できる。
【0055】
パラメータテーブル21に記憶されているパラメータは、ゲームの状況等に応じて動的に変えてもよい。つまり、本実施形態に係るコリジョンの押出処理では、動的に変わるパラメータに基づき、ゲームの状況に応じて重なったコリジョンの押出割合を無段階に変えることができる。
【0056】
なお、パラメータテーブル21に記憶されているパラメータは、一例でありこれに限らない。また、算出部17は、パラメータのすべてを使用して押出割合を算出してもよいし、パラメータテーブル21に記憶されているパラメータのうちから選択された1つ又は複数のパラメータを使用して押出割合を算出してもよい。
【0057】
パラメータの設定及び選択により、衝突時の双方のコリジョンの押出割合を制御できる。例えばコリジョン内のキャラクタの「重さ」のパラメータにより、相対的に軽いキャラクタのコリジョンの押出割合を大きくすることで、軽いキャラクタの押し出し量(押出距離)を重いキャラクタの押し出し量よりも大きくするように表示を制御できる。これにより、現実空間における物体の動きと同様に、衝突時のキャラクタの重さ(軽さ)をより分かり易く表現できる。ただし、同じパラメータに基づいて逆の結果になるように表示を制御してもよい。すなわち、重いキャラクタの押し出し量を軽いキャラクタの押し出し量よりも大きくするように表示を制御してもよい。
【0058】
例えばコリジョン内のキャラクタの「重要度」を示す地位等のパラメータにより、相対的に地位の低いキャラクタのコリジョンの押出割合を大きくすることで、地位の低いキャラクタの押し出し量を地位の高いキャラクタの押し出し量よりも大きくするように表示を制御できる。これにより、キャラクタの地位に応じたキャラクタの影響力の相違を表現できる。ただし、同じパラメータに基づいて逆の結果になるように表示を制御してもよい。すなわち、地位の高いキャラクタの押し出し量を地位の低いキャラクタの押し出し量よりも大きくするように表示を制御してもよい。
【0059】
例えばコリジョン内のキャラクタの「所属勢力」のパラメータにより、敵又は味方によって、敵キャラクタのコリジョンの押出割合を大きくすることで、敵の押し出し量を味方の押し出し量よりも大きくするように表示を制御できる。これにより、所属する勢力の士気や人数、戦況(優勢/劣勢)などに応じて押し出し量を変化させることができる。例えば、士気が高い、人数が多い、優勢である場合に押し出し量を小さくすることで、所属勢力の強さを表現できる。または、上記にかかわらず味方勢力の押し出し量を小さくすることで、プレイヤが優先して確認すべき味方オブジェクトの視認性を高められる。ただし、同じパラメータに基づいて逆の結果になるように表示を制御してもよい。すなわち、味方の押し出し量を敵の押し出し量よりも大きくするように表示を制御してもよい。
【0060】
例えばコリジョン内のオブジェクトの「種類」のパラメータにより、特定オブジェクト(例えば馬等の乗り物)よりも特定オブジェクト以外のオブジェクト(例えば人等のキャラクタ)のコリジョンの押出割合を大きくすることで、特定オブジェクトの押し出し量をそれ以外のオブジェクトの押し出し量よりも小さくするように表示を制御できる。これにより、衝突時に馬等の乗り物をなるべく衝突した場所から離れないように表示できる。ただし、同じパラメータに基づいて逆の結果になるように制御してもよい。すなわち、特定オブジェクトの押し出し量をそれ以外のオブジェクトの押し出し量よりも大きくするように表示を制御してもよい。
【0061】
また、キャラクタが所属するグループ(例えば部隊)の士気や人数などをパラメータとしてキャラクタが所属するグループの強さをコリジョンの押出の結果に反映させることができる。例えばキャラクタが所属するグループの士気が衝突相手のキャラクタが所属するグループの士気よりも高い場合、又はグループに所属する人数が衝突相手のキャラクタが所属するグループに所属する人数よりも多い場合、衝突相手のキャラクタの押出割合を相対的に大きくする。これにより、衝突相手のキャラクタが相対的に大きく押し出されるように表示を制御してもよい。ただし、同じパラメータに基づいて逆の結果になるように制御してもよい。
【0062】
キャラクタが装備している武器や防具のレベルをパラメータとしてコリジョンの押出処理の結果に反映させてもよい。例えばキャラクタが装備している武器のレベルが高い程、コリジョンの押出割合を小さくする。これにより、武器のレベルが低いキャラクタの押し出し量を武器のレベルが高いキャラクタの押し出し量よりも大きくするように表示を制御できる。これにより、衝突時に武器のレベルが低いキャラクタが受けるダメージが武器のレベルが高いキャラクタが受けるダメージよりも相対的に大きいことを表現できる。ただし、同じパラメータに基づいて逆の結果になるように制御してもよい。
【0063】
コリジョン内のキャラクタ(オブジェクト)と仮想カメラとの距離を管理し、仮想カメラからの距離に応じてそのキャラクタ(オブジェクト)のパラメータを動的に変更してもよい。この場合、押出処理では、仮想カメラとの距離のパラメータに基づき、例えば仮想カメラから遠い程コリジョンの押出割合を小さくしてもよい。ただし、同じパラメータに基づいて逆の結果になるように制御してもよい。これにより、仮想カメラからの距離に応じてコリジョン内のキャラクタ(オブジェクト)の押し出し量を決定することができる。
【0064】
コリジョンの地面からの高さに応じてそのコリジョン内のキャラクタ(オブジェクト)のパラメータを動的に変更してもよい。押出処理では、このパラメータに基づき地面に近いコリジョンの押出割合を相対的に大きくし、地面に近いコリジョン内のキャラクタの押し出し量を地面から遠いコリジョン内のキャラクタの押し出し量よりも相対的に大きくするように表示を制御できる。ただし、同じパラメータに基づいて逆の結果になるように制御してもよい。
【0065】
パラメータは、ゲーム中に動的に変更され得る。例えば、キャラクタが所属するグループの士気は、戦況に応じて変動するパラメータとして使用できる。例えば、ゲームマップの特定範囲において、敵キャラクタの人数が味方キャラクタの人数より多ければ敵グループの士気を示すパラメータが上昇するという使用方法が可能である。例えば、動作(速度/方向)に示すパラメータは、衝突時のキャラクタ(オブジェクト)の速度及び/又は向きに応じて変化する。よって、パラメータもゲーム中に動的に変更し、例えば、早い速度のキャラクタが相対的に押し出され易いように、押出割合を算出してもよい。逆に、遅い速度のキャラクタが相対的に押し出され易いように、押出割合を算出してもよい。また、後ろや横を向いているキャラクタが前を向いているキャラクタよりも押し出され易いように、押出割合を算出してもよい。逆に、前を向いているキャラクタが後ろや横を向いているキャラクタよりも押し出され易いように、押出割合を算出してもよい。
【0066】
押出処理では、パラメータテーブル21に設定された一部又は全部のパラメータを押出割合の算出に使用できる。例えば、パラメータテーブル21に設定されたパラメータ群からいずれか1つのパラメータ又は2つ以上のパラメータを適宜選択して組み合わせ、選択したパラメータに応じて押出割合を無段階で調整してもよい。これにより、選択したパラメータの特性(キャラクタ自身の士気、強さ等)により各コリジョンの押出割合を変えることができる。
【0067】
パラメータの組み合わせに応じてコリジョンの押出割合を調整する一例としては、使用するパラメータとして「キャラクタ種類」と「重さ」を組み合わせる場合が挙げられ、この場合の押出処理としては次のような例がある。
【0068】
ゲーム開始時、プレイヤキャラクタ(PC)とノンプレイヤキャラクタ(NPC)との衝突ではノンプレイヤキャラクタを100%押し出すこととする。このとき、プレイヤキャラクタの押出割合は0%、ノンプレイヤキャラクタの押出割合は100%である。「重さ」は重いほど押し出されにくいパラメータであると定義する。上記の場合、プレイヤキャラクタの重さのパラメータが「中」のとき、重さのパラメータが「中」又は「軽」のノンプレイヤキャラクタは100%押し出すことができる一方、重さが「重」のノンプレイヤキャラクタは80%しか押し出すことができないように押出割合を算出する。これにより、プレイヤキャラクタを操作するプレイヤに重たいキャラクタに接触した際の手ごたえを感じさせることができる。このように、本実施形態の押出処理では、1つのパラメータに応じてコリジョンの押出割合を調整するだけでなく、パラメータの組み合わせに応じてコリジョンの押出割合を調整し、ゲームに興趣性を持たせることができる。
【0069】
[ゲーム処理方法]
押出割合の算出処理は、コリジョン同士の重なり(衝突)を判定したときに実行される。以下では、本実施形態のゲーム処理方法について
図9を参照しながら説明する。
図9は、実施形態に係る押出割合の算出処理を含むゲーム処理方法を示すフローチャートである。
図9のゲーム処理方法はゲーム機3によって実行される。以下では対戦ゲームを例に挙げて説明するが、これに限らない。
【0070】
ゲームが開始されると、ステップS1において、ゲーム実行処理部14が、プレイヤが操作するプレイヤキャラクタ、味方キャラクタ及び敵キャラクタを含む複数のキャラクタの動作を制御し、対戦ゲームを実行する。ゲーム中、ゲーム実行処理部14は、キャラクタの動作に限らず、その他のオブジェクトの動作を制御する。コリジョン制御部15は、各キャラクタを含むオブジェクトに応じて各コリジョンの位置を管理する。
【0071】
ステップS3において、重なり判定部16は、オブジェクト毎の各コリジョンの位置に応じてコリジョン同士に重なりが生じているか、すなわち衝突が生じているかを判定する。ステップS5において、コリジョン同士が重なったと判定された場合、ステップS7~S11に示す押出処理が実行された後、ステップS13に進む。ステップS5において、コリジョン同士に重なりは生じていないと判定された場合、ステップS7~S11の押出処理を実行せずにステップS13に進む。
【0072】
(押出処理)
押出処理では、ステップS7において、算出部17は、重なったそれぞれのコリジョンの識別情報であるコリジョンID及び/又はそのコリジョンに対応する(コリジョンにより覆われた)オブジェクトの識別情報であるオブジェクトID(キャラクタID)を取得する。オブジェクトID及びコリジョンのIDは、オブジェクト毎に管理され、記憶部12のパラメータテーブル21(
図8参照)に記憶されている。そして、算出部17は、取得したコリジョンID及び/又はオブジェクトIDに対応して記憶されているパラメータ群から一部又は全部のパラメータを取得(選択)する。
【0073】
次に、ステップS9において、算出部17は、貫通深度を算出し、重なった各コリジョンのパラメータに基づき、貫通深度に対する各コリジョンの押出割合を算出する。例えば、算出部17は、取得したパラメータを数値化し、取得したパラメータの数値の合計値を比較してその大小関係から各コリジョンの押出割合を算出してもよい。その際、パラメータの数値の合計値が高い方が押し出され難いように押出割合を算出してもよいし、パラメータの数値の合計値が高い方が押し出され易いように押出割合を算出してもよい。
【0074】
次に、ステップS11において、算出部17は、押出割合に応じて各コリジョンの押出距離を調整し、表示制御部18は、各コリジョンの押出距離分だけ各コリジョンを押し出す。これにより、各コリジョン内のオブジェクトが押出距離分だけ衝突方向と反対側に押し出されるように表示を制御できる。
【0075】
次に、ステップS13において、ゲーム実行処理部14は、ゲームが終了したかを判定し、ゲームが終了したと判定された場合、本処理を終了する。一方、ゲームが終了していないと判定された場合、ステップS15に進み、コリジョン制御部15は、各キャラクタ等の動作、ゲームの進行状況、プレイヤの操作等に応じたパラメータの変更があるかを判定する。
【0076】
コリジョン制御部15は、パラメータの変更があると判定した場合、ステップS17において、パラメータテーブル21の、変更すると判定したパラメータを変更し、記憶部12に記憶し、ステップS3に戻り、次のコリジョンの重なりを判定する。一方、コリジョン制御部15は、パラメータの変更がないと判定した場合、ステップS17をスキップし、そのままステップS3に戻り、次のコリジョンの重なりを判定する。このようにしてゲームが終了するまで、ゲームの進行状況に応じてコリジョンの重なり判定及び押出処理が行われる。
【0077】
以上に説明したように、本実施形態のコリジョンの押出処理では、重なったと判定された各コリジョンの押出割合をパラメータに応じて無段階に設定できる。例えば、
図7に一例を示すように、重なったコリジョンT1、T2の押し出しに使用する仮想平面VP1の位置、すなわち押出割合をコリジョンT1、T2に対応するパラメータによって変更することができる。
【0078】
このように、本実施形態のコリジョンの押出処理では、重なったコリジョンの片方だけを押し出す、又は双方のコリジョンを同じ量だけ押し出すのではなく、双方のコリジョンの押出割合(押出距離)をパラメータに応じて無段階で補正する。これにより、重なったコリジョン内のオブジェクトの押出距離を無段階で制御でき、オブジェクトの動きをより自然に描画できる。特に、キャラクタが密集する場面で衝突したキャラクタ同士が衝突を解消するために行う動作を自然な動作に改善できるため、これによりゲームの興趣性が低下することを防止できる。
【0079】
[変形例]
以上に説明したコリジョンの押出処理は、非固定のオブジェクト同士の衝突だけでなく、固定のオブジェクトと非固定のオブジェクトとの衝突にも適用できる。これにより、オブジェクトの内部にめり込むことができる柔らかいオブジェクトの表示も制御できる。柔らかいオブジェクトの一例としては、植え込みや木、柔らかいボール等が挙げられる。
【0080】
実施形態の変形例に係る押出処理について
図10を参照して説明する。
図10は、実施形態の変形例に係る押出処理を説明する図である。
図10に示すように、パラメータテーブル21には、オブジェクトの固定又は非固定を示すパラメータが設定されている。通常、
図10(a)に示すように、パラメータが固定のオブジェクトのコリジョンT2とパラメータが非固定のオブジェクトのコリジョンT1とが重なった場合、コリジョンT1の押出割合は100%、コリジョンT2の押出割合は0%である。つまり、
図10(a)に示す貫通深度A3に対してコリジョンT1の押出距離はA3になり、コリジョンT2の押出距離は0になり、コリジョンT2は固定されている状態を保つ。
【0081】
パラメータテーブル21には、オブジェクトの柔らかさを示すパラメータが設定されている。そこで、変形例に係る押出処理では、柔らかさのパラメータと固定/非固定のパラメータとの組み合わせに基づき、固定のオブジェクトに対する非固定のオブジェクトの押出距離を柔らかさのパラメータに応じて変化させる。例えば、
図10(b)、(c)の例では、
図10(b)、(c)に示すコリジョンT2に覆われた固定のオブジェクトは同じ柔らかさの同一オブジェクトである。例えば、コリジョンT2に覆われたオブジェクトがクッション等のように弾力のある物であってもよい。
図10(c)では、コリジョンT1内のキャラクタが
図10(b)の場合よりもコリジョンT2内のオブジェクトに深くもたれかかったため、コリジョンT1がコリジョンT2にめり込む量(貫通深度)が
図10(b)の場合よりも大きい。
図10(b)、(c)のいずれもコリジョンT2が固定オブジェクトなのでコリジョンT1が押し出される。この場合、
図10(c)ではコリジョンT1のめり込む量が大きいため、このめり込む量に応じて
図10(b)の場合よりもコリジョンT1の押出割合を大きくすることができる。このように柔らかいオブジェクトに関しては、貫通深度の大きさに応じて押出割合を変更させることで、衝突相手のオブジェクトの深いところから徐々に押し出される見た目になり、柔らかさや弾力を表現できる。
【0082】
つまり、押し出し後もある程度の時間は衝突相手のオブジェクトにめり込んでいるため、次のフレームでも再度押出処理が行われる。このため、衝突相手のコリジョンからゆっくりと押し出されるような表示制御が可能となる。これにより、衝突相手のコリジョンにめり込むことができるが貫通はできない柔らかいオブジェクトを表現できる。このようにして描画の自由度を高めることができる。
【0083】
なお、パラメータには、他のオブジェクトをすり抜けられる(貫通できる)オブジェクトであるかを示すパラメータが含まれてもよい。すり抜けられるオブジェクトと判定された場合は衝突が生じない(コリジョンの重なり判定を行わない)ため、本実施形態の押出処理も適用されない。
【0084】
以上、ゲームプログラム、ゲーム処理方法及び情報処理装置を上記実施形態により説明したが、本開示に係るゲームプログラム、ゲーム処理方法及び情報処理装置は上記実施形態に限定されるものではなく、本実施形態の範囲内で種々の変形及び改良が可能である。また、上記実施形態及び変形例が複数存在する場合、矛盾しない範囲で組み合わせることができる。本開示に係るゲームプログラム、ゲーム処理方法及び情報処理装置は、3Dのゲーム及び2Dのゲームで使用できる。
【符号の説明】
【0085】
1 ゲームシステム
3 ゲーム機
11 制御部
12 記憶部
13 通信部
14 ゲーム実行処理部
15 コリジョン制御部
16 重なり判定部
17 算出部
18 表示制御部
21 パラメータテーブル