(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2026-04-28
(45)【発行日】2026-05-12
(54)【発明の名称】情報処理プログラム、情報処理システム、情報処理装置、および、情報処理方法
(51)【国際特許分類】
A63F 13/60 20140101AFI20260430BHJP
A63F 13/55 20140101ALI20260430BHJP
A63F 13/52 20140101ALI20260430BHJP
G06T 15/04 20110101ALI20260430BHJP
G06T 17/10 20060101ALI20260430BHJP
G06T 13/40 20110101ALI20260430BHJP
【FI】
A63F13/60
A63F13/55
A63F13/52
G06T15/04
G06T17/10
G06T13/40
(21)【出願番号】P 2024011593
(22)【出願日】2024-01-30
【審査請求日】2025-05-20
(73)【特許権者】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】100158780
【氏名又は名称】寺本 亮
(74)【代理人】
【識別番号】100121359
【氏名又は名称】小沢 昌弘
(74)【代理人】
【識別番号】100130269
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】寺尾 圭一郎
(72)【発明者】
【氏名】舟橋 英志
【審査官】狩野 寛子
(56)【参考文献】
【文献】特開2004-062666(JP,A)
【文献】特開2001-006000(JP,A)
【文献】特開2008-033521(JP,A)
【文献】特開2013-000226(JP,A)
【文献】特表2022-508162(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
A63F 9/24、13/00-13/98
G06T 1/00、11/00-19/20
(57)【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、前記コンピュータを、
仮想空間内において、キャラクタオブジェクトに関するボクセルデータに基づいて当該キャラクタオブジェクトのメッシュを生成するメッシュ生成手段と、
第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御するモーション制御手段と、
前記キャラクタオブジェクトに対してイベントが発生した場合、当該キャラクタオブジェクトに関する前記ボクセルデータを更新するボクセルデータ更新手段と、
前記キャラクタオブジェクトの前記メッシュを描画した画像を含む前記仮想空間の画像を、表示装置に出力するために生成する画像生成手段として機能させ、
前記メッシュ生成手段は、前記ボクセルデータが更新された場合、更新後の前記ボクセルデータに基づいて前記キャラクタオブジェクトの前記メッシュを生成し、
前記モーション制御手段は、前記イベントが発生した場合、前記キャラクタオブジェクトの少なくとも一部についての、前記仮想空間を基準とした傾きを変化させた状態で、前記第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御する、情報処理プログラム。
【請求項2】
前記情報処理プログラムは、
前記ボクセルデータが更新された場合、更新後の前記ボクセルデータに基づいて、前記キャラクタオブジェクトのうちで当該ボクセルデータによって生成される部分を少なくとも含む部分に関する重心を算出する重心算出手段として前記コンピュータをさらに機能させ、
前記モーション制御手段は、前記イベントが発生する前後における前記重心の変化に基づいて、前記キャラクタオブジェクトの前記少なくとも一部の傾きを変化させる向きを決定する、請求項1に記載の情報処理プログラム。
【請求項3】
前記キャラクタオブジェクトの前記少なくとも一部を通り、かつ、前記仮想空間における重力方向に平行な直線を基準軸としたとき、前記モーション制御手段は、前記イベントが発生した場合、当該基準軸に対して前記ボクセルデータの更新後における前記キャラクタオブジェクトに関する重心が存在する側の部分が重力方向側に近づく向きへ、前記キャラクタオブジェクトに設定される基準位置を中心として前記キャラクタオブジェクトの前記少なくとも一部を回転させるように、前記キャラクタオブジェクトの傾きを変化させる、請求項2に記載の情報処理プログラム。
【請求項4】
前記キャラクタオブジェクトの前記少なくとも一部を通り、かつ、前記仮想空間における重力方向に平行な直線を基準軸としたとき、前記モーション制御手段は、前記イベントが発生した場合、前記ボクセルデータの更新後における当該キャラクタオブジェクトに関する重心が当該基準軸に近づく方向へ、前記キャラクタオブジェクトに設定される基準位置を中心として当該キャラクタオブジェクトの前記少なくとも一部を回転させるように、前記キャラクタオブジェクトの傾きを変化させる、請求項2に記載の情報処理プログラム。
【請求項5】
前記基準軸は、前記基準位置とは異なる位置を通り、かつ、前記仮想空間における重力方向に平行な直線である、請求項
3に記載の情報処理プログラム。
【請求項6】
前記基準軸は、前記ボクセルデータが更新される前の前記キャラクタオブジェクトに関する重心を通り、かつ、前記仮想空間における重力方向に平行な直線である、請求項
3に記載の情報処理プログラム。
【請求項7】
前記キャラクタオブジェクトは、前記キャラクタオブジェクトに設定されるボーンに関連付けられる部分を有しており、
前記モーション制御手段は、前記ボーンを前記第1モーションデータに従って動かすことで、前記キャラクタオブジェクトに動作を行わせる、請求項
3に記載の情報処理プログラム。
【請求項8】
前記キャラクタオブジェクトは、前記ボクセルデータに基づいて形状が規定される第1部分と、当該第1部分とは異なる部分であって、前記ボーンに関連付けられる第2部分とを有しており、
前記モーション制御手段は、前記イベントが発生した場合、前記キャラクタオブジェクトの前記少なくとも一部として、前記第1部分と、前記第2部分の一部との傾きを変化させる、請求項7に記載の情報処理プログラム。
【請求項9】
前記基準位置は、前記ボーン同士を接続するジョイントのうち、前記キャラクタオブジェクトの腰部のジョイントの位置である、請求項
7に記載の情報処理プログラム。
【請求項10】
前記第1モーションデータは、前記キャラクタオブジェクトの歩行動作を示す、請求項1から請求項9のいずれか1項に記載の情報処理プログラム。
【請求項11】
前記モーション制御手段は、前記キャラクタオブジェクトを傾ける角度に上限を設ける、請求項1から請求項
9のいずれか1項に記載の情報処理プログラム。
【請求項12】
前記ボクセルデータ更新手段は、前記イベントが発生した場合、前記キャラクタオブジェクトの体積を減少させるように前記ボクセルデータを更新する、請求項1から請求項
9のいずれか1項に記載の情報処理プログラム。
【請求項13】
前記ボクセルデータ更新手段は、前記イベントが発生した場合、前記キャラクタオブジェクトの体積を増加させるように前記ボクセルデータを更新する、請求項1から請求項
9のいずれか1項に記載の情報処理プログラム。
【請求項14】
前記モーション制御手段は、
前記第1モーションデータとは異なる第2モーションデータを用いて前記キャラクタオブジェクトの動作をさらに制御し、
前記イベントが発生した場合において、前記第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御するときの当該キャラクタオブジェクトの傾きと、前記第2モーションデータを用いて当該キャラクタオブジェクトの動作を制御するときの当該キャラクタオブジェクトの傾きとを異なる値とする、請求項1から請求項
9のいずれか1項に記載の情報処理プログラム。
【請求項15】
前記モーション制御手段は、前記イベントが発生した場合において、前記キャラクタオブジェクトの傾きを当該イベントの発生前と同じ傾きとして、前記第2モーションデータを用いて前記キャラクタオブジェクトの動作を制御する、請求項14に記載の情報処理プログラム。
【請求項16】
前記キャラクタオブジェクトは、敵キャラクタオブジェクトであり、前記ボクセルデータに基づいて形状が規定されるボクセルオブジェクト部分の内側にコアを有しており、
前記イベントは、前記敵キャラクタオブジェクトが攻撃を受けることであり、
前記コアが攻撃を受けた場合、前記敵キャラクタオブジェクトの全体を消滅させるキャラクタ消滅手段として前記コンピュータをさらに機能させる、請求項1から請求項
9のいずれか1項に記載の情報処理プログラム。
【請求項17】
仮想空間内において、キャラクタオブジェクトに関するボクセルデータに基づいて当該キャラクタオブジェクトのメッシュを生成するメッシュ生成手段と、
第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御するモーション制御手段と、
前記キャラクタオブジェクトに対してイベントが発生した場合、当該キャラクタオブジェクトに関する前記ボクセルデータを更新するボクセルデータ更新手段と、
前記キャラクタオブジェクトの前記メッシュを描画した画像を含む前記仮想空間の画像を、表示装置に出力するために生成する画像生成手段とを備え、
前記メッシュ生成手段は、前記ボクセルデータが更新された場合、更新後の前記ボクセルデータに基づいて前記キャラクタオブジェクトの前記メッシュを生成し、
前記モーション制御手段は、前記イベントが発生した場合、前記キャラクタオブジェクトの少なくとも一部についての、前記仮想空間を基準とした傾きを変化させた状態で、前記第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御する、情報処理システム。
【請求項18】
仮想空間内において、キャラクタオブジェクトに関するボクセルデータに基づいて当該キャラクタオブジェクトのメッシュを生成するメッシュ生成手段と、
第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御するモーション制御手段と、
前記キャラクタオブジェクトに対してイベントが発生した場合、当該キャラクタオブジェクトに関する前記ボクセルデータを更新するボクセルデータ更新手段と、
前記キャラクタオブジェクトの前記メッシュを描画した画像を含む前記仮想空間の画像を、表示装置に出力するために生成する画像生成手段とを備え、
前記メッシュ生成手段は、前記ボクセルデータが更新された場合、更新後の前記ボクセルデータに基づいて前記キャラクタオブジェクトの前記メッシュを生成し、
前記モーション制御手段は、前記イベントが発生した場合、前記キャラクタオブジェクトの少なくとも一部についての、前記仮想空間を基準とした傾きを変化させた状態で、前記第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御する、情報処理装置。
【請求項19】
情報処理システムによって実行される情報処理方法であって、
仮想空間内において、キャラクタオブジェクトに関するボクセルデータに基づいて当該キャラクタオブジェクトのメッシュを生成するメッシュ生成ステップと、
第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御するモーション制御ステップと、
前記キャラクタオブジェクトに対してイベントが発生した場合、当該キャラクタオブジェクトに関する前記ボクセルデータを更新するボクセルデータ更新ステップと、
前記キャラクタオブジェクトの前記メッシュを描画した画像を含む前記仮想空間の画像を、表示装置に出力するために生成する画像生成ステップとを備え、
前記メッシュ生成ステップにおいては、前記ボクセルデータが更新された場合、更新後の前記ボクセルデータに基づいて前記キャラクタオブジェクトの前記メッシュを生成し、
前記モーション制御ステップにおいては、前記イベントが発生した場合、前記キャラクタオブジェクトの少なくとも一部についての、前記仮想空間を基準とした傾きを変化させた状態で、前記第1モーションデータを用いて前記キャラクタオブジェクトの動作を制御する、情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ボクセルデータを用いて生成されるオブジェクトの動作を制御するための情報処理プログラム、情報処理システム、情報処理装置、および、情報処理方法に関する。
【背景技術】
【0002】
従来、仮想空間に配置されるオブジェクトの一部が分断された場合に、分断された状態に応じて異なるモーションデータを用いてオブジェクトの動作を制御する技術がある(例えば、特許文献1の段落0125-0130参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記の技術においては、オブジェクトの分断状態毎にモーションデータを用意するため、用意すべきモーションデータが多くなるおそれがあった。
【0005】
それ故、本発明の目的は、少ないモーションデータによってオブジェクトに自然な動作を行わせることができる情報処理プログラム、情報処理システム、情報処理装置、および、情報処理方法を提供することである。
【課題を解決するための手段】
【0006】
上記の課題を解決すべく、本発明は、以下の(1)~(16)の構成を採用した。
【0007】
(1)
本発明の一例は、情報処理装置のコンピュータにおいて実行される情報処理プログラムである。情報処理プログラムは、コンピュータを、メッシュ生成手段と、モーション制御手段と、ボクセルデータ更新手段と、画像生成手段として機能させる。メッシュ生成手段は、仮想空間内において、キャラクタオブジェクトに関するボクセルデータに基づいて当該キャラクタオブジェクトのメッシュを生成する。モーション制御手段は、第1モーションデータを用いてキャラクタオブジェクトの動作を制御する。ボクセルデータ更新手段は、キャラクタオブジェクトに対してイベントが発生した場合、当該キャラクタオブジェクトに関するボクセルデータを更新する。画像生成手段は、キャラクタオブジェクトのメッシュを描画した画像を含む仮想空間の画像を、表示装置に出力するために生成する。メッシュ生成手段は、ボクセルデータが更新された場合、更新後のボクセルデータに基づいてキャラクタオブジェクトのメッシュを生成する。モーション制御手段は、イベントが発生した場合、キャラクタオブジェクトの少なくとも一部についての、仮想空間を基準とした傾きを変化させた状態で、第1モーションデータを用いてキャラクタオブジェクトの動作を制御する。
【0008】
上記(1)の構成によれば、キャラクタオブジェクトの傾きを変化させた状態でキャラクタオブジェクトの動作を制御することによって、キャラクタオブジェクトに自然な動作を行わせることができる。また、傾きを変化させる状態と変化させない状態とで同じモーションデータを用いることによって、モーションデータのデータ量を低減することができる。したがって、上記(1)の構成によれば、少ないモーションデータによってキャラクタオブジェクトに自然な動作を行わせることができる。
【0009】
(2)
情報処理プログラムは、重心算出手段としてコンピュータをさらに機能させてもよい。重心算出手段は、ボクセルデータが更新された場合、更新後のボクセルデータに基づいて、キャラクタオブジェクトのうちで当該ボクセルデータによって生成される部分を少なくとも含む部分に関する重心を算出する。モーション制御手段は、イベントが発生する前後における重心の変化に基づいて、キャラクタオブジェクトの少なくとも一部の傾きを変化させる向きを決定する。
【0010】
上記(2)の構成によれば、重心の変化に応じた自然な傾きでキャラクタオブジェクトに動作を行わせることができる。
【0011】
(3)
キャラクタオブジェクトの少なくとも一部を通り、かつ、仮想空間における重力方向に平行な直線を基準軸としたとき、モーション制御手段は、イベントが発生した場合、当該基準軸に対してボクセルデータの更新後におけるキャラクタオブジェクトに関する重心が存在する側の部分が重力方向側に近づく向きへ、キャラクタオブジェクトに設定される基準位置を中心としてキャラクタオブジェクトの少なくとも一部を回転させるように、キャラクタオブジェクトの傾きを変化させてもよい。
【0012】
上記(3)の構成によれば、キャラクタオブジェクトに自然な傾きをとらせることができる。
【0013】
(4)
キャラクタオブジェクトの少なくとも一部を通り、かつ、仮想空間における重力方向に平行な直線を基準軸としたとき、モーション制御手段は、イベントが発生した場合、ボクセルデータの更新後における当該キャラクタオブジェクトに関する重心が当該基準軸に近づく方向へ、キャラクタオブジェクトに設定される基準位置を中心として当該キャラクタオブジェクトの少なくとも一部を回転させるように、キャラクタオブジェクトの傾きを変化させてもよい。
【0014】
上記(4)の構成によれば、キャラクタオブジェクトに自然な傾きをとらせることができる。
【0015】
(5)
基準軸は、基準位置とは異なる位置を通り、かつ、仮想空間における重力方向に平行な直線であってもよい。
【0016】
上記(5)の構成によれば、基準軸がキャラクタオブジェクトの偏った位置を通る場合であっても、キャラクタオブジェクトの傾く動作が自然なものになるように基準位置を設定することができる。
【0017】
(6)
基準軸は、ボクセルデータが更新される前のキャラクタオブジェクトに関する重心を通り、かつ、仮想空間における重力方向に平行な直線であってもよい。
【0018】
上記(6)の構成によれば、キャラクタオブジェクトの傾く動作を自然なものにすることができる。
【0019】
(7)
キャラクタオブジェクトは、キャラクタオブジェクトに設定されるボーンに関連付けられる部分を有してもよい。モーション制御手段は、ボーンを第1モーションデータに従って動かすことで、キャラクタオブジェクトに動作を行わせてもよい。
【0020】
上記(7)の構成によれば、ボーンおよびモーションデータを用いることによってキャラクタオブジェクトに自由に動作を行わせることができる。
【0021】
(8)
キャラクタオブジェクトは、ボクセルデータに基づいて形状が規定される第1部分と、当該第1部分とは異なる部分であって、ボーンに関連付けられる第2部分とを有してもよい。モーション制御手段は、イベントが発生した場合、キャラクタオブジェクトの少なくとも一部として、第1部分と、第2部分の一部との傾きを変化させてもよい。
【0022】
上記(8)の構成によれば、キャラクタオブジェクトが傾いたときの体勢をより自然なものにすることができる。
【0023】
(9)
基準位置は、ボーン同士を接続するジョイントのうち、キャラクタオブジェクトの腰部のジョイントの位置であってもよい。
【0024】
上記(9)の構成によれば、キャラクタオブジェクトが傾く動作を自然なものとすることができる。
【0025】
(10)
第1モーションデータは、キャラクタオブジェクトの歩行動作を示すものであってもよい。
【0026】
上記(10)の構成によれば、キャラクタオブジェクトに自然な歩行動作を行わせることができる。
【0027】
(11)
モーション制御手段は、キャラクタオブジェクトを傾ける角度に上限を設けてもよい。
【0028】
上記(11)の構成によれば、傾きが大きすぎることによってキャラクタオブジェクトの動作が不自然になる可能性を低減することができる。
【0029】
(12)
ボクセルデータ更新手段は、イベントが発生した場合、キャラクタオブジェクトの体積を減少させるようにボクセルデータを更新してもよい。
【0030】
上記(12)の構成によれば、キャラクタオブジェクトの体積が減少した場合に自然な傾きとなる状態でキャラクタオブジェクトに動作を行わせることができる。
【0031】
(13)
ボクセルデータ更新手段は、イベントが発生した場合、キャラクタオブジェクトの体積を増加させるようにボクセルデータを更新してもよい。
【0032】
上記(13)の構成によれば、キャラクタオブジェクトの体積が増加した場合に自然な傾きとなる状態でキャラクタオブジェクトに動作を行わせることができる。
【0033】
(14)
モーション制御手段は、第1モーションデータとは異なる第2モーションデータを用いてキャラクタオブジェクトの動作をさらに制御してもよい。モーション制御手段は、イベントが発生した場合において、第1モーションデータを用いてキャラクタオブジェクトの動作を制御するときの当該キャラクタオブジェクトの傾きと、第2モーションデータを用いて当該キャラクタオブジェクトの動作を制御するときの当該キャラクタオブジェクトの傾きとを異なる値としてもよい。
【0034】
上記(14)の構成によれば、特定の動作に関してキャラクタオブジェクトが傾くことで不自然な動作が行われる可能性を低減することができる。
【0035】
(15)
モーション制御手段は、イベントが発生した場合において、キャラクタオブジェクトの傾きを当該イベントの発生前と同じ傾きとして、第2モーションデータを用いてキャラクタオブジェクトの動作を制御してもよい。
【0036】
上記(15)の構成によれば、キャラクタオブジェクトが傾くことで不自然な攻撃動作が行われる可能性を低減することができる。
【0037】
(16)
キャラクタオブジェクトは、敵キャラクタオブジェクトであり、ボクセルデータに基づいて形状が規定されるボクセルオブジェクト部分の内側にコアを有してもよい。イベントは、敵キャラクタオブジェクトが攻撃を受けることであってもよい。
情報処理プログラムは、コアが攻撃を受けた場合、敵キャラクタオブジェクトの全体を消滅させるキャラクタ消滅手段としてコンピュータをさらに機能させてもよい。
【0038】
上記(16)の構成によれば、敵キャラクタオブジェクトの攻略に戦略性を持たせることができ、ゲームの興趣性を向上することができる。
【0039】
なお、本発明の別の一例は、上記(1)~(16)における各手段の全部または一部を備える情報処理装置(例えば、端末装置またはサーバ)または情報処理システムであってもよい。また、本発明の別の一例は、上記(1)~(16)の各処理を情報処理システムが実行する情報処理方法(具体的には、ゲーム処理方法)であってもよい。
【発明の効果】
【0040】
上記情報処理プログラム、情報処理システム、情報処理装置、および、情報処理方法によれば、少ないモーションデータによってオブジェクトに自然な動作を行わせることができる。
【図面の簡単な説明】
【0041】
【
図1】本体装置に左コントローラおよび右コントローラを装着した状態の一例を示す図
【
図2】本体装置から左コントローラおよび右コントローラをそれぞれ外した状態の一例を示す図
【
図7】本体装置と左コントローラおよび右コントローラとの内部構成の一例を示すブロック図
【
図8】ボクセルオブジェクトである地形オブジェクトの一例を示す図
【
図9】
図8に示す地形オブジェクトの一部が削除される前後の様子の一例を示す図
【
図10】
図8に示す地形オブジェクトの一部が削除される前後の様子の一例を示す図
【
図12】マテリアルの性質を示す性質情報の一例を示す図
【
図13】マテリアルのテクスチャを示すテクスチャ情報の一例を示す図
【
図15】地形オブジェクトを含むゲーム画像の一例を示す図
【
図16】主ボクセルオブジェクトと副ボクセルオブジェクトとの一例を示す図
【
図19】
図17に示す敵キャラクタのボクセル部分の一部が消去された状態の一例を示す図
【
図21】
図17に示す敵キャラクタのボクセル部分の体積が増加された状態の一例を示す図
【
図22】敵キャラクタのボクセル部分を傾ける変化の前後における状態の一例を示す図
【
図23】敵キャラクタのボクセル部分を傾ける変化の前後における状態の他の一例を示す図
【
図24】本実施形態の変形例における、敵キャラクタのボクセル部分を傾ける変化の前後における状態の一例を示す図
【
図25】歩行動作と攻撃動作を行う敵キャラクタの様子の一例を示す図
【
図26】ゲームシステムにおける情報処理に用いられる各種データの一例を示す図
【
図27】ゲームシステムによって実行されるゲーム処理の流れの一例を示すフローチャート
【
図28】
図27に示すステップS7の敵キャラクタ処理の詳細な流れの一例を示すサブフローチャート
【発明を実施するための形態】
【0042】
[1.ゲームシステムの構成]
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(
図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
【0043】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0044】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0045】
図3は、本体装置2の一例を示す六面図である。
図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
【0046】
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
【0047】
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
【0048】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
【0049】
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、
図6に示すスピーカ88)を備えている。
図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
【0050】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
【0051】
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
【0052】
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
【0053】
図4は、左コントローラ3の一例を示す六面図である。
図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、
図1および
図4に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0054】
左コントローラ3は、アナログスティック32を備える。
図4に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
【0055】
左コントローラ3は、各種操作ボタンを備える。左コントローラ3は、ハウジング31の主面上に4つの操作ボタン33~36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および左方向ボタン36)を備える。さらに、左コントローラ3は、録画ボタン37および-(マイナス)ボタン47を備える。左コントローラ3は、ハウジング31の側面の左上に第1Lボタン38およびZLボタン39を備える。また、左コントローラ3は、ハウジング31の側面の、本体装置2に装着される際に装着される側の面に第2Lボタン43および第2Rボタン44を備える。これらの操作ボタンは、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
【0056】
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
【0057】
図5は、右コントローラ4の一例を示す六面図である。
図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0058】
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施形態においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ4は、左コントローラ3と同様、ハウジング51の主面上に4つの操作ボタン53~56(具体的には、Aボタン53、Bボタン54、Xボタン55、およびYボタン56)を備える。さらに、右コントローラ4は、+(プラス)ボタン57およびホームボタン58を備える。また、右コントローラ4は、ハウジング51の側面の右上に第1Rボタン60およびZRボタン61を備える。また、右コントローラ4は、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
【0059】
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
【0060】
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、
図3に示す構成の他、
図6に示す各構成要素81~91、97、および98を備える。これらの構成要素81~91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
【0061】
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0062】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0063】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
【0064】
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0065】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【0066】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0067】
プロセッサ81は、上述の左側端子17、右側端子21、および下側端子27に接続される。プロセッサ81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、プロセッサ81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、プロセッサ81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0068】
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
【0069】
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0070】
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
【0071】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
【0072】
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
【0073】
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、
図6で示しているため
図7では省略している。
【0074】
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。
図7に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
【0075】
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
【0076】
左コントローラ3は、各ボタン103(具体的には、ボタン33~39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(
図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
【0077】
通信制御部101は、各入力部(具体的には、各ボタン103、および、アナログスティック32)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【0078】
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。
【0079】
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
【0080】
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
【0081】
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、および、アナログスティック52を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
【0082】
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
【0083】
[2.ゲームシステムにおける処理の概要]
次に、
図8~
図25を参照して、ゲームシステム1において実行される処理の概要について説明する。本実施形態においては、ゲームシステム1は、3次元の仮想空間であるゲーム空間に地形オブジェクトやキャラクタ(例えば、プレイヤによって操作されるプレイヤキャラクタ)が配置されたゲーム画像を生成し、表示装置に表示させる。なお、本実施形態において、ゲーム画像が表示される表示装置は、上述のディスプレイ12であってもよいし、据置型モニタであってもよい。
【0084】
[2-1.ボクセル]
本実施形態では、ゲーム空間におけるいくつかのオブジェクトについては、ボクセルデータによって形状が規定される。ここで、ボクセルとは、ゲーム空間に格子状に並べられた直方体状(より具体的には、立方体状)の領域であり、ボクセルデータとは各ボクセルに設定されたデータである。以下では、ボクセルデータによって形状が規定されるオブジェクトを、「ボクセルオブジェクト」と呼ぶ。本実施形態においては、ゲームシステム1は、ゲーム空間内に設定される複数のボクセルについてそれぞれ、ボクセルオブジェクトをゲーム空間内において生成するためのデータとして、ボクセルデータを記憶する。
【0085】
図8は、ボクセルオブジェクトである地形オブジェクトの一例を示す図である。
図8に示すように、本実施形態においては、地面等の地形を表す地形オブジェクトは、ボクセルデータによって形状が規定される(つまり、ボクセルオブジェクトである)。
図8に示す各立方体は、地形オブジェクトを示す。なお、
図8においては、地形オブジェクトの辺となる部分を太線で示しているが、この太線は図面を見やすくする目的で付したものであり、実際には地形オブジェクトの辺が太く表示される必要はない。
【0086】
また、
図8に示す地形オブジェクトは、例えば、「ボクセルに設定されるボクセルデータに含まれるパラメータが所定値より大きい場合は当該ボクセルの位置に立方体を配置し、所定値以下の場合は当該ボクセルの位置に何も配置しない」というルールで生成されたものである。
図8に示す地形オブジェクトは、ボクセルとボクセルオブジェクトとの関係をわかりやすく例示する目的で示されるものである。本実施形態においては、実際には、例えば後述する
図15に示す地形オブジェクトのように、ボクセルの1辺の長さと比べて複雑な形状となるようなルールで(ボクセルデータに基づいて)ボクセルオブジェクトが生成される。なお、ボクセルデータに基づいてボクセルオブジェクトの形状を決定するルールは任意である。他の実施形態においては、ゲームシステム1は、オブジェクトデータに基づいて、
図8に示すようなボクセルオブジェクトを生成してもよいし、
図15に示すようなボクセルオブジェクトを生成してもよい。
【0087】
ボクセルオブジェクトについては、各ボクセルのボクセルデータを変更することで、形状を変化させることができる。
図9および
図10は、
図8に示す地形オブジェクトの一部が削除される前後の様子の一例を示す図である。すなわち、
図9に示す地形オブジェクトのうちの斜線部分が破壊される場合、地形オブジェクトは
図10に示すような形状に変化する。このとき、ゲームシステム1は、上記斜線部分のボクセルについて、地形オブジェクトが存在しないことを示すように、後述のボクセルデータを書き換えることで、地形オブジェクトを容易に消去することができる。なお、ゲームシステム1は、地形オブジェクトを追加する場合も、地形オブジェクトを消去する場合と同様に、各ボクセルのボクセルデータを変更することで、地形オブジェクトの形状を容易に変化させることができる。
【0088】
このように、ゲームシステム1は、ボクセルデータを書き換えることによって、ボクセルオブジェクトの形状を自由に変化させることができる。例えば、ゲームにおいて地形オブジェクトが何らかの理由(例えば、プレイヤキャラクタが地形オブジェクトに打撃を加える等)で破壊される結果として当該地形オブジェクトの形状を変化させる場合、ゲームシステム1は、地形オブジェクトの外形形状を示すデータ(すなわち、後述するメッシュ)を直接変更するのではなく、地形オブジェクトの生成に用いられるボクセルデータを変更することで、地形オブジェクトの形状を自由に変化させることができる。
【0089】
図11は、ボクセルデータの内容の一例を示す図である。ここで、本実施形態においては、ゲーム空間は、格子状に配置された複数のボクセルに区分することができる。ゲームシステム1は、ゲーム空間における各ボクセルについてそれぞれボクセルデータを関連付けて記憶する。ボクセルデータは、当該ボクセルデータに対応するボクセルにおけるボクセルオブジェクトの有無等を示す。
【0090】
図11に示すように、ボクセルデータは、密度データを含む。密度データは、ボクセルデータに対応するボクセルにおけるボクセルオブジェクトの形状(具体的には、後述するメッシュで規定される形状)を規定するために用いられる指標である密度を示す。詳細は後述するが、ボクセルオブジェクトの表面(すなわち、後述するメッシュ)の位置および形状は、上記の密度に基づいて決定される。つまり、本実施形態においては、上記密度は、ボクセルオブジェクトの表面を規定するメッシュを作成するために用いられる。
【0091】
本実施形態においては、密度は、下限値(例えば、0)から上限値(例えば、255)までの範囲の整数値をとり得る。本実施形態においては、ゲームシステム1は、ボクセルに設定される密度の値が高いと、当該ボクセル内においてボクセルオブジェクトが占める体積の割合が大きくなりやすく、当該密度の値が低いと当該割合が小さくなりやすいように、密度に基づいてボクセルオブジェクトの形状を決定する。このように、密度は、ボクセル内においてボクセルオブジェクトが占める体積の割合に影響を与える指標である。密度は、各ボクセルが定義される領域内にオブジェクトが含まれている度合いを示す指標であるとも言える。例えば、密度が0である場合には当該ボクセル内にボクセルオブジェクトが存在せず、密度が255の場合には当該ボクセル内の全てがボクセルオブジェクトであり、密度が0と255の間の値の場合には値に応じた割合で当該ボクセル内をボクセルオブジェクトが占めるものとすることができる。そして、上記密度に基づいて、メッシュの形状、すなわちボクセルオブジェクトの形状を決定することができる。ただし、上記密度に基づいて生成されたボクセルオブジェクトは、密度が示す割合と厳密に一致する体積になる必要はない。例えば、
図8のようなボクセルオブジェクトを生成する手法と、
図15のようなボクセルオブジェクトを生成する手法とでは、同じ密度に基づいていてもボクセルオブジェクトの体積が異なることもある。
【0092】
他の実施形態においては、密度は、ボクセル内の領域の全体をボクセルオブジェクトが占める状態と、ボクセル内の領域にボクセルオブジェクトが含まれない状態とのいずれかを示すものであってもよい。例えば、密度データは、0または1のみをとり得るデータであってもよい。
【0093】
図11に示すように、ボクセルデータは、マテリアルデータを含む。マテリアルデータは、ボクセルデータにより生成されるボクセルオブジェクトのマテリアル(換言すれば、物質)を示す。ここで、本実施形態においては、ボクセルオブジェクトには、例えば、砂、岩、および、土といったマテリアル が設定される。すなわち、本実施形態においては、ボクセルオブジェクトに設定され得るマテリアルとして複数種類のマテリアルが用意されており、ボクセルオブジェクトには、複数種類のマテリアルのいずれかが設定される。
【0094】
図11に示すように、本実施形態においては、マテリアルデータは、マテリアルの識別情報(「マテリアルID」と呼ぶ)を示す。また、本実施形態においては、ゲームシステム1は、ゲームにおいて用意されるマテリアル毎に、マテリアルの性質およびテクスチャを示すマテリアル情報を記憶する。本実施形態においては、マテリアル情報は、マテリアルIDと、当該マテリアルの性質と、当該マテリアルの見た目(具体的には、テクスチャ)とを関連付ける。具体的には、マテリアル情報は、マテリアルIDと、当該マテリアルの性質の識別情報(「性質ID」と呼ぶ)と、当該マテリアルのテクスチャの識別情報(「テクスチャID」と呼ぶ)とを関連付ける情報である(
図11参照)。
【0095】
図12は、マテリアルの性質を示す性質情報の一例を示す図である。
図12に示すように、ゲームシステム1は、上記の性質IDと、当該性質IDが示す性質の内容を示す情報とを関連付けた性質情報を記憶する。マテリアルの性質とは、当該マテリアルが設定されるボクセルオブジェクトがゲームにおいて有する性質であり、例えば、
図12に示す重さや滑りやすさといった情報である。なお、性質の具体的な内容は任意であり、例えば、マテリアルの性質として下記の情報が設定されてもよい。
・温度
・壊れやすさ(例えば、ボクセルオブジェクトに衝撃が加えられた場合に当該ボクセルオブジェクトが壊れるまでの回数)
・ボクセルオブジェクトに他のオブジェクトが接着されるか否か
・プレイヤキャラクタがボクセルオブジェクトを破壊した場合におけるプレイヤキャラクタの体力の回復量
・プレイヤキャラクタがボクセルオブジェクトを破壊した場合にプレイヤキャラクタが取得するゲーム内通貨の量
なお、マテリアルに設定される性質の具体的な内容は任意である。他の実施形態においては、マテリアルの性質を示す情報として、上記とは異なる情報が設定されてもよい。
【0096】
図13は、マテリアルのテクスチャを示すテクスチャ情報の一例を示す図である。
図13に示すように、ゲームシステム1は、上記のテクスチャIDと、当該テクスチャIDが示すテクスチャとを関連付けたテクスチャ情報を記憶する。
【0097】
なお、ボクセルオブジェクトの見た目を規定するデータとして、テクスチャの情報に加えて、色彩および/または模様に関する任意の情報が設定されてもよい。例えば、ボクセルオブジェクトの見た目に関する情報として、ひび割れのパターンが設定されてもよい。このようなパターンを用いることによって、ゲームシステム1は、ひび割れが入っている見た目を表すボクセルオブジェクトの画像を生成することができる。
【0098】
以上のように、本実施形態においては、マテリアルデータは、マテリアルIDによって、ボクセルオブジェクトの性質と、ボクセルオブジェクトに用いるテクスチャとを規定する。例えば、ボクセルデータに含まれるマテリアルデータが示すマテリアルIDが「002」である場合、マテリアル情報において当該マテリアルIDに関連付けられる「001」の性質IDが示す性質が、当該ボクセルデータに対応するボクセルオブジェクトの性質として設定される(
図11に示す矢印参照)。また、上記の場合、マテリアル情報において当該マテリアルIDに関連付けられる「002」のテクスチャIDが示すテクスチャが、当該ボクセルデータに対応するボクセルオブジェクトに適用される(
図11に示す矢印参照)。
【0099】
上記のように、本実施形態においては、ゲームシステム1は、マテリアルの性質とテクスチャとを別々に管理する。そのため、本実施形態においては、性質は同じであるが見た目(すなわち、テクスチャ)が異なる複数種類のマテリアルや、性質は異なるが見た目は同じである複数種類のマテリアルを容易に設定することができる。
【0100】
なお、マテリアルデータは、マテリアルの性質および/またはテクスチャを特定可能な任意のデータであってよい。例えば、他の実施形態においては、マテリアルデータは、上記性質IDおよびテクスチャIDを示すものであってもよいし、マテリアルの性質およびテクスチャを示すデータを実際に含むデータ構造を有していてもよい。
【0101】
また、マテリアルデータは、マテリアルに関する情報であって、上記の性質およびテクスチャとは異なる他の情報をさらに示すものであってもよい。例えば、マテリアルデータは、ボクセルオブジェクトに設定されるエフェクト発生条件(例えば、ボクセルオブジェクトの一部が破壊されたこと、あるいは、キャラクタがボクセルオブジェクトを踏んだこと)が満たされた場合に発生されるエフェクトを示すエフェクトデータを含んでいてもよい。なお、エフェクトデータは、エフェクト画像(例えば、ボクセルオブジェクトが破壊されたことを表現するエフェクト画像)を示すデータであってもよいし、エフェクト音(ボクセルオブジェクトの上をキャラクタが歩くときの足音)を示すデータであってもよい。
【0102】
図11に示すように、ボクセルデータは、ボクセルオブジェクトの状態を示す状態データを含む。状態データの具体的な内容は任意である。例えば、状態データは、ボクセルオブジェクトが濡れた状態であるか否かを示すデータであってもよいし、ボクセルオブジェクトに加えられたダメージの量を示すデータであってもよい。状態データの内容は、ゲーム中において更新されることがあってもよい。
【0103】
[2-2.メッシュ]
本実施形態においては、ボクセルオブジェクトの表面は、メッシュによって表される。メッシュとは、ゲーム空間に配置される複数の面(具体的には、ポリゴン)の集合である。本実施形態においては、ゲームシステム1は、ゲーム空間に設定される各ボクセルのボクセルデータに基づいて、ボクセルオブジェクトのメッシュを生成する。以下、ボクセルデータに基づいてメッシュを生成する一例について説明する。
【0104】
図14は、メッシュの生成方法の一例を示す図である。なお、
図14では、図面を見やすくし、説明を分かりやすくする目的で、ボクセルおよびメッシュを2次元で表現しているが、実際には3次元空間におけるボクセルに基づいて3次元のメッシュが生成される。
【0105】
上述のように、本実施形態においては、ボクセルに設定される密度は、0~255の範囲で設定される。また、本実施形態においては、密度が基準値以上のボクセルをオブジェクト内とし、密度が基準値未満のボクセルをオブジェクト外であるとする。密度が0のボクセルのみをオブジェクト外と定義(すなわち基準値=1)する必要はなく、当該基準値は、たとえば128とする。
図14に示す例においては、ボクセル201および外側の他のボクセルにおいては密度が0、ボクセル202は密度が基準値未満である100、ボクセル203、204においては密度が基準値以上である150、200と設定されているものとする。本実施形態においては、ゲームシステム1は、密度が基準値以上のボクセルと基準値未満のボクセルとの間に頂点を生成する。具体的には、隣接する8個(図面では4個)のボクセルに跨った領域(図面では点線に囲まれた領域)ごとに、頂点を生成するか否かの判定を行う。つまり、密度が基準値以上のボクセルと基準値未満のボクセルの両方に跨る領域に頂点を生成する。さらに、隣接する頂点間(それぞれの頂点を含む上述の領域の境界)が、密度が基準値以上のボクセルと基準値未満のボクセルとの間を通る場合に、それらの頂点を結ぶことでポリゴンメッシュが生成される。頂点の座標は、XYZの軸ごとに、隣接するボクセル同士の密度を比較し、密度の差に基づいた補間によって決定される。このとき、さらに法線情報に基づいて座標計算をすることができるが、法線情報は、少なくとも一部のボクセルについて予め保持しておくようにしてもよいし、保持されていない場合は法線情報も隣接するボクセル同士の密度に基づいて算出されてもよい。なお、
図14において、ボクセル202の密度は基準値未満であるので、頂点の有無の判定においては、ボクセル202はオブジェクト外として扱われるが、ボクセル202の密度の値自体は生成される頂点の座標計算に用いられる。仮にボクセル202の密度よりも低い値に基準値を設定した場合は、
図14のボクセル202における右上側と左上側に頂点がさらに増える結果となる。
【0106】
上述のようにポリゴンメッシュを生成することで、ボクセルごとの密度をある程度反映した体積を有する形状を生成することができる。ただし、隣接ボクセルとの関係によっては、密度0のボクセルが一部オブジェクト内の領域を含むことや、密度255のボクセルが一部オブジェクト外の領域を含むようなこともあり得る。また、本実施形態では、基準値未満のボクセルはオブジェクト外として処理するため、オブジェクト内として処理する場合に比べて頂点が少なくなる分、体積も小さくなる。すなわち、厳密に密度の値に対応する体積となるようにポリゴンメッシュを算出する必要は無い。
【0107】
図15は、地形オブジェクトを含むゲーム画像の一例を示す図である。本実施形態においては、上記のようにメッシュを生成することによって、ボクセルオブジェクトを、例えば、ボクセルの一辺の長さと比べて複雑な凹凸がある形状とすることができる。
【0108】
なお、ボクセルデータに基づいてメッシュを生成する方法は任意である。例えば、他の実施形態においては、ボクセルデータの密度が所定値より大きい場合に、当該ボクセルに立方体が配置されるようにメッシュが生成されてもよい(
図8参照)。
【0109】
ゲームシステム1は、上記のように生成されたメッシュの各面について、上記ボクセルデータによって特定されるマテリアルに応じて当該各面の見た目(すなわち、色彩および/または模様)を決定する。具体的には、ゲームシステム1は、メッシュの各面の描画に用いるテクスチャを上記ボクセルデータに基づいて決定し、決定されたテクスチャを各面にマッピングすることで、ボクセルオブジェクトの画像を生成する。なお、メッシュの各面にマッピングされるテクスチャは、ボクセルオブジェクトが存在するボクセルのうちで、当該面を生成するために用いられたボクセル(対象ボクセルと呼ぶ)のボクセルデータに基づいて決定される。なお、対象ボクセルとは、メッシュの生成方法にも依るが、例えば、当該面の周囲に配置される1以上のボクセルである。つまり、メッシュの面にマッピングされるテクスチャは、当該面の周囲に配置される1以上のボクセルに設定されるマテリアルに対応するテクスチャとなるように決定される。
【0110】
なお、他の実施形態においては、1つのボクセルデータには複数種類(例えば、2種類)のマテリアルデータが含まれていてもよい。このとき、ボクセルデータは、複数種類のマテリアルデータに関する比率データを含む。比率データは、ボクセルオブジェクトに用いるテクスチャを決定するためのデータであり、上記複数種類のマテリアルデータが示す各マテリアル(具体的には、マテリアルに対応するテクスチャ)が、ボクセルオブジェクトの見た目(具体的には、色および/模様)に影響を与える比率を示す。また、メッシュの各面にマッピングされるテクスチャを決定する際には、上記対象ボクセルのボクセルデータに含まれる各種データ(具体的には、密度データ、複数種類のマテリアルデータ、および、比率データ)に基づいてテクスチャが決定される。例えば、1つの面に対応する対象ボクセルに複数種類のマテリアルが設定される場合には、上記比率を考慮して影響度合いが最も大きい(1種類の)マテリアルに対応するテクスチャが用いられてもよいし、複数種類のマテリアルに対応する各テクスチャが上記比率を考慮して用いられてもよい。
【0111】
また、他の実施形態においては、1種類のマテリアルデータを含むボクセルデータが用いられるボクセルオブジェクトと、2種類のマテリアルデータを含むボクセルデータが用いられるボクセルオブジェクトとの両方があってもよい。
【0112】
[2-3.主ボクセルと副ボクセル]
本実施形態においては、上述の地形オブジェクトの他に、地形オブジェクトとは異なる他のオブジェクトもボクセルオブジェクトとして生成されることがある。他のオブジェクトとは、例えば、後述の岩オブジェクトや敵オブジェクト等である。
【0113】
ここで、本実施形態においては、上記他のオブジェクトは、地形オブジェクトとは異なるボクセルに関するボクセルデータによって形状が規定される。以下では、地形オブジェクトに関するボクセル空間を「主ボクセル空間」と呼び、当該主ボクセル空間におけるボクセルを「主ボクセル」と呼び、当該主ボクセルに設定されるボクセルデータを「主ボクセルデータ」と呼ぶ。一方、上記他のオブジェクトに関するボクセル空間を「副ボクセル空間」と呼び、当該副ボクセル空間におけるボクセルを「副ボクセル」と呼び、当該副ボクセルに設定されるボクセルデータを「副ボクセルデータ」と呼ぶ。本実施形態においては、地形オブジェクトの形状は、主ボクセルデータによって規定され、上記他のオブジェクトの形状は、副ボクセルデータによって規定される。本実施形態においては、主ボクセルデータによって形状が規定されるボクセルオブジェクトを、「主ボクセルオブジェクト」と呼び、副ボクセルデータによって形状が規定されるボクセルオブジェクトを、「副ボクセルオブジェクト」と呼ぶ。
【0114】
図16は、主ボクセルオブジェクトと副ボクセルオブジェクトとの一例を示す図である。なお、
図16においては、主ボクセルと副ボクセルとの違いを分かりやすく示す目的で、
図8に示す地形オブジェクトのメッシュが生成される場合と同じルールによってメッシュが生成されるボクセルオブジェクト(すなわち、地形オブジェクト211および岩オブジェクト212)を示している。つまり、
図16に示すボクセルオブジェクトは、「ボクセルに設定される密度が所定値より大きい場合は当該ボクセルの位置に立方体を配置し、所定値以下の場合は当該ボクセルの位置に何も配置しない」というルールによってメッシュが生成されるものとする。なお、
図16においては、図面を見やすくする目的で、地形オブジェクト211を点線で示し、岩オブジェクト212を実線で示し、副ボクセル空間の領域213を破線で示している。
【0115】
地形オブジェクト211については、主ボクセルデータによって形状が規定される。なお、本実施形態においては、ゲーム空間の全体に主ボクセル空間が設定されるものとする(そのため、
図16においては主ボクセル空間の範囲は示されていない。)。
【0116】
一方、岩オブジェクト212については、副ボクセルデータによって形状が規定される。ここで、本実施形態においては、副ボクセル空間は、ゲーム空間の一部(主ボクセル空間の一部とも言える)に設定される。なお、
図16に示す例においては、破線で示される領域213が、副ボクセル空間が設定される範囲である。岩オブジェクト212は、副ボクセル空間内に設定される副ボクセル毎に設定される副ボクセルデータによって形状が規定される。岩オブジェクト212は、副ボクセル空間の範囲内に配置されることとなる。
【0117】
副ボクセルの一辺の長さは、主ボクセルの一辺の長さと異なるように設定されてもよいし、同じに設定されてもよい。なお、例えば
図16に示されるように、主ボクセルよりも一辺の長さが短いボクセルを副ボクセルとして規定する副ボクセル空間を設定することによって、副ボクセルデータに基づく副ボクセルオブジェクトの形状を、主ボクセルデータに基づく地形オブジェクトよりも細かく表現することができる。
【0118】
また、本実施形態においては、ゲームシステム1は、副ボクセル空間における座標軸の方向(すなわち、副ボクセルの各辺の向き)を、主ボクセル空間における座標軸の方向(すなわち、主ボクセルの各辺の向き)とは独立して設定する。例えば、
図16に示す例においては、副ボクセル空間における座標軸の方向は、主ボクセル空間における座標軸の方向とは異なる方向となっている。これによれば、ゲーム空間において副ボクセルオブジェクトを自由な向きに配置しやすくなる。例えば、主ボクセル空間における座標軸とは異なる方向に延びるように副ボクセルオブジェクトを配置することが容易になる。また、地形オブジェクトとは独立して副ボクセルオブジェクトを動かす(例えば、回転させる)ことが容易になる。
【0119】
なお、ゲームシステム1は、ゲーム空間における副ボクセル空間の位置を変更することで、副ボクセルオブジェクトの位置(より正確には、ゲーム空間における位置)を変更することができる。また、ゲームシステム1は、ゲーム空間を基準とした副ボクセル空間の傾きを変更することで、副ボクセルオブジェクトの傾き(より正確には、ゲーム空間における傾き)を変更することができる。
【0120】
本実施形態においては、複数の副ボクセルオブジェクトが生成される場合、ゲームシステム1は、副ボクセルオブジェクト毎に副ボクセル空間を設定する。これによって、ゲーム空間における各副ボクセル空間の位置および傾きを、副ボクセル空間毎に設定することができる。また、それぞれ異なる形状を有する複数の副ボクセルオブジェクト(例えば、互いに異なる方向に延びる形状を有する複数の副ボクセルオブジェクト)を生成しやすくなる。なお、副ボクセル空間の一部と他の副ボクセル空間の一部とが重複するように各副ボクセル空間が配置されてもよい。また、他の実施形態においては、1つの副ボクセル空間において複数の副ボクセルオブジェクトが設定されてもよい。
【0121】
なお、副ボクセルデータに基づく副ボクセルオブジェクトのメッシュの生成方法は、主ボクセルデータに基づく地形オブジェクトのメッシュの生成方法と同じであってもよいし、異なっていてもよい。
【0122】
[2-4.敵キャラクタオブジェクトの傾きを変化させる処理]
次に、ボクセルオブジェクトである敵キャラクタオブジェクト(以下、単に「敵キャラクタ」と記載する。)の傾きを変化させる処理について説明する。本実施形態においては、所定の敵キャラクタの一部はボクセルオブジェクトで構成される。そのため、敵キャラクタのうちボクセルオブジェクトの部分(「ボクセル部分」と呼ぶ。)は、ゲーム中において変形する(すなわち、一部が消去されることで体積が減少したり、あるいは、新たな部分が追加されることで体積が増加したりする)。このとき、ゲームシステム1は、ボクセル部分の変形に応じて敵キャラクタの傾きを変化させることによって、敵キャラクタの挙動(すなわち、動作や体勢)を自然なものとする。以下、敵キャラクタの傾きを変化させる処理の詳細について説明する。
【0123】
[2-4-1.敵キャラクタの構成]
図17は、敵キャラクタの一例を示す図である。
図17に示すように、敵キャラクタ221は、ボクセル部分222と、非ボクセル部分223a~223e(以下、「非ボクセル部分223」と総称することがある。)とを有する。ボクセル部分222は、ボクセルオブジェクトである部分であり、ボクセルデータに基づいて生成されるメッシュで構成される部分である。また、非ボクセル部分223とは、ボクセルオブジェクトではない部分であり、ボクセルデータに基づいては生成されないメッシュで構成される部分である。
図17に示す例では、敵キャラクタ221は、胴体がボクセル部分222であり、頭および手足が非ボクセル部分223である。ボクセル部分222は、上述の副ボクセルオブジェクトである。なお、他の実施形態においては、敵キャラクタ221は、少なくとも一部がボクセル部分であればよく、全体がボクセル部分であってもよい。
【0124】
なお、敵キャラクタ221の胴体のボクセル部分222には、岩のマテリアルが設定される。すなわち、当該ボクセル部分222のボクセルデータに設定されるマテリアルデータは岩のマテリアルを示す。本実施形態においては、敵キャラクタ221は、岩に手足が付いたような外観のキャラクタである。
【0125】
図18は、
図17に示す敵キャラクタの構成の一例を示す図である。
図18に示すように、敵キャラクタ221には、複数のボーン225a~225m(以下、「ボーン225」と総称することがある。)および複数のジョイント226a~226i(以下、「ジョイント226」と総称することがある。)が設定される。
【0126】
ボーン225は、敵キャラクタ221の各部の位置および向きを規定する。具体的には、敵キャラクタ221の非ボクセル部分223はそれぞれ、いずれかのボーン225に関連付けられている。非ボクセル部分223の位置および向きは、それに関連付けられたボーン225の位置および向きに応じて(具体的には、ボーン225の位置および向きと一致するように)決定される。なお、
図18に示すように、いくつかのボーン(
図18では、ボーン225b,225c,225e,225g,225h,225k)は、ボクセル部分222の内側に配置される。
図17では図示していないが、敵キャラクタ221は、ボクセル部分222の外側に配置される非ボクセル部分223に加えて、ボクセル部分222の内側に配置されるボーンに関連付けられる非ボクセル部分をも有している。これらの非ボクセル部分は、ボクセル部分222の一部が消去されることによって露出することがある。
【0127】
ジョイント226は、複数のボーン同士を接続する。ジョイント226は、ボーンの一端と、他のボーンの一端とを接続する。ボーン225の位置および向きは、ジョイント226によって自身に接続される他のボーン225との接続関係を維持することを条件として決定される。ゲームシステム1は、ジョイント226によって接続されるという制限下でボーン225を動かすことによって、敵キャラクタ221の動作を制御する。
【0128】
ボクセル部分222は、敵キャラクタ221のうちの所定の基準位置に関連付けられ、ボクセル部分222の所定位置が当該基準位置に位置するように配置される。本実施形態においては、上記基準位置は、敵キャラクタ221の腰部のジョイント226eの位置であるとする。ただし、基準位置の場所は任意であり、他の実施形態においては、腰部とは異なる場所であってもよい。また、詳細は後述するが、ゲームシステム1は、ボクセル部分222の傾きを変化させる場合には、上記基準位置を中心としてボクセル部分222を回転させる。
【0129】
本実施形態においては、敵キャラクタ221は、非ボクセル部分の1つとして、コア227を有する。詳細は後述するが、コア227は、敵キャラクタ221の弱点となる部分である。コア227は、例えば敵キャラクタ221の心臓の位置に配置される。
【0130】
[2-4-2.敵キャラクタを傾ける処理]
次に、敵キャラクタ221のボクセル部分222が変形することに応じて敵キャラクタ221を傾ける処理について説明する。
図19は、
図17に示す敵キャラクタのボクセル部分の一部が消去された状態の一例を示す図である。本実施形態においては、ボクセル部分222がプレイヤキャラクタによる攻撃を受けるイベントに応じて、当該ボクセル部分222のうち攻撃を受けた部分が消去される(
図19参照)。
図19に示す例においては、ボクセル部分222のうち右下部分が消去されている。
【0131】
上記のようにボクセル部分222の一部が消去された場合、ゲームシステム1は、敵キャラクタ221を傾けて体勢を変化させる。
図20は、敵キャラクタが傾いた状態の一例を示す図である。
図19および
図20に示す例においては、ボクセル部分222のうち右下部分が消去されるので、ボクセル部分222のうち左側部分が右側部分に比べて相対的に重くなっている(重心が左側に移動しているとも言える)。そのため、本実施形態においては、ゲームシステム1は、ボクセル部分222の左側部分が右側部分に比べて下がるように、敵キャラクタ221の傾きを変化させる(
図20参照)。これによって、ゲームシステム1は、ボクセル部分222の一部が消去されたことに応じた自然な体勢を敵キャラクタ221にとらせることができる。
【0132】
なお、ボクセル部分222を変形させるイベントは、ボクセル部分222の体積を減少させるイベント(例えば、ボクセル部分222がプレイヤキャラクタによる攻撃を受けるイベント)に限らず、ボクセル部分222の体積を増加させるイベントであってもよい。
図21は、
図17に示す敵キャラクタのボクセル部分の体積が増加された状態の一例を示す図である。本実施形態においては、ボクセル部分222に付着することが可能な他のオブジェクト(「付着オブジェクト」と呼ぶ。)が当該ボクセル部分222に接触するイベントに応じて、ゲームシステム1は、ボクセル部分222の体積を増加させる。具体的には、ゲームシステム1は、ボクセル部分222に付着オブジェクトが結合されたような形状となるように(つまり、付着オブジェクトの分だけボクセル部分222の体積が増加するように)、ボクセル部分222の形状を変化させる。
【0133】
なお、上記付着オブジェクトは、例えば、ボクセル部分222のマテリアルに対して付着可能な性質を有するマテリアルが設定されたボクセルオブジェクトである。つまり、ボクセル部分222のマテリアルと他のボクセルオブジェクトのマテリアルとが特定の組み合わせである場合、ゲームシステム1は、当該他のボクセルオブジェクトを付着オブジェクトと判断する。
【0134】
上記のようにボクセル部分222の体積が増加された場合も、体積が減少される場合と同様、ゲームシステム1は、敵キャラクタ221を傾けて体勢を変化させる。なお、
図21に示す例においては、ボクセル部分222のうち左下部分に新たな部分が増加されるので、ボクセル部分222のうち左側部分が右側部分に比べて相対的に重くなっている。そのため、
図21に示す例においても
図20に示す例と同様、ゲームシステム1は、ボクセル部分222の左側部分が右側部分に比べて下がるように、敵キャラクタ221の傾きを変化させる。したがって、ボクセル部分222の体積が増加された場合も、体積が減少される場合と同様、ゲームシステム1は、ボクセル部分222の変形に応じた自然な体勢を敵キャラクタ221にとらせることができる。
【0135】
以上のように、本実施形態においては、ゲームシステム1は、敵キャラクタのボクセル部分を変形させるイベントが発生した場合、敵キャラクタの体積を減少させる(または、増加させる)ようにボクセルデータを更新する。また、ボクセルデータに更新があった場合、ゲームシステム1は、更新後のボクセルデータに基づいて敵キャラクタのメッシュを生成し、仮想空間を基準とした敵キャラクタの少なくとも一部の傾きを変化させる。これによれば、敵キャラクタの体積が増減する変化に応じた自然な体勢を敵キャラクタ221にとらせることができる。
【0136】
なお、上記のイベントは、敵キャラクタが攻撃を受けたことや、他のオブジェクトが接触したことに応じて発生するものに限らず、任意の条件で発生するものであってよい。他の実施形態においては、ゲームにおけるある条件が満たされたことに応じて、敵キャラクタのボクセル部分の体積が時間経過に応じて減少または増加していってもよい。例えば、敵キャラクタのボクセル部分が時間に応じて崩れたり溶けたりすることで小さくなってもよいし、ボクセル部分が時間に応じて膨らんでいくことで大きくなってもよい。このとき、ゲームシステム1は、体積の減少または増加に応じて敵キャラクタを傾かせてもよい。
【0137】
図22は、敵キャラクタのボクセル部分を傾ける変化の前後における状態の一例を示す図である。
図22においては、ボクセル部分222の一部(具体的には、右下部分)が消去された場合を例として、ボクセル部分222を傾ける向きおよび量について説明する。
【0138】
ボクセル部分222が変形した場合、ゲームシステム1は、変形後のボクセル部分222の重心231の位置を算出する。
図22に示す例においては、ボクセル部分222の変形によって、重心231が基準軸Lよりも左側へ移動している(
図22の(a)参照)。基準軸Lとは、基準状態におけるボクセル部分222の重心を通り、重力方向(
図22においては真下方向)に平行な軸である。なお、
図22においては、基準状態における重心の位置を点線で示している。また、基準状態は、敵キャラクタが登場した時点の初期状態であってもよいが、初期状態である必要はない。例えば、最初に敵キャラクタが登場した時点の形状からボクセル部分222が次第に変形し所定の形状となる場合、基準状態とは、当該所定の形状となったときの状態であってもよい。
【0139】
図22に示すように、重心231が基準軸Lに対して左側へ移動した場合、ゲームシステム1は、ボクセル部分222のうち基準軸Lより左側の部分が重力方向の側(すなわち、下側)に近づき、かつ、反対側である右側の部分が重量方向の反対側(すなわち、上側)に近づく向きにボクセル部分222を回転させることで、ボクセル部分222を傾ける(
図22の(b)参照)。なお、上述のように、ゲームシステム1は、基準位置を中心としてボクセル部分222を回転させる。
【0140】
図23は、敵キャラクタのボクセル部分を傾ける変化の前後における状態の他の一例を示す図である。
図23に示す例は、ボクセル部分222の一部(具体的には、右下部分)が大きくなるように変形された場合の一例である。
図23に示す例においては、重心231が基準軸Lに対して右側へ移動する。そのため、ゲームシステム1は、ボクセル部分222のうち基準軸Lより右側の部分が重力方向の側(すなわち、下側)に近づき、かつ、反対側である左側の部分が重量方向の反対側(すなわち、上側)に近づく向きにボクセル部分222を回転させることで、ボクセル部分222を傾ける(
図23の(b)参照)。
【0141】
上記のように、本実施形態においては、ゲームシステム1は、イベントが発生した場合、基準軸に対してボクセルデータの更新後における敵キャラクタの重心が存在する側(
図22では左側、
図23では右側)の部分が重力方向側(
図22および
図23では下側)に近づく向きへ、当該基準位置を中心として敵キャラクタを回転させるように、敵キャラクタの少なくとも一部の傾きを変化させる。これによれば、イベントが発生したことに応じて敵キャラクタは重心が移動した側へ傾くので、ゲームシステム1はイベント後において敵キャラクタに自然な体勢をとらせることができる。
【0142】
また、本実施形態においては、基準軸は、基準状態におけるボクセル部分222の重心を通り、仮想空間における重力方向に平行な直線である(
図22および
図23参照)。これによれば、基準状態から重心が移動した側に応じて敵キャラクタを傾けることができるので、敵キャラクタの傾く動作をユーザにとって自然なものにすることができる。
【0143】
なお、他の実施形態においては、上記基準軸は、基準状態におけるボクセル部分222の重心を通る直線に限らない。例えば、他の実施形態においては、基準軸は、傾きが変更される部分(具体的には、ボクセル部分222)を通り、仮想空間における重力方向に平行な任意の直線であってもよい。また、後述するように、基準状態において、基準軸は、基準位置を通るものである必要はない(つまり、基準位置とは異なる位置を通るものであってもよい)。
【0144】
また、本実施形態においては、上記基準位置は、敵キャラクタの腰部の関節(すなわち、ジョイント)の位置である。これによれば、腰を中心に敵キャラクタが傾くので、敵キャラクタが傾く動作を自然なものとすることができる。
【0145】
本実施形態においては、ボクセル部分222を傾ける場合、ゲームシステム1は、当該ボクセル部分222に加えて、非ボクセル部分の一部についてもボクセル部分222と同様に傾ける(
図20および21参照)。具体的には、ゲームシステム1は、非ボクセル部分223のうち、上記基準位置(すなわち、腰部)よりも上側の非ボクセル部分(具体的には、ボーン225a~225gに関連付けられる非ボクセル部分)を、ボクセル部分222の回転に合わせて回転させる。一方、上記基準位置よりも下側の非ボクセル部分(具体的には、ボーン225h~225mに関連付けられる非ボクセル部分)については、ボクセル部分222が回転する場合であっても回転しない。これは、これらの非ボクセル部分が傾いてしまうと、敵キャラクタ221が地面に対して斜めに立っているような体勢となり、かえって不自然になるおそれがあるためである。このように、ゲームシステム1は、イベントが発生した場合、ボクセル部分222と、ボーンに関連付けられる部分(すなわち、非ボクセル部分)のうちの一部との傾きを変化させる。これによれば、敵キャラクタ221が傾いたときの体勢をより自然なものにすることができる。
【0146】
なお、上記「基準位置よりも上側」とは、例えば、敵キャラクタの頭部に近い側であると言うこともできる。また、「基準位置よりも下側」とは、例えば、敵キャラクタの足部(地面に接触している部分とも言える)に近い側であると言うこともできる。
【0147】
なお、ゲームシステム1は、非ボクセル部分223のうち、ボクセル部分222と共に傾けられる非ボクセル部分を、ボクセル部分222と同様、基準位置を中心に回転するように傾ける。これによれば、傾ける前後においてボクセル部分222と当該非ボクセル部分との位置関係が変化しないので、傾けた後における敵キャラクタ221が不自然な体勢となる可能性を低減することができる。
【0148】
本実施形態においては、上記の重心は、ボクセル部分222の重心であり、ゲームシステム1は、ボクセルデータを用いて(つまり、各ボクセルデータが示すボクセル毎の密度を用いて)重心を算出する。これによれば、ボクセルデータを用いて重心位置を簡易な計算で算出することができる。なお、他の実施形態においては、重心は、ボクセルデータに代えて、ボクセル部分222のメッシュに基づいて算出されてもよい。
【0149】
また、上記の重心は、ボクセル部分222のみを対象として算出されることに代えて、ボクセル部分222と、敵キャラクタ221のボクセル部分222以外の部分とを対象として算出されてもよい。例えば、ゲームシステム1は、ボクセル部分222と、非ボクセル部分のうちボクセル部分222と共に回転させられる部分とを対象として重心を算出してもよい。また例えば、敵キャラクタ221が他のオブジェクト(例えば、武器オブジェクト)を把持している場合には、ゲームシステム1は、重心を算出する対象に当該他のオブジェクトを加えてもよい。
【0150】
本実施形態においては、ゲームシステム1は、ボクセル部分222を傾ける量を、重心の変化角度に基づいて決定する。重心の変化角度とは、上記基準軸と、基準状態におけるボクセル部分222の重心から変形後の重心へと延びる線分とのなす角θである(
図22の(a)および
図23の(a)参照)。ゲームシステム1は、変化角度θが大きいほど、ボクセル部分222を大きく傾ける。例えば、ゲームシステム1は、変化角度θに所定の係数(例えば、0より大きくかつ1未満の係数)を乗算した値を、ボクセル部分222の回転角度としてもよい。
【0151】
また、本実施形態においては、ゲームシステム1は、敵キャラクタを傾ける角度に上限を設ける。具体的には、ゲームシステム1は、基準状態(すなわち、ボクセル部分222が変形していない状態)を基準としたときのボクセル部分222の傾き角度の上限値を設定し、当該傾き角度が上限値以上にはならないようにする。上記の上限値の具体的な値は任意であるが、例えば30°に設定されてもよい。ここで、傾き角度が大きくなりすぎると、敵キャラクタ221の体勢がかえって不自然になったり、敵キャラクタ221が行う動作が不自然になったりする(例えば、動作中において敵キャラクタ221の一部が地面に埋もれてしまう)可能性がある。これに対して、本実施形態においては、上記の上限値を設定することによって、上記の可能性を低減することができる。
【0152】
また、本実施形態においては、基準状態(すなわち、変形前の状態)においては基準位置が基準軸上に位置する場合を例として説明を行った。ここで、他の実施形態においては、基準状態において、基準位置は基準軸上に配置されていなくてもよい。つまり、敵キャラクタの基準状態とは、基準位置が基準軸上に配置されていることを条件とするものではない。これによれば、ゲームシステム1は、ボクセル部分222が変形されていない状態では、敵キャラクタに任意の傾きをとらせることができる。
【0153】
なお、本実施形態においては、上記重心の変化角度は、基準状態における重心の位置を基準として算出される(すなわち、基準状態における重心から上下方向に延びる直線と、基準状態における重心から変形後の重心へと延びる線分とのなす角θとして算出される)。これに対して、他の実施形態においては、重心の変化角度は、基準位置を基準として算出されてもよい。具体的には、重心の変化角度は、基準位置から基準状態における重心へと延びる線分と、基準位置からボクセル部分222の変形後の重心へと延びる線分とのなす角θ’として算出されてもよい。
【0154】
ただし、上記角度θ’を重心の変化角度として用いる方法においては、基準状態において基準位置が基準軸上に配置されていない場合において、ボクセル部分222の変形によって重心が移動しても角度θ’が0または0に近い値となってしまう可能性がある。このとき、ユーザの予想に反して敵キャラクタの傾きがほとんど変化しない結果となる可能性がある。例えば、基準状態において重心が基準位置の左上に位置するような敵キャラクタについて、ボクセル部分222の変形によって重心がさらに左上に移動する場合を考える。この場合、重心が左上に移動することからユーザは敵キャラクタが左に傾くことを予想するが、上記角度θ’は0または0に近い値となるので、実際には敵キャラクタの傾きがほとんど変化しない結果となるおそれがある。
【0155】
これに対して、本実施形態においては、ゲームシステム1は、基準状態における重心の位置を基準として重心の変化角度を計算することによって、上記のような場合において重心の変化角度が0または0に近い値となる可能性を低減することができる。これによって、ユーザの予想に反して敵キャラクタの傾きがほとんど変化しない結果となる可能性を低減することができる。
【0156】
上記のように、本実施形態においては、ゲームシステム1は、ボクセル部分222の変形によって基準軸に対して重くなった側(すなわち、重心が移動した側)が下がるように敵キャラクタ221を傾けた(
図22参照)。ここで、ボクセル部分222が変形した場合に敵キャラクタ221がとる挙動としては、バランスをとるべく変形後の重心が基準軸上に位置するように傾きを変化させる、といった挙動も、自然な挙動であると言うことができる。そのため、他の実施形態においては、ボクセル部分222が変形した場合においてボクセル部分222を傾ける向きは、次のように決定されてもよい。
【0157】
図24は、本実施形態の変形例における、敵キャラクタのボクセル部分を傾ける変化の前後における状態の一例を示す図である。なお、
図24においては、
図22と同様に、ボクセル部分222の右下部分が消去された場合の例を示している。
【0158】
本変形例においても上記実施形態と同様、ゲームシステム1は、ボクセル部分222の変形後における重心231の位置を算出する。ここで、本変形例においては、ゲームシステム1は、重心231が基準軸L上の位置となるように、ボクセル部分222を傾ける。したがって、
図24の例においては、ボクセル部分222のうち重心が移動した側(すなわち、左側)の部分が重力方向の反対側(すなわち、上側)に近づき、かつ、重心が移動した側の反対側である右側の部分が重量方向の側(すなわち、下側)に近づく向きにボクセル部分222が回転することなり(
図24の(b)参照)、上記実施形態とは反対向きにボクセル部分222を傾けることとなる。
【0159】
なお、上記変形例において、ゲームシステム1は、変形後の重心が基準軸L上の位置に近づく向きにボクセル部分222を回転させ、回転させた後の重心が基準軸L上の位置とならないようにしてもよい。つまり、イベントが発生した場合、ゲームシステム1は、ボクセルデータの更新後における敵キャラクタの重心が基準軸に近づく方向へ、基準位置を中心として敵キャラクタを回転させるようにしてもよい。
【0160】
以上においては、敵キャラクタ221の前方から見たときの傾き(すなわち、前後方向に平行な軸回りの回転に関する傾き)が変化する場合を例として説明したが、実際には、ゲームシステム1は、任意の水平方向(すなわち、重力方向に垂直な任意の方向)から見たときの傾きを変化させる。具体的には、ゲームシステム1は、ボクセル部分222の形状が変化した場合、変形後における重心と基準軸とを含む平面に垂直な方向を向き、かつ、基準位置を通る軸を回転軸として、ボクセル部分222を傾ける。これによれば、ゲームシステム1は、敵キャラクタ221を前後左右に傾けることができ、ボクセル部分222の変形後における敵キャラクタ221の体勢をより自然なものとすることができる。なお、他の実施形態においては、ゲームシステム1は、特定の軸回り(例えば、前後方向に平行な軸回り)の回転方向についてのみ敵キャラクタの傾きを変化させるようにしてもよい。
【0161】
[2-4-3.傾いた状態での動作制御]
上記のようにボクセル部分222の変形によって敵キャラクタ221が傾いた場合、ゲームシステム1は、傾いた状態で敵キャラクタ221に所定の動作を行わせる。
図25は、歩行動作と攻撃動作を行う敵キャラクタの様子の一例を示す図である。なお、
図25に示される軸L’は、図において敵キャラクタの傾きをわかりやすくする目的で示されるものであり、敵キャラクタが上記基準状態である場合に重力方向と平行になる軸である。
【0162】
本実施形態においては、敵キャラクタ221に歩行動作を行わせる場合、ゲームシステム1は、傾いた状態(すなわち、軸L’が重力方向に対して傾いた状態)のままで敵キャラクタ221の動作を制御する(
図25の(a)参照)。このように、歩行動作中においても敵キャラクタ221を傾けた状態とすることで、敵キャラクタ221に歩行動作をより自然に行わせることができる。
【0163】
本実施形態においては、ゲームシステム1は、モーションデータを用いて敵キャラクタ221に動作を行わせる。ゲームシステム1は、敵キャラクタ221が行う動作の種類毎にモーションデータを記憶しておく。モーションデータは、キャラクタが動作を行うときの各部(具体的には、非ボクセル部分)の動きを規定するデータである。具体的には、モーションデータは、動作を行うときの各ボーンの動き(すなわち、ボーンの位置および傾きの変化)を示す。本実施形態においては、モーションデータは、動作開始時点における各ボーンの位置および傾きからの変化を示す。そのため、ゲームシステム1は、ゲーム空間における敵キャラクタの傾きに関わらず、敵キャラクタに動作を行わせるために単一のモーションデータを用いることができる。
【0164】
以上より、本実施形態においては、ゲームシステム1は、イベントが発生した場合には、敵キャラクタの少なくとも一部の傾きを変化させた状態で、モーションデータを用いて敵キャラクタの動作を制御する。このとき、ゲームシステム1は、ボーンをモーションデータに従って動かすことで、敵キャラクタに動作を行わせる。これによれば、敵キャラクタに自由に動作を行わせることができる。また、本実施形態においては、敵キャラクタが傾いた状態であるか否かに関わらず単一のモーションデータを用いることができるので、敵キャラクタの状態毎にモーションデータを用意する必要がなく、用意しておくべきモーションデータのデータ量を低減することができる。
【0165】
なお、本実施形態においては、上記モーションデータは、キャラクタオブジェクトの歩行動作を示すものである。つまり、ゲームシステム1は、歩行動作については敵キャラクタの少なくとも一部の傾きを変化させた状態で敵キャラクタの動作を制御する。これによれば、敵キャラクタに自然な歩行動作を行わせることができる。
【0166】
また、本実施形態においては、敵キャラクタ221に攻撃動作を行わせる場合、ゲームシステム1は、敵キャラクタ221の傾きを基準状態に戻した状態で敵キャラクタ221の動作を制御する(
図25の(b)参照)。具体的な動作制御としては、ゲームシステム1は、攻撃動作を開始する直前に敵キャラクタ221の傾きを基準状態に戻し、その後に攻撃動作を行わせるようにしてもよいし、攻撃動作を開始してから敵キャラクタ221の傾きを基準状態へと次第に戻しつつ攻撃動作を行わせるようにしてもよい。
【0167】
なお、攻撃動作も歩行動作と同様、モーションデータに従って各ボーンを動かすことによって動作が制御される。すなわち、ゲームシステム1は、イベントが発生した場合において、敵キャラクタの傾きを当該イベントの発生前と同じ傾きとして、モーションデータを用いて敵キャラクタの動作を制御する。
【0168】
ここで、攻撃動作は、例えば、腕を振り回したり、不図示の武器を振り回したりする動作である。そのため、仮に敵キャラクタ221が傾いた状態で攻撃動作を行うとすれば、例えば動作中に腕や武器が地面に埋もれてしまう等の不自然な動作となる可能性がある。そのため、本実施形態においては、攻撃動作については敵キャラクタ221の傾きを基準状態に戻すことで、上記の可能性を低減している。
【0169】
上記のように、本実施形態においては、ゲームシステム1は、2種類の異なる動作を行わせる場合において、敵キャラクタの傾きを異ならせる。すなわち、ゲームシステム1は、イベントが発生した場合において、第1モーションデータ(例えば、歩行動作のモーションデータ)を用いて敵キャラクタの動作を制御するときの敵キャラクタの傾きと、第2モーションデータ(例えば、攻撃動作のモーションデータ)を用いて敵キャラクタの動作を制御するときの敵キャラクタの傾きとを異なる値とする。これによれば、動作の種類によっては不自然な動作が行われてしまう可能性を低減することができる。
【0170】
なお、本実施形態においては、ゲームシステム1は、攻撃動作においては敵キャラクタ221の傾きを基準状態に戻すこととした。ここで、他の実施形態においては、ゲームシステム1は、敵キャラクタ221の傾きを基準状態に戻すことに代えて、歩行動作における傾き量に比べて攻撃動作における傾き量を小さくするようにしてもよい。これによっても本実施形態と同様、不自然な動作が行われてしまう可能性を低減することができる。
【0171】
[2-4-4.ゲーム処理]
上記のように、プレイヤオブジェクトは敵キャラクタ221に対する攻撃によってボクセル部分222を消去(破壊とも言う)することができる。ここで、本実施形態においては、敵キャラクタ221のボクセル部分222が破壊されても、敵キャラクタ221には直接的なダメージは与えられない。すなわち、ボクセル部分222が破壊されても敵キャラクタ221の体力値は減少せず、ボクセル部分222が全て消去されても敵キャラクタ221は倒されない。
【0172】
ただし、敵キャラクタ221のボクセル部分222を破壊したり、ボクセル部分222に付着オブジェクトを接触させたりすることによって、ボクセル部分222を変形させて敵キャラクタ221の傾きを変化させた場合には、敵キャラクタ221の弱点(例えば、頭や心臓に設定されるコア227)の位置が下がって攻撃しやすくなることがある。これによって、プレイヤはゲームを有利に進めることができる。なお、他の実施形態においては、敵キャラクタ221の傾きを変化させた場合には、敵キャラクタ221はボクセル部分222の一部を引きずって歩行動作を行うようになり、それによって敵キャラクタ221の移動速度が遅くなるようにしてもよい。これによっても本実施形態と同様、ボクセル部分222を破壊することでプレイヤはゲームを有利に進めることができる。
【0173】
本実施形態においては、プレイヤオブジェクトは、敵キャラクタ221のコア227を攻撃することによって敵キャラクタ221にダメージを与えることができ、敵キャラクタ221を倒すことができる。すなわち、ゲームシステム1は、敵キャラクタ221のボクセル部分222が攻撃を受けるイベントが発生した場合、ボクセル部分222の少なくとも一部を消滅させ、敵キャラクタ221のコア227が攻撃を受けた場合、敵キャラクタの全体を消滅させる。したがって、本実施形態においては、プレイヤは、まず敵キャラクタ221のボクセル部分222を破壊してコア227を露出させ、その後にコア227を攻撃することで敵キャラクタ221を倒すこととなる。このように、本実施形態においては、敵キャラクタ221が、ボクセル部分222と、その内側にコア227とを有する構成とすることで、敵キャラクタ221の攻略に戦略性を持たせることができ、ゲームの興趣性を向上することができる。
【0174】
[3.ゲームシステムにおける処理の具体例]
次に、
図26~
図28を参照して、ゲームシステム1における情報処理の具体例について説明する。
【0175】
図26は、ゲームシステム1における情報処理に用いられる各種データの一例を示す図である。
図26に示すように、ゲームシステム1は、ゲームプログラム、主ボクセル空間データ、主ボクセルオブジェクトデータ、主メッシュデータ、副ボクセル空間データ、副ボクセルオブジェクトデータ、副メッシュデータ、および、敵キャラクタデータを記憶する。ゲームプログラム、主ボクセル空間データ、および、敵キャラクタデータの一部は、ゲーム処理の実行前に予めゲームシステム1において記憶されるデータである。これらのデータは、例えば、本体装置2のスロット23に装着された記憶媒体に記憶される。また、主ボクセルオブジェクトデータ、主メッシュデータ、副ボクセル空間データ、副ボクセルオブジェクトデータ、副メッシュデータ、および、敵キャラクタデータの他の一部は、ゲーム処理の実行中に生成されるデータである。これらのデータは、例えば、本体装置2のDRAM85に記憶される。
【0176】
ゲームプログラムは、本実施形態におけるゲーム処理(具体的には、
図27に示すゲーム処理)を実行するためのゲームプログラムである。
【0177】
主ボクセル空間データは、ゲーム空間に設定される主ボクセル空間を規定するデータである。具体的には、主ボクセル空間データは、主ボクセルの1辺の長さ、および、ゲーム空間における主ボクセルの各辺の方向を示す。また、ゲーム空間の一部の領域にのみ主ボクセル空間が設定される場合、主ボクセル空間データは、主ボクセルが設定される空間(すなわち、主ボクセル空間)の位置および大きさを示すデータ(すなわち、ゲーム空間のうちで主ボクセルが設定される範囲を示すデータ)を含んでいてもよい。
【0178】
主ボクセルオブジェクトデータは、ゲーム空間に配置される主オブジェクト(ここでは、地形オブジェクト)を示すデータである。具体的には、主ボクセルオブジェクトデータは、ゲーム空間における一部または全部の範囲内について、単位領域毎の主ボクセルデータを含む。
【0179】
主メッシュデータは、ゲーム空間に配置される主オブジェクトに設定されるメッシュ(すなわち、地形オブジェクトのメッシュ)を示すデータである。主メッシュデータは、例えば、主メッシュにおける各頂点の位置を示すデータを含む。
【0180】
副ボクセル空間データは、ゲーム空間に設定される副ボクセル空間を規定するデータである。具体的には、副ボクセル空間データは、副ボクセルが設定される空間(すなわち、副ボクセル空間)の位置および大きさと、副ボクセルの1辺の長さと、ゲーム空間における副ボクセルの各辺の方向とを示す。
【0181】
副ボクセルオブジェクトデータは、ゲーム空間に配置される副オブジェクト(具体的には、敵キャラクタのボクセル部分等)を示すデータである。具体的には、副ボクセルオブジェクトデータは、ゲーム空間における一部または全部の範囲内について、単位領域毎の副ボクセルデータを含む。
【0182】
副メッシュデータは、ゲーム空間に配置される副オブジェクトに設定されるメッシュ(すなわち、敵キャラクタのボクセル部分のメッシュ等)を示すデータである。副メッシュデータは、例えば、副メッシュにおける各頂点の位置を示すデータを含む。
【0183】
敵キャラクタデータは、敵キャラクタ221に関するデータである。本実施形態においては、敵キャラクタデータは、歩行モーションデータ、攻撃モーションデータ、傾き基準値データ、ボーンデータ、および、傾きデータを含む。歩行モーションデータ、攻撃モーションデータ、および、傾き基準値データは、ゲーム処理の実行前に予めゲームシステム1において記憶されるデータである。ボーンデータ、および、傾きデータは、ゲーム処理の実行中に生成されるデータである。
【0184】
歩行モーションデータは、敵キャラクタ221による歩行動作における各ボーンの動きを示す。攻撃モーションデータは、敵キャラクタ221による攻撃動作における各ボーンの動きを示す。傾き基準値データは、基準状態におけるボクセル部分222の傾き(具体的には、ゲーム空間に対する傾き)を示す。ボーンデータは、敵キャラクタ221に設定される各ボーン225の位置および向きを示す。傾きデータは、ボクセル部分222の現時点での傾きを示す。なお、上記の各データの他に、敵キャラクタデータは、ジョイント226に関するデータ(例えば、ボーンとボーンとの接続関係を示すデータ)や、敵キャラクタの体力値を示すデータ等を含んでいてもよい。
【0185】
なお、ゲームシステム1は、
図26に示すデータの他に、ゲーム処理の実行前に予めゲームシステム1において記憶されるデータとして、上述の性質情報およびテクスチャ情報のデータ、ならびに、ゲームに登場する各種キャラクタに関するデータ等を記憶する。
【0186】
図27は、ゲームシステム1によって実行されるゲーム処理の流れの一例を示すフローチャートである。
図27に示すゲーム処理は、例えば、上記ゲームプログラムの実行中においてゲームを開始する指示がプレイヤによって行われたことに応じて開始される。
【0187】
なお、本実施形態では、本体装置2のプロセッサ81が、ゲームシステム1に記憶されている上記ゲームプログラムを実行することによって、
図27に示す各ステップの処理を実行するものとして説明する。ただし、他の実施形態においては、上記各ステップの処理のうちの一部の処理を、プロセッサ81とは別のプロセッサ(例えば、専用回路等)が実行するようにしてもよい。また、ゲームシステム1が他の情報処理装置(例えば、サーバ)と通信可能である場合、
図27に示す各ステップの処理の一部は、他の情報処理装置において実行されてもよい。また、
図27に示す各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。
【0188】
また、プロセッサ81は、
図27に示す各ステップの処理を、メモリ(例えば、DRAM85)を用いて実行する。すなわち、プロセッサ81は、各処理ステップによって得られる情報(換言すれば、データ)をメモリに記憶し、それ以降の処理ステップにおいて当該情報を用いる場合には、メモリから当該情報を読み出して利用する。
【0189】
図27に示すステップS1において、プロセッサ81は、ゲーム空間にボクセル空間を設定する。具体的には、プロセッサ81は、上記ボクセル空間データ(具体的には主ボクセル空間データ、および、副ボクセル空間データ)を取得してDRAM85に記憶する(換言すれば、書き込む)。なお、以降のゲーム処理において、プロセッサ81は、ボクセルオブジェクトに関する処理(例えば、ステップS2の処理等)を実行する際にボクセル空間データを参照する場合がある。この場合、プロセッサ81は、DRAM85に記憶されたボクセル空間データを参照する。ステップS1の次にステップS2の処理が実行される。
【0190】
ステップS2において、プロセッサ81は、ゲーム空間に、基準状態におけるボクセルオブジェクトを設定する。具体的には、プロセッサ81は、基準状態におけるボクセルオブジェクトの配置を示すボクセルデータ(具体的には、主ボクセルデータおよび副ボクセルデータ)を取得し、取得したボクセルデータの一部または全部を、ボクセルオブジェクトデータ(具体的には、主ボクセルオブジェクトデータおよび副ボクセルオブジェクトデータ)としてDRAM85に記憶する(換言すれば、書き込む)。なお、基準状態におけるボクセルオブジェクトの配置を示すボクセルデータは、例えば、本体装置2のスロット23に装着された記憶媒体に記憶されている。ステップS2の次にステップS3の処理が実行される。
【0191】
なお、主ボクセルオブジェクトデータとしてDRAM85に書き込まれるボクセルデータは、ゲーム空間の全範囲における主ボクセルデータのうちで、ゲーム画像の生成に用いられる一部の範囲の主ボクセルデータであってよい。プロセッサ81は、例えば、ゲーム空間のうちの一部の範囲(例えば、仮想カメラの位置から所定距離内の範囲)についてのみ主ボクセルデータを用いてオブジェクトの画像を生成するようにしてもよい。このとき、主ボクセルオブジェクトデータは、当該範囲内のボクセルデータを含むものであってもよい。また、ゲーム空間のうちの一部の範囲についての主ボクセルデータが書き込まれる場合には、後述するステップS4~S10の一連の処理の実行中における適宜のタイミング(例えば、仮想カメラの位置が所定距離以上移動したタイミング)で、上記ステップS2と同様の処理が実行される。
【0192】
ステップS3において、プロセッサ81は、ゲーム空間に配置されるオブジェクトについてメッシュを生成する。ボクセルオブジェクトについてのメッシュは、上記“[2-2.メッシュ]”で述べた方法に従って生成される。ここで、プロセッサ81は、DRAM85に記憶されている主ボクセルオブジェクトデータおよび副ボクセルオブジェクトデータに基づいてメッシュを生成し、主メッシュデータまたは副ボクセルデータとしてDRAM85に記憶する。ステップS3の処理によって、ボクセルオブジェクトがゲーム空間に構築されたこととなる。また、ボクセルオブジェクトではないオブジェクト(例えば、敵キャラクタ221の非ボクセル部分)については、例えばボーンに基づいてメッシュが生成される。上記ステップS3の後、ゲームが開始され、ゲーム中においてステップS4~S8の一連の処理が繰り返し実行される。
【0193】
ステップS4において、プロセッサ81は、敵キャラクタ221以外の他のオブジェクトの動作を制御する。上記「他のオブジェクト」とは、例えば、プレイヤオブジェクト、および、敵キャラクタ221以外の他の敵キャラクタ(例えば、ボクセル部分を有しない敵キャラクタ)である。プロセッサ81は、例えば、各コントローラ3または4から受信した操作データに基づいてプレイヤオブジェクトの動作を制御したり、ゲームプログラムにおいて定められるアルゴリズムに基づいて上記他の敵キャラクタの動作を制御したりする。ステップS4の次にステップS5の処理が実行される。
【0194】
ステップS5において、プロセッサ81は、ボクセルオブジェクトを変形するか否かを判定する。プロセッサ81は、例えば、ボクセルオブジェクトである敵キャラクタ221のボクセル部分222や地形オブジェクトについて、ボクセルオブジェクトを変形させるイベントが発生したか否かを判定する。ステップS5の判定結果が肯定である場合、ステップS6の処理が実行される。一方、ステップS5の判定結果が否定である場合、ステップS6の処理がスキップされてステップS7の処理が実行される。
【0195】
ステップS6において、プロセッサ81は、変形すると判定されたボクセルオブジェクトに関するボクセルデータを更新する。具体的には、プロセッサ81は、当該ボクセルオブジェクトの変形後の形状に対応するように、ボクセルデータが示す密度を変更する。また、プロセッサ81は、変更後の密度を示すように、DRAM85に記憶されているボクセルオブジェクトデータを更新する。ステップS6の次にステップS7の処理が実行される。
【0196】
ステップS7において、プロセッサ81は、敵キャラクタ221の動作を制御するための敵キャラクタ処理を実行する。以下、
図28を参照して、敵キャラクタ処理の詳細な流れについて説明する。
【0197】
図28は、
図27に示すステップS7の敵キャラクタ処理の詳細な流れの一例を示すサブフローチャートである。敵キャラクタ処理においては、まずステップS11において、プロセッサ81は、敵キャラクタ221のボクセル部分222が変形されたか否かを判定する。すなわち、プロセッサ81は、上記ステップS6においてボクセル部分222のボクセルデータが更新されたか否かを判定する。ステップS11の判定結果が肯定である場合、ステップS12の処理が実行される。一方、ステップS11の判定結果が否定である場合、ステップS12~S14の一連の処理がスキップされて、後述するステップS15の処理が実行される。
【0198】
ステップS12において、プロセッサ81は、変形後のボクセル部分222の重心を算出する。すなわち、プロセッサ81は、上記“[2-4-2.敵キャラクタを傾ける処理]”で述べた方法に従って新たな重心の位置を算出する。ステップS12の次にステップS13の処理が実行される。
【0199】
ステップS13において、プロセッサ81は、ステップS12で算出された重心の位置に基づいて、ボクセル部分222を傾ける向きと傾ける量とを決定する。これらの傾ける向きおよび量は、上記“[2-4-2.敵キャラクタを傾ける処理]”で述べた方法に従って決定される。ステップS13の次にステップS14の処理が実行される。
【0200】
ステップS14において、プロセッサ81は、敵キャラクタ221の傾きを変化させる。具体的には、プロセッサ81は、ステップS13で決定された傾きの向きと傾き量とに基づいて、敵キャラクタ221を傾ける。具体的には、上記“[2-4-2.敵キャラクタを傾ける処理]”で述べたように、ボクセル部分222と、基準位置よりも上の非ボクセル部分が、決定された向きに、決定された量だけ傾けられる。このとき、プロセッサ81は、変更された後の敵キャラクタ221の傾きを示すデータを上記傾きデータとしてDRAM85に記憶する。ステップS14の次にステップS15の処理が実行される。
【0201】
ステップS15において、プロセッサ81は、敵キャラクタ221に歩行動作を行わせるか否かを判定する。例えば、敵キャラクタ221が行うべき動作は、ゲームプログラムにおいて定められるアルゴリズムに基づいて決定される。当該アルゴリズムにおいて歩行動作を行わせる条件が満たされた場合、敵キャラクタ221に歩行動作を行わせると判断される。ステップS15の判定結果が肯定である場合、ステップS16の処理が実行される。一方、ステップS15の判定結果が否定である場合、ステップS16の処理がスキップされてステップS17の処理が実行される。
【0202】
ステップS16において、プロセッサ81は、現在の傾きを維持した状態で敵キャラクタ221に歩行動作を行わせる。具体的には、プロセッサ81は、現在の傾きを変更せずに、DRAM85に記憶されている歩行モーションデータに基づいて、敵キャラクタ221の各ボーンの位置および向きを変化させる。なお、本実施形態においては、ステップS16の処理は、1フレーム時間に1回の割合で実行される。そのため、1回のステップS16の処理においては、プロセッサ81は、1フレーム分の変化量だけ各ボーンの位置および向きを変化させる。このとき、プロセッサ81は、変化後の各ボーンの位置および向きを示すように、DRAM85に記憶されているボーンデータを更新する。
【0203】
また、上記ステップS16において、プロセッサ81は、各ボーンの位置および向きに応じて、ボクセル部分222の位置および向きを変化させる。例えば、当該ボクセル部分222に関する副ボクセル空間の位置および向きを変化させることで、ボクセル部分222の位置および向きを変化させることができる。このとき、プロセッサ81は、DRAM85に記憶されている、ボクセル部分222のボクセルデータを更新する。ステップS16の次にステップS17の処理が実行される。
【0204】
ステップS17において、プロセッサ81は、敵キャラクタ221に攻撃動作を行わせるか否かを判定する。例えば、上記アルゴリズムにおいて攻撃動作を行わせる条件が満たされた場合、敵キャラクタ221に攻撃動作を行わせると判断される。ステップS17の判定結果が肯定である場合、ステップS18の処理が実行される。一方、ステップS17の判定結果が否定である場合、ステップS18の処理がスキップされてステップS19の処理が実行される。
【0205】
ステップS18において、プロセッサ81は、基準状態の傾きで敵キャラクタ221に攻撃動作を行わせる。具体的には、プロセッサ81は、敵キャラクタ221の傾きを基準状態の傾きとし、DRAM85に記憶されている攻撃モーションデータに基づいて、敵キャラクタ221の各ボーンの位置および向きを変化させる。なお、基準状態の傾きは、DRAM85に記憶されている傾き基準値データを参照することで特定することができる。ステップS18においても上記ステップS16と同様、1回のステップS18の処理において、プロセッサ81は、1フレーム分の変化量だけ各ボーンの位置および向きを変化させる。また、プロセッサ81は、各ボーンの位置および向きに応じて、ボクセル部分222の位置および向きを変化させる。プロセッサ81は、変化後の各ボーンの位置および向きを示すように、DRAM85に記憶されているボーンデータを更新し、変化後のボクセル部分222の位置および向きを示すように、DRAM85に記憶されているボクセルデータを更新する。ステップS18の処理の次にステップS19の処理が実行される。
【0206】
ステップS19において、プロセッサ81は、敵キャラクタ221のコア227が攻撃を受けたか否かを判定する。ステップS19の判定結果が肯定である場合、ステップS20の処理が実行される。一方、ステップS19の判定結果が否定である場合、プロセッサ81は、
図28に示す敵キャラクタ処理を終了する。
【0207】
ステップS20において、プロセッサ81は、敵キャラクタ221をゲーム空間から消滅させる。このとき、プロセッサ81は、敵キャラクタ221に関する副ボクセル空間データおよび副ボクセルオブジェクトデータをDRAM85から削除する。ステップS20の処理の終了後、プロセッサ81は、
図28に示す敵キャラクタ処理を終了する。
【0208】
図27の説明に戻り、ステップS7の敵キャラクタ処理の次に、ステップS8の処理が実行される。ステップS8において、プロセッサ81は、上記ステップS6またはS7(具体的には、ステップS16またはS18)でボクセルデータが変更されたボクセルオブジェクトについてメッシュを更新する。すなわち、プロセッサ81は、変更されたボクセルデータに基づいてメッシュを生成する。これによって、ボクセルオブジェクトのメッシュをゲーム中において動的に変化させることができる。なお、プロセッサ81は、DRAM85に記憶されているメッシュデータ(すなわち、主メッシュデータおよび副メッシュデータ)を、新たに生成されたメッシュを示す内容に更新する。ステップS8の次にステップS9の処理が実行される。
【0209】
ステップS9において、プロセッサ81は、ゲーム空間を表すゲーム画像を生成して表示装置に表示させる。具体的には、プロセッサ81は、ボクセルオブジェクトおよびその他のオブジェクト(例えば、敵キャラクタ221の非ボクセル部分)を含むゲーム空間を表すゲーム画像を生成する。なお、ボクセルオブジェクトの画像は、DRAM85に記憶されているボクセルオブジェクトデータおよびメッシュデータを用いて、上記“[2-2.メッシュ]”で述べた方法に従って生成される。プロセッサ81は、生成されたゲーム画像を表示装置に表示させる。なお、ゲーム中において、ステップS9の処理は、所定時間(例えば、1フレーム時間)に1回の割合で繰り返し実行される。ステップS9の次にステップS10の処理が実行される。
【0210】
ステップS10において、プロセッサ81は、ゲームを終了するか否かを判定する。例えば、プロセッサ81は、ゲームを終了する指示がユーザによって行われたか否かを判定する。ステップS10の判定結果が否定である場合、ステップS4の処理が再度実行される。以降、ステップS10においてゲームを終了すると判定されるまで、ステップS4~S10の一連の処理が繰り返し実行される。一方、ステップS10の判定結果が肯定である場合、プロセッサ81は、
図27に示すゲーム処理を終了する。
【0211】
[4.本実施形態の作用効果および変形例]
以上のように、上記実施形態においては、情報処理システム(具体的には、ゲームシステム1)は、以下の手段を備える構成である。
・仮想空間内において、キャラクタオブジェクト(例えば、敵キャラクタ221)に関するボクセルデータに基づいて当該キャラクタオブジェクトのメッシュを生成するメッシュ生成手段(ステップS3およびS8)
・第1モーションデータ(例えば、歩行モーションデータ)を用いてキャラクタオブジェクトの動作を制御するモーション制御手段(ステップS16およびS18)
・キャラクタオブジェクトに対してイベント(例えば、ボクセル部分222を変形させるイベント)が発生した場合、当該キャラクタオブジェクトに関するボクセルデータを更新するボクセルデータ更新手段(ステップS6)
・キャラクタオブジェクトのメッシュを描画した画像を含む仮想空間の画像を、表示装置に出力するために生成する画像生成手段(ステップS9)
上記構成において、メッシュ生成手段は、ボクセルデータが更新された場合、更新後のボクセルデータに基づいてキャラクタオブジェクトのメッシュを生成する(ステップS8)。モーション制御手段は、イベントが発生した場合、キャラクタオブジェクトの少なくとも一部(例えば、ボクセル部分222と、非ボクセル部分223の一部)についての、仮想空間を基準とした傾きを変化させた状態で、第1モーションデータを用いてキャラクタオブジェクトの動作を制御する(ステップS16)。
【0212】
上記の構成によれば、ボクセルデータが更新された場合にキャラクタオブジェクトの傾きを変化させた状態でキャラクタオブジェクトの動作を制御することによって、キャラクタオブジェクトに自然な動作を行わせることができる。また、傾きを変化させる状態と変化させない状態とで同じモーションデータを用いることによって、モーションデータのデータ量を低減することができる。以上より、上記実施形態によれば、少ないモーションデータによってオブジェクトに自然な動作を行わせることができる。
【0213】
また、上記実施形態においては、情報処理システムは、ボクセルデータが更新された場合、更新後のボクセルデータに基づいて、キャラクタオブジェクトのうちで当該ボクセルデータによって生成される部分を少なくとも含む部分に関する重心を算出する(ステップS12)。そして、情報処理システムは、イベントが発生する前後における重心の変化に基づいて、キャラクタオブジェクトの少なくとも一部の傾きを変化させる向きを決定する(ステップS13、
図22および
図24)。上記によれば、ボクセルデータに基づいて重心を算出することによって、算出のための処理負荷を軽減することができる。また、重心に応じて傾きの向きを決定することによって、オブジェクトに自然な動作を行わせることができる。
【0214】
なお、上記「キャラクタオブジェクトのうちでボクセルデータによって生成される部分を少なくとも含む部分に関する重心」とは、キャラクタオブジェクトのうちで、当該部分を含む部分を対象として算出される重心を指す。つまり、上記重心は、当該部分に関する重心であってもよいし、当該部分と、当該部分とともに傾きが変化する部分(例えば、非ボクセル部分223のうちの一部)とに関する重心であってもよいし、キャラクタオブジェクト全体に関する重心であってもよい。
【0215】
(キャラクタオブジェクトに関する変形例)
上記実施形態においては、キャラクタオブジェクトの一例として敵キャラクタの動作を制御する場合について説明した。ここで、キャラクタオブジェクトの種類および外観は任意であり、敵キャラクタに限らない。例えば、情報処理システムは、プレイヤによって操作されるプレイヤオブジェクトについて上記実施形態における傾きの制御および動作の制御を行ってもよい。また、上記敵キャラクタは2足歩行を行うキャラクタオブジェクトであったが、例えば、情報処理システムは、4足歩行のキャラクタオブジェクト、または、空中を飛ぶキャラクタオブジェクトについて上記実施形態における傾きの制御および動作の制御を行ってもよい。なお、4足歩行のキャラクタオブジェクトについては、情報処理システムは、前後方向に平行な軸回りの回転方向についてのみキャラクタオブジェクトの傾きを変化させ、左右方向に平行な軸回りの回転方向についてはキャラクタオブジェクトの傾きを変化させないようにしてもよい。また、空中を飛ぶキャラクタオブジェクトについては、情報処理システムは、傾きを変化させた状態で羽ばたく動作をキャラクタオブジェクトに行わせるようにしてもよい。
【0216】
なお、他の実施形態において、情報処理システムは、上記実施形態における構成の一部を備えていなくてもよいし、上記実施形態において実行される処理の一部を実行しなくてもよい。例えば、情報処理システムは、上記実施形態における一部の特定の効果を奏するためには、当該効果を奏するための構成を備え、当該効果を奏するための処理を実行すればよく、その他の構成を備えていなくてもよいし、その他の処理を実行しなくてもよい。
【産業上の利用可能性】
【0217】
上記実施形態は、少ないモーションデータによってオブジェクトに自然な動作を行わせること等を目的として、例えばゲームシステムおよびゲームプログラムとして利用することができる。
【符号の説明】
【0218】
1 ゲームシステム
2 本体装置
3 左コントローラ
4 右コントローラ
81 プロセッサ
221 敵キャラクタ
222 ボクセル部分
223 非ボクセル部分
225 ボーン
226 ジョイント
227 コア
231 重心