(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023166052
(43)【公開日】2023-11-20
(54)【発明の名称】情報処理プログラム、情報処理システム、および情報処理方法
(51)【国際特許分類】
A63F 13/56 20140101AFI20231113BHJP
【FI】
A63F13/56
【審査請求】有
【請求項の数】7
【出願形態】OL
【公開請求】
(21)【出願番号】P 2022160691
(22)【出願日】2022-10-05
(71)【出願人】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】110001276
【氏名又は名称】弁理士法人小笠原特許事務所
(74)【代理人】
【識別番号】100130269
【弁理士】
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】神門 有史
(57)【要約】
【課題】操作対象キャラクタを追従するように所定のキャラクタの移動制御を行う情報処理において、少ない処理負荷で、追従するキャラクタがゲーム空間内で落下する等の、不利な状況に陥ることを防止しながら移動制御できる情報処理プログラム、情報処理システム、および情報処理方法を提供すること。
【解決手段】操作対象オブジェクトが移動された第1座標に基づいて、仮想空間内の複数の第2座標を算出し、当該複数の第2座標のそれぞれにつき、追従オブジェクトの当該第2座標への移動が許容されるか否かを示す移動許容度を算出し、第2座標の各移動許容度に基づいて、移動が許容される位置に向けて追従オブジェクトを移動させる際の移動先決定の基準となる座標である移動目標基準座標を算出し、移動目標基準座標に基づく位置に追従オブジェクトを移動する。
【選択図】
図22
【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータに、仮想空間内において操作対象オブジェクトが移動するとともに、少なくとも1つの追従オブジェクトが前記操作対象オブジェクトの移動に追従して移動する情報処理を実行させる情報処理プログラムであって、
前記コンピュータを、
操作入力に基づき前記操作対象オブジェクトを前記仮想空間内において移動制御する操作対象オブジェクト移動制御手段と、
前記操作対象オブジェクト移動制御手段によって前記操作対象オブジェクトが移動された第1座標に基づいて、前記仮想空間内の複数の第2座標を算出する座標算出手段と、
前記座標算出手段により算出された複数の第2座標のそれぞれにつき、前記追従オブジェクトの当該第2座標への移動が許容されるか否かを示す移動許容度を算出する移動許容度算出手段と、
前記移動許容度算出手段によって算出された、複数の前記第2座標の各移動許容度に基づいて、移動が許容される位置に向けて前記追従オブジェクトを移動させる際の移動目標決定の基準となる座標である移動目標基準座標を算出する移動目標基準座標算出手段と、
前記移動目標基準座標に基づく位置に向けて前記追従オブジェクトを移動制御する追従オブジェクト移動制御手段として機能させる、情報処理プログラム。
【請求項2】
前記情報処理プログラムは、前記コンピュータに、2以上の前記追従オブジェクトが前記操作対象オブジェクトの移動に従って移動する情報処理を実行させ、
前記追従オブジェクト移動制御手段は、前記移動目標基準座標に基づいて、2以上の前記追従オブジェクトのそれぞれが移動する座標である移動目標座標を算出し、各追従オブジェクトを各移動目標座標に移動させる、請求項1に記載の情報処理プログラム。
【請求項3】
前記移動許容度算出手段は、前記第1座標を中心とし、所定の角度ごとの各方向に存在する前記第2座標のそれぞれについて前記移動許容度を算出する、請求項2に記載の情報処理プログラム。
【請求項4】
前記移動許容度算出手段は、複数の前記第2座標から選択された1つの第2座標につき、当該第2座標において前記追従オブジェクトの移動が許容されるか否かの情報と、当該第2座標の近傍にある他の第2座標において前記追従オブジェクトの移動が許容されるか否かの情報とに基づいて、各第2座標の移動許容度を算出する、請求項2に記載の情報処理プログラム。
【請求項5】
前記追従オブジェクトの移動が許容されるか否かの情報は、2値で表される、請求項4に記載の情報処理プログラム。
【請求項6】
仮想空間内において操作対象オブジェクトが移動するとともに、少なくとも1つの追従オブジェクトが前記操作対象オブジェクトの移動に追従して移動する情報処理を実行する情報処理システムであって、
操作入力に基づき前記操作対象オブジェクトを前記仮想空間内において移動制御する操作対象オブジェクト移動制御手段と、
前記操作対象オブジェクト移動制御手段によって前記操作対象オブジェクトが移動された第1座標に基づいて、前記仮想空間内の複数の第2座標を算出する座標算出手段と、
前記座標算出手段により算出された複数の第2座標のそれぞれにつき、前記追従オブジェクトの当該第2座標への移動が許容されるか否かを示す移動許容度を算出する移動許容度算出手段と、
前記移動許容度算出手段によって算出された、複数の前記第2座標の各移動許容度に基づいて、移動が許容される位置に向けて前記追従オブジェクトを移動させる際の移動目標決定の基準となる座標である移動目標基準座標を算出する移動目標基準座標算出手段と、
前記移動目標基準座標に基づく位置に向けて前記追従オブジェクトを移動制御する追従オブジェクト移動制御手段とを備える、情報処理システム。
【請求項7】
情報処理装置のコンピュータに、仮想空間内において操作対象オブジェクトが移動するとともに、少なくとも1つの追従オブジェクトが前記操作対象オブジェクトの移動に追従して移動する情報処理を実行させる情報処理方法であって、
前記コンピュータに、
操作入力に基づき前記操作対象オブジェクトを前記仮想空間内において移動制御させ、
前記操作対象オブジェクトが移動された第1座標に基づいて、前記仮想空間内の複数の第2座標を算出させ、
前記算出された複数の第2座標のそれぞれにつき、前記追従オブジェクトの当該第2座標への移動が許容されるか否かを示す移動許容度を算出させ、
前記算出された複数の前記第2座標の各移動許容度に基づいて、移動が許容される位置に向けて前記追従オブジェクトを移動させる際の移動目標決定の基準となる座標である移動目標基準座標を算出させ、
前記移動目標基準座標に基づく位置に向けて前記追従オブジェクトを移動制御させる、情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、仮想空間内において操作対象オブジェクトが移動するとともに、少なくとも1つの追従オブジェクトが操作対象オブジェクトに追従するよう移動する情報処理に関する。
【背景技術】
【0002】
従来から、プレイヤキャラクタを他の追従キャラクタが追従するゲームが知られている。このようなゲームにおいて、追従キャラクタがその移動先でダメージを受けたり崖から落下したりすることを防止するため、プレイヤキャラクタが移動した位置を足跡として記録し、この足跡に基づいて、追従キャラクタの移動が可能な範囲を探索する方法も知られている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記の技術では、探索された複数の移動可能範囲に基づいて生成される安全領域内で追従キャラクタを移動制御している。ただ、プレイヤキャラクタの足跡毎に、移動可能範囲を算出して記憶するものであったため、処理負荷を軽減するという観点で改良の余地があった。
【0005】
それ故に、本開示における目的は、操作対象キャラクタを追従するように所定のキャラクタの移動制御を行う情報処理において、少ない処理負荷で、追従するキャラクタがゲーム空間内で落下する等の、不利な状況に陥ることを防止しながら移動制御できる情報処理プログラム、情報処理システム、および情報処理方法を提供することである。
【課題を解決するための手段】
【0006】
上記目的を達成するために、例えば以下のような構成例が挙げられる。
【0007】
(構成1)
構成1は、情報処理装置のコンピュータに、仮想空間内において操作対象オブジェクトが移動するとともに、少なくとも1つの追従オブジェクトが前記操作対象オブジェクトの移動に追従して移動する情報処理を実行させる情報処理プログラムであって、コンピュータを、操作対象オブジェクト移動制御手段と、座標算出手段と、移動許容度算出手段と、移動目標基準座標算出手段と、追従オブジェクト移動制御手段として機能させる。操作対象オブジェクト移動制御手段は、操作入力に基づき操作対象オブジェクトを仮想空間内において移動制御する。座標算出手段は、操作対象オブジェクト移動制御手段によって操作対象オブジェクトが移動された第1座標に基づいて、仮想空間内の複数の第2座標を算出する。移動許容度算出手段は、座標算出手段により算出された複数の第2座標のそれぞれにつき、追従オブジェクトの当該第2座標への移動が許容されるか否かを示す移動許容度を算出する。移動目標基準座標算出手段は、移動許容度算出手段によって算出された、複数の第2座標の各移動許容度に基づいて、移動が許容される位置に向けて前記追従オブジェクトを移動させる際の移動目標決定の基準となる座標である移動目標基準座標を算出する。追従オブジェクト移動制御手段は、移動目標基準座標に基づく位置に向けて追従オブジェクトを移動制御する。
【0008】
上記構成によれば、追従オブジェクトを移動制御する際に、操作対象オブジェクトの周囲の移動許容度を調べ、移動許容度が低い場所から遠ざかるような方向・位置に追従オブジェクトを移動するように制御している。これにより、例えば、追従オブジェクトが操作対象ブジェクトに追従移動している際に崖から落下してしまう等の、ユーザにとって不利な状況が発生することを防止できる。
【0009】
(構成2)
構成2は、上記構成1において、情報処理プログラムは、コンピュータに、2以上の追従オブジェクトが操作対象オブジェクトの移動に従って移動する情報処理を実行させてもよい。そして、追従オブジェクト移動制御手段は、移動目標基準座標に基づいて、2以上の追従オブジェクトのそれぞれが移動する座標である移動目標座標を算出し、各追従オブジェクトを各移動目標座標に移動させてもよい。
【0010】
上記構成によれば、多数の追従オブジェクトを移動制御する場合に、これらの追従オブジェクトについて一括で移動許容度を算出できるため、処理負荷を軽減できる。
【0011】
(構成3)
構成3は、上記構成1または2において、移動許容度算出手段は、第1座標を中心とし、所定の角度ごとの各方向に存在する第2座標のそれぞれについて移動許容度を算出してもよい。
【0012】
上記構成によれば、移動許容度が高い「方向」を選び、その方向を基準として追従オブジェクトの移動方向を決める。これにより、多数の追従オブジェクトについて、より安全な移動先を効率的に算出できる。
【0013】
(構成4)
構成4は、上記構成1または2において、移動許容度算出手段は、複数の第2座標から選択された1つの第2座標につき、当該第2座標において追従オブジェクトの移動が許容されるか否かの情報と、当該第2座標の近傍にある他の第2座標において追従オブジェクトの移動が許容されるか否かの情報とに基づいて、各第2座標の移動許容度を算出してもよい。
【0014】
上記構成によれば、ある1つの第2座標だけでなく、その近傍にある他の第2座標の安全性も考慮して当該第2座標の移動許容度を算出するため、より精度の高い移動許容度の算出ができる。
【0015】
(構成5)
構成5は、上記構成4において、追従オブジェクトの移動が許容されるか否かの情報は、2値で表されてもよい。
【0016】
上記構成によれば、追従オブジェクトの移動が許容されるか否かの情報を2値で扱うことで、例えば地形オブジェクトのデータとして、多段階に区分された移動許容度の情報を持たすこともなく、シンプルなデータ構造とすることができる。
できる。
【発明の効果】
【0017】
本実施形態によれば、追従キャラクタが、例えば崖から落下する等、ユーザの意図に反して不利な状況が発生することを防ぐことができる。
【図面の簡単な説明】
【0018】
【
図1】本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図
【
図2】本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図
【
図6】本体装置2の内部構成の一例を示すブロック図
【
図7】本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図
【
図10】移動目標基準座標とスロットの関係を説明するための図
【
図11】スロットとサブキャラクタとの関係を説明するための図
【
図15】サブキャラクタが崖から落下する場合の一例を示す図
【
図19】DRAM85に記憶される各種データの一例を示すメモリマップ
【
図21】本実施形態に係るゲーム処理の詳細を示すフローチャート
【
図22】リーダー移動制御処理の詳細を示すフローチャート
【
図23】二次スコア算出処理の詳細を示すフローチャート
【
図24】サブキャラクタ移動制御処理の詳細を示すフローチャート
【発明を実施するための形態】
【0019】
以下、一実施形態について説明する。
【0020】
まず、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(
図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
【0021】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0022】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0023】
図3は、本体装置2の一例を示す六面図である。
図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
【0024】
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
【0025】
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
【0026】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
【0027】
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、
図6に示すスピーカ88)を備えている。
図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
【0028】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
【0029】
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
【0030】
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
【0031】
図4は、左コントローラ3の一例を示す六面図である。
図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、
図4における上下方向(
図4に示すz軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0032】
左コントローラ3は、方向入力デバイスの一例である左アナログスティック(以下、左スティックと呼ぶ)32を備える。
図4に示すように、左スティック32は、ハウジング31の主面に設けられる。左スティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、左スティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、左スティック32を押下する入力が可能である。
【0033】
左コントローラ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プログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
【0034】
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
【0035】
図5は、右コントローラ4の一例を示す六面図である。
図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、
図5における上下方向(
図5に示すz軸方向)に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0036】
右コントローラ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を備える。
【0037】
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
【0038】
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、
図3に示す構成の他、
図6に示す各構成要素81~91、97、および98を備える。これらの構成要素81~91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
【0039】
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0040】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0041】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
【0042】
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0043】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【0044】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0045】
プロセッサ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は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0046】
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
【0047】
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
【0048】
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0049】
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
【0050】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
【0051】
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
【0052】
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、
図6で示しているため
図7では省略している。
【0053】
左コントローラ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(登録商標)の規格に従って行われる。
【0054】
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
【0055】
左コントローラ3は、各ボタン103(具体的には、ボタン33~39、43、44、および47)を備える。また、左コントローラ3は、左スティック32を備える。各ボタン103および左スティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
【0056】
左コントローラ3は、慣性センサを備える。具体的には、左コントローラ3は、加速度センサ104を備える。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、
図4に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ105は、所定の3軸(例えば、
図4に示すxyz軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。
【0057】
通信制御部101は、各入力部(具体的には、各ボタン103、左スティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【0058】
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103および左スティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
【0059】
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
【0060】
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
【0061】
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、右スティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
【0062】
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
【0063】
[本実施形態におけるゲーム処理の概要]
次に、本実施形態に係るゲームシステム1で実行されるゲーム処理の動作概要を説明する。本実施形態で実行されるゲームは、仮想ゲーム空間中のキャラクタをユーザが上記コントローラを用いて移動させて遊ぶものである。なお、ゲーム空間には、ユーザが操作するキャラクタ(以下、リーダーキャラクタと呼ぶ)以外にも、プロセッサ81によって所定のアルゴリズムに基づいて移動制御される複数のキャラクタ(以下、サブキャラクタと呼ぶ)が存在する。これら複数のサブキャラクタは、所定の隊列を組んでリーダーキャラクタに追従するように移動制御される。
【0064】
図8は、リーダーキャラクタとそれに追従する複数のサブキャラクタとが隊列を組んで移動する様子を示している。ただし実際には
図8に示すような整った隊列を組んで移動するわけではなく、各サブキャラクタは個別に移動制御されるため、サブキャラクタ間の移動速度の差や地形の影響などによって、隊列は
図9のようになり得る。なお、リーダーキャラクタが移動を停止してから十分な時間が経過すれば、サブキャラクタは基本的には
図8のような位置で停止することになる。
【0065】
[サブキャラクタの移動について]
次に、上記のようなサブキャラクタの移動制御に関して説明する。本実施形態では、サブキャラクタは、「移動目標基準座標」に基づいて決められる「スロット」の位置を目指して移動する。本実施形態では、上記スロットとして、ゲーム空間内に複数の移動目標地点を設定する。そして、各サブキャラクタに対して1つのスロットを対応させ、各サブキャラクタを対応するスロットに向かって移動させる。ここで、上記移動目標基準座標は、各サブキャラクタのスロットの位置を決める際の基準となる座標である。換言すれば、サブキャラクタの隊列全体の移動先の「代表点」となるような座標である。本実施形態では、基本的には、
図10に示すように、上記移動目標基準座標はリーダーキャラクタの向き(進行方向)とは逆側に配置される。そして、上記スロットは、移動目標基準座標の近傍となる所定の位置に配置される。そのため、結果的に、上記スロットはリーダーキャラクタの向き(進行方向)とは逆側に配置されることになる。但し、後述するように、所定の条件下では、移動目標基準座標がリーダーキャラクタの向きとは逆側とならない位置に配置され、その結果、スロットもリーダーキャラクタの向きとは逆側とならない位置に配置されることもある。
【0066】
次に、各スロットと各サブキャラクタとの関係について説明する。各サブキャラクタには、移動目標地点となるスロット番号が個別に対応付けられている。例えばサブキャラクタ番号1にはスロット番号1が対応付けられており、サブキャラクタ番号2にはスロット番号2が対応付けられており、サブキャラクタ番号3にはスロット番号3が対応付けられている。この結果、
図11に示すように、サブキャラクタ番号が1であるサブキャラクタ(以下、単にサブキャラクタ1と称す)はスロット1を目指して移動し、サブキャラクタ2はスロット2を目指して移動し、サブキャラクタ3はスロット3を目指して移動する。なお、
図11の例ではキャラクタ番号=スロット番号となっているが、これは単なる一例であって、対応関係は任意に設定してもよい。
【0067】
以上のように、各サブキャラクタは、自身に対応付けられたスロットを目指してそれぞれ移動することにより、リーダーキャラクタに追従して所定の隊列を組んでゲーム空間を移動することになる。
【0068】
ここで、ゲーム空間内に、そこに行くとサブキャラクタが(リーダーキャラクタも)落下し得る地形があるとする。当該地形の一例としては、例えば、「崖」(崖下に落下し得る)や水面(水中に沈む)がある。本実施形態では、このような危険な地形が崖である場合を一例に説明する。
【0069】
そして、
図12に示すように、崖上部分にいるリーダーキャラクタ、およびサブキャラクタが、崖の縁に近づいていくような場合を想定する(進行方向は
図12における上方向となる)。この場合、リーダーキャラクタの後方の所定位置に上記移動目標基準座標が設定されており、これに基づき、リーダーキャラクタの向きとは逆側に、各サブキャラクタのスロットが配置される。
図12では、概ね、領域101内に各サブキャラクタのスロットが含まれている場合を例示している。その結果、リーダーキャラクタの後方にサブキャラクタの隊列が構成され、リーダーキャラクタに追従移動することになる。
【0070】
この後、
図13に示すように、崖の縁のすぐ側までリーダーキャラクタが移動したとする。更にその後、
図14に示すように、リーダーキャラクタの向きが右に90度回転し、崖の縁に沿うように(
図14における右方向に)移動する場合を想定する。この場合に、上記のようにリーダーキャラクタの後方で隊列が構成されるよう上記スロットを配置し、サブキャラクタを移動制御すると、
図15に示すように、一部のサブキャラクタが崖から落下してしまうこともあり得る。このようにサブキャラクタが落下すると、サブキャラクタが隊列から外れたり、サブキャラクタが消滅したりする等で、ユーザにとって好ましくない場合があり得る。そのため、このような落下を防止することが望ましい。
【0071】
ここで、上記のような落下を防止するための手法として、例えば、崖の縁の部分に見えない壁(コリジョン)を設定するという手法が考えられる。しかし、この手法の場合、リーダーキャラクタ、サブキャラクタも含めて、ゲーム内にある崖の縁から先へは一律に進めないことになる。そのため、ゲームの展開上、リーダーキャラクタを意図的に崖から落下させたいというような場合等に、対応できない。また、上記の手法では、そもそも崖から落下する危険性がないため、例えば、ユーザが、リーダーキャラクタが崖から落下しないように微妙な操作を行う、というような操作の楽しみ方(ゲーム性)も提供できないことにもなり得る。
【0072】
そこで、本実施形態では、サブキャラクタの(意図しない)落下を防止するため、リーダーキャラクタの周囲の安全度(換言すれば、その位置へサブキャラクタが移動することの許容度)を判定する。そして、安全度が低い位置(サブキャラクタを移動させたくない位置)から離れた位置に向けてサブキャラクタ(隊列)が移動するような制御を行う。例えば、
図16に示すように、リーダーキャラクタの向きと逆側の位置(リーダーキャラクタの後方)ではなく、リーダーキャラクタから見て右側(
図16では下側)で隊列が構成されるような移動制御を行う。当該右となる方向は、リーダーキャラクタから見て、崖のある方向とは逆の方向である。このような方向にある位置は安全性が高い(落下する可能性が低い)と考えられるため、当該右側となる所定の位置に上記移動目標基準座標が設定され、この位置に基づいて上記スロットの位置が設定される。その結果、概ね、
図16における領域101で示される範囲内にスロットが配置され、崖からより離れたような位置に向けて各サブキャラクタ(隊列全体)が移動することになる。そして、
図16の状態から当該リーダーキャラクタが
図16における右方向に更に移動する場合は、移動目標基準座標の位置、および、これに基づくスロットの位置も
図16における右方向に移動するように変化していく。その結果、リーダーキャラクタに並列するようにしてサブキャラクタ(隊列)が右方向に移動するような動きとなる。なお、
図16では、移動目標基準座標が再設定されても領域101の向きはそのままとなっているが、移動目標基準座標を再設定した際に、領域101の向きがプレイヤキャラクタの方を向くように制御してもよい(領域101が斜めになるような形としてもよい)。
【0073】
次に、本実施形態における、上記のような制御(周囲の安全性の算出手法)の概要を説明する。本実施形態では、まず、
図17に示すように、リーダーキャラクタ周辺の複数の座標を取得する。以下では、当該座標をサンプル点と呼ぶ。また、サンプル点の数として、本例では8個の場合を例として説明する。他の実施形態では、サンプル点の数はこれより多くても少なくてもよい。また、リーダーキャラクタの位置(現在座標)から各サンプル点への方向ベクトルのことを以下ではサンプルベクトルと呼ぶ。また、本例では、サンプル点間の角度は同じ角度であるとする。例えば、
図17の例では、8個のサンプル点A~Hは、仮想空間を俯瞰したような2次元座標系(
図17ではxz平面)において、リーダーキャラクタの(足下の)位置を中心とした円周上に、45度間隔で(等間隔に)配置されている。
【0074】
上記のようなサンプル点を決定すれば、次に、各サンプル点の安全度を示す一次情報として一次スコアを算出する。本例では、一次スコアについては、次のようにして算出する。まず、仮想空間内において、サンプル点の真上方向(y軸正方向)に第1距離だけ離れた座標から、真下方向(y軸負方向)に直線(レイ)を第2距離(例えば、第1距離と同じ距離)まで飛ばす。そして、当該直線が何かに衝突したか否かに基づき、一次スコアを算出する。更に、衝突した場合は、衝突した地点のオブジェクト(地形)の属性に基づいて、一次スコアを算出する。当該属性は、地形オブジェクトに予め設定されている情報であり、例えば、「地面」「水面」等の情報である。本実施形態では、上記第2距離まで直線を飛ばしても衝突がなかった場合は、そのサンプル点は崖の先(空中、何も地形が存在せず落下する座標)であり、「危険」なサンプル点として判定される。また、衝突があった場合、衝突した(地形)オブジェクトの属性が「水面」である場合は、そのサンプル点は「危険」と判定される。「水面」以外に衝突した場合は、「安全」と判定される。そして、上記一次スコアとして、「安全」な場合は”0”、「危険」な場合は”-1.0”が設定される。すなわち、本実施形態では、一次スコアについては「安全(0)」か「危険(-1.0)」の2値で算出する。上記の例では第2距離は第1距離と同じ距離としたが、例えば、第2距離を第1距離より所定量大きい値とすることで、一定の段差までは崖とみなさず、危険と判定しないようにしてもよい。
【0075】
次に、各サンプル点の中から、安全とされたサンプル点を一つ選び、上記移動目標基準座標として設定する処理が行われる。ここで、上記
図13で示したような崖の縁近傍にリーダーキャラクタがいるときにサンプル点を決定すると、例えば
図18に示すような結果となる。そして、
図18において、上記一次スコア(2値での判定)で安全と判定されるサンプル点はサンプル点C~Gとなる。ただ、
図18の状況では、崖に近い位置にあるサンプル点Cやサンプル点Gよりは、崖からより遠い位置にあるサンプル点Eのほうが、より安全度は高いと考えられる。そこで、本実施形態では、上記2値の判定で安全とされたサンプル点の中から、より安全度の高いサンプル点を選ぶべく、二次スコアを算出する処理も行う。本実施形態では、各サンプル点の一次スコアに重み付けを行って再計算を行うことで、各サンプル点について二次スコアを算出する。そして、最も高い二次スコアを上記移動目標基準座標として設定するという処理を行う。本実施形態では、当該二次スコアは以下のような式(1)を使って算出される。
【数1】
(なお、変数i,jは、各サンプル点、サンプルベクトルを配列として扱うときの各配列要素の番号である。)
例えば、上記サンプル点Aの二次スコアを求める場合は、サンプルベクトルAと、サンプルベクトルA~Hのそれぞれとの内積が求められ、サンプル点Aの一次スコアと各内積とを乗算した値を合計することになる。すなわち、サンプル点Aの二次スコアの計算においては、プレイヤキャラクタから見てサンプル点Aと同じ側にある点(サンプル点B、H)の一次スコアが、サンプル点Aとの近さに応じた重みづけされた値として加算されるとともに、プレイヤキャラクタから見てサンプル点Aと逆側にある点(サンプル点D、E、F)の一次スコアについては、符号が反転されて、サンプル点Aとの近さに応じた重みづけされた値として加算される。(なお、サンプル点C、Gについては、サンプルベクトルAとサンプルベクトルC、Gとの内積がゼロであることから、サンプル点Aの二次スコアの算出には影響を与えない。)このようにして算出された二次スコアは、プレイヤキャラクタから見てサンプル点Aと同じ側にある点の一次スコアが高いほど(安全なほど)大きい値となり、プレイヤキャラクタから見てサンプル点Aと逆側にある点の一次スコアが低いほど(危険なほど)大きい値となる。したがって、二次スコアが最も高いサンプル点は、同じ側の点が安全で、反対側の点が危険である可能性が高く、最も安全度の高いサンプル点と考えられるため、これを上記移動目標基準座標として設定する。
【0076】
このように、本実施形態では、リーダーキャラクタの周辺の位置(空間)の安全度を算出し、危険とされる位置以外に向かう方向のうち、より安全度の高い方向を選んでサブキャラクタの隊列が移動するようにしている。これにより、サブキャラクタをリーダーキャラクタに追従移動させる場合でも、(一部の)サブキャラクタが崖のような地形で落下することを防ぐことができる。
【0077】
[本実施形態のゲーム処理の詳細]
次に、
図19~
図24を参照して、本実施形態におけるゲーム処理についてより詳細に説明する。なお、ここでは、主に、上記のような安全度を考慮したサブキャラクタの隊列の移動制御に関する処理を中心に説明し、その他のゲーム処理の詳細説明は割愛する。
【0078】
[使用データについて]
まず、本ゲーム処理にて用いられる各種データに関して説明する。
図19は、本体装置2のDRAM85に記憶される各種データの一例を示すメモリマップである。本体装置2のDRAM85には、ゲームプログラム301、リーダーキャラクタデータ302、サブキャラクタデータ303、スロット管理データ304、スロット対応付けデータ305、地形データ306、サンプル点データ307、操作データ308が少なくとも記憶されている。
【0079】
ゲームプログラム301は、本実施形態におけるゲーム処理を実行するためのプログラムである。
【0080】
リーダーキャラクタデータ302は、上記リーダーキャラクタに関するデータである。リーダーキャラクタデータ302には、リーダーキャラクタの現在位置の座標を示すリーダ座標と、リーダーキャラクタの姿勢ベクトルと、上述したような移動目標基準座標とが含まれる。
【0081】
サブキャラクタデータ303は、上記サブキャラクタに関するデータである。サブキャラクタデータ303には、サブキャラクタ毎に、サブキャラ座標が記憶される。サブキャラ座標は、サブキャラクタの現在位置の座標である。
【0082】
スロット管理データ304は、上述したスロットを管理するためのデータである。スロット管理データ304には、スロット毎に、スロット座標が記憶される。
【0083】
スロット対応付けデータ305は、各スロットと各サブキャラクタとの対応関係を定義したデータである。
【0084】
地形データ306は、仮想空間に配置される各種地形オブジェクトのデータである。各地形オブジェクトのデータには、メッシュモデルのデータや配置位置を示すデータが含まれる。また、各地形オブジェクトのデータには、上述したような、その地形の属性を示す情報も含まれる。
【0085】
サンプル点データ307は、上記
図17で示したようなサンプル点を(一時的に)記憶したものである。
図20に、サンプル点データ307のデータ構成の一例を示す。サンプル点データ307には、複数のサンプル点(本例では8個)のデータが格納される、各サンプル点のデータには、サンプル点座標、一次スコア、二次スコアが含まれる。サンプル点座標は、そのサンプル点の仮想空間座標系における座標である。一次スコア、二次スコアはそれぞれ、上記のような一次スコア、二次スコアを記憶したものである。
【0086】
図19に戻り、操作データ308は、ユーザが操作する上記コントローラから得られるデータである。すなわち、ユーザが行った操作内容を示すデータである。
【0087】
[プロセッサ81が実行する処理の詳細]
次に、本実施形態におけるゲーム処理の詳細を説明する。本実施形態では、1以上のプロセッサが1以上のメモリに記憶された上記プログラムを読み込んで実行することにより、以下に示すフローチャートが実現される。なお、当該フローチャートは、処理過程の単なる一例にすぎない。そのため、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判定ステップで利用される閾値も、単なる一例であり、必要に応じて他の値を採用してもよい。
【0088】
図21は、本実施形態に係るゲーム処理の詳細を示すフローチャートである。なお、
図21のステップS2~S6の処理ループは、1フレーム毎に繰り返し実行される。
【0089】
[準備処理]
まず、ステップS1で、プロセッサ81は、ゲームを開始する準備のためのゲーム準備処理を実行する。この処理では、ゲームフィールドを含む仮想3次元空間を構築し、地形オブジェクト、リーダーキャラクタ、サブキャラクタ等の各種オブジェクトを配置する処理が実行される。そして、各種オブジェクトが配置された仮想空間が仮想カメラで撮像されることでゲーム画像が生成され、当該画像が据置型モニタ等に出力される。また、以下の処理で用いられる各種データの初期化も行われる。
【0090】
[リーダーキャラクタの移動制御処理]
次に、ステップS2で、プロセッサ81は、操作データ308を取得する。次に、ステップS3で、プロセッサ81は、リーダー移動制御処理を行う。
図22は、当該リーダー移動制御処理の詳細を示すフローチャートである。
図22において、まず、ステップS11で、プロセッサ81は、操作データ308で示される操作内容に基づき、上記リーダー座標および姿勢ベクトルを更新することで、リーダーキャラクタの移動制御を行う。
【0091】
次に、ステップS12で、プロセッサ81はサンプル点を決定し、サンプル点データ307に記憶する。本例では、上記
図17に示したような、リーダーキャラクタを中心とした所定の半径の円周上で、45度間隔で得られる座標をサンプル点として決定する。そして、決定した各座標を各サンプル点のサンプル点座標として記憶する。ここでは、上記
図17で示したような8個のサンプル点について、上記サンプル点A~Hの順番でサンプル点データ307(サンプル点[1]~サンプル点[8])に格納されるものとする。
【0092】
次に、ステップS13で、プロセッサ81は、各サンプル点の一次スコアを上記のような手法で算出し、サンプル点データ307の一次スコアとして記憶する。すなわち、プロセッサ81は、各サンプル点の真上から真下に直線を飛ばし、衝突が無い場合、あるいは、「水面」に衝突した場合は、そのサンプル点の一次スコアに”-1.0”を設定し、それ以外の場合は”0”を設定する。
【0093】
次に、ステップS14で、プロセッサ81は、サンプル点データ307の中に、一次スコアが”-1.0”のサンプル点が存在するか否かを判定する。当該判定の結果、存在しない場合は(ステップS14でNO)、ステップS15で、プロセッサ81は、リーダーキャラクタの位置と向きに基づき、リーダーキャラクタの向き(進行方向)と反対方向側(後方)の所定座標に移動目標基準座標を設定する。当該所定座標は、例えば、予め定義されている相対的な距離だけ、リーダーキャラクタの向きと逆方向に離れた位置である。その後、プロセッサ81は、リーダー移動制御処理を終了する。
【0094】
一方、上記ステップS14の判定の結果、一次スコアが”-1.0”のサンプル点が1個でも存在する場合は(ステップS14でYES)、ステップS16で、プロセッサ81は、二次スコア算出処理を実行する。
図23は、当該二次スコア算出処理の詳細を示すフローチャートである。
図23において、まず、ステップS21で、プロセッサ81は、変数iに1を設定する。
【0095】
次に、ステップS22で、プロセッサ81は、8つのサンプル点の中から以下の計算処理の対象とするサンプル点[i]を1つ選択する(以下、処理対象サンプル点と呼ぶ)。続くステップS23で、プロセッサ81は、変数jに1を設定する。
【0096】
次に、ステップS24で、プロセッサ81は、サンプルベクトル[i]とサンプルベクトル[j]との内積mを算出する。サンプルベクトル[i]はリーダー座標から処理対象サンプル点へのベクトルである。サンプルベクトル[j]は、リーダー座標から、サンプル点データ307において変数jで示される順番のサンプル点へのベクトルである。
【0097】
次に、ステップS25で、プロセッサ81は、サンプルベクトル[j]の一次スコアと上記内積mを乗じた値を暫定スコア[i]として算出する。
【0098】
次に、ステップS26で、プロセッサ81は、変数jに1を加算する。続くステップS27で、プロセッサ81は、変数jが8より大きいか否かを判定し、8以下の場合は(ステップS27でNO)、上記ステップS24に戻り、処理を繰り返す。
【0099】
一方、変数jが9以上であれば(ステップS27でYES)、ステップS28で、プロセッサ81は、上記ステップS25で算出した暫定スコアを合計した値を算出する。そして、プロセッサ81は、当該算出した合計値を、処理対象サンプル点の二次スコア[i]としてサンプル点データ307に記憶する。
【0100】
次に、ステップS29で、プロセッサ81は、変数iに1を加算する。続くステップS30で、プロセッサ81は、変数iが8より大きいか否かを判定し、8以下の場合は(ステップS30でNO)、上記ステップS22に戻り、処理を繰り返す。変数iが9以上であれば(ステップS30でYES)、プロセッサ81は、当該二次スコア算出処理を終了する。
【0101】
図22に戻り、次に、ステップS17で、プロセッサ81は、各サンプル点について算出された二次スコアが最も高いサンプル点を、上記移動目標基準座標として記憶する。その後、プロセッサ81は、リーダー移動制御処理を終了する。
【0102】
[サブキャラクタの移動制御処理]
図21に戻り、リーダー移動制御処理が終われば、次に、ステップS4で、プロセッサ81は、サブキャラクタ移動制御処理を実行する。
図24は、当該サブキャラクタ移動制御処理の詳細を示すフローチャートである。
図24において、まず、ステップS51で、プロセッサ81は、上記移動目標基準座標に基づき、上記各サブキャラクタに対応付けられる各スロットの位置を決定してスロット管理データ304に記憶する。例えば、各スロットの位置は、移動目標基準座標を基準とした相対座標として予め定義されており、この相対座標に応じて各スロットの位置が決定されればよい。
【0103】
次に、ステップS52で、プロセッサ81は、処理の対象とするサブキャラクタ(以下、処理対象キャラと呼ぶ)を1体、決定する。換言すれば、以下に説明するステップS53~S54の処理は、サブキャラクタの数だけ順次繰り返される。
【0104】
次に、ステップS53で、プロセッサ81は、処理対象キャラに対応付けられたスロットの方向に、必要に応じてサブキャラクタの姿勢(向き)を変更する。そして、プロセッサ81は、当該スロットの方向に当該処理対象キャラを所定距離だけ移動させる。
【0105】
次に、ステップS54で、プロセッサ81は、全てのサブキャラクタについて、各自のスロットに向けての移動が完了したか否かを判定する。その結果、未処理のサブキャラクタが残っている場合は(ステップS58でNO)、上記ステップS52に戻り、未処理のサブキャラクタの中から次の処理対象キャラを決定して、同様の処理を繰り返す。一方、全てのサブキャラクタについて処理を完了した場合は(ステップS58でYES)、当該サブキャラクタ移動制御処理は終了する。
【0106】
[ゲーム画像出力処理]
図21に戻り、サブキャラクタ移動制御処理が終われば、次に、ステップS5で、プロセッサ81は、上記の処理が反映されたゲーム画像を生成して出力する。
【0107】
次に、ステップS6で、プロセッサ81は、ゲームの終了条件が満たされたか否かを判定し、満たされていない場合は(ステップS6でNO)、上記ステップS2に戻り、処理が繰り返される。満たされた場合は(ステップS6でYES)、当該ゲーム処理は終了する。
【0108】
以上で、本実施形態に係るゲーム処理の詳細説明を終了する。
【0109】
このように、本実施形態では、サブキャラクタをリーダーキャラクタに追従移動させる際に、リーダーキャラクタの周囲の安全度を調べ、安全度の低い場所から遠ざかるような方向に向けてサブキャラクタの隊列が移動するように制御している。これにより、追従移動中に、例えばサブキャラクタが崖から落下してしまうような、ユーザにとって不利な状況が発生することを防止できる。
【0110】
また、上記のような移動目標基準座標を用いる処理によって、複数のサブキャラクタについて、その移動先の安全度を一括で算出している。そのため、サブキャラクタ毎に移動先の安全度を算出する場合に比べて処理負荷を軽減できる。
【0111】
[変形例]
なお、本実施形態では、「危険な地形」として、崖や水面を例示したが、この他、侵入するとダメージを受ける、いわゆる「ダメージ床」のような地形を危険な地形として扱ってもよい。
【0112】
また、上記実施形態では、全てのサブキャラクタのスロット位置を同じ移動目標基準座標に基づいて決める場合を例示した。例えば、上記で例示したような崖から落下する危険を避けるため、サブキャラクタの隊列全体を、崖からより遠くにある移動目標基準座標(の近傍)に向けて移動させるような制御を挙げた。この点、他の実施形態では、サブキャラクタ全体に一律に適用するのではなく、一部のサブキャラクタだけ、移動方向を変更するような制御を行ってもよい。例えば、上記サブキャラクタに複数の種類(属性)が設けられている場合を想定する。一例を挙げると、第1の種類のサブキャラクタ(第1種サブキャラ)と第2の種類のサブキャラクタ(第2種サブキャラ)とが存在しているとする。そして、前者は「水辺」という地形に侵入すると沈んでしまうが、後者は、「水辺」に侵入しても泳いで移動可能である(水辺が危険な地形とはならない)とする。このような2種類のサブキャラクタが存在する場合、第1種サブキャラだけで構成される第1種隊列と、第2種サブキャラだけで構成される第2種隊列の2つの隊列を構成する。そして、隊列毎(種類毎)に上記移動目標基準座標を決定するようにしてもよい。この際、上記一次スコアの算出に際して、サブキャラクタの種類毎に算出してもよい。例えば、上記「水辺」について、第1種サブキャラに対しては一次スコアは”-1(危険)”と算出され、第2種サブキャラに対しては一次スコアが”0(安全)”と算出されるようにしてもよい。そして、二次スコアおよび移動目標基準座標もサブキャラクタの種類毎に算出してもよい。これにより、例えば、通常は、両隊列共に、リーダーキャラクタの後方から追従移動するよう制御される。一方、リーダーキャラクタが水辺に近づいた場合は、第1種隊列は、水辺からより遠い位置に設定された第1の移動目標基準座標に基づき上記スロットが設定される。そして、第2種隊列は、リーダーキャラクタの後方に設定された第2の移動目標基準座標に基づき上記スロットが設定されることになる。つまり、第2種隊列は、リーダーキャラクタが水辺に沿って移動したとしても、通常通り、リーダーキャラクタの後方から追従移動するよう制御されてもよい。
【0113】
また、上記のように複数の種類のサブキャラクタを用いる場合は、種類毎に異なる移動目標基準座標を設定するほか、例えば、隊列内で最も多い種類のサブキャラクタを基準にして共通の移動目標基準座標を設定してもよい。例えば、上記の例で言うと、第1種サブキャラが2体、第2種サブキャラが10体で構成される1つの隊列があると想定する。この場合に、リーダーキャラクタが水辺に沿って移動するときは、多数派である第2種サブキャラを基準に安全度が判定され、結果として、12体全てのサブキャラクタがリーダーキャラクタの後方から追従移動するよう制御されてもよい。
【0114】
また、上記実施形態では、移動目標基準座標として上記サンプル点の中から一つ(最も二次スコアが高いもの)を選ぶような例を挙げた。この点、他の実施形態では、サンプル点の座標と移動目標基準座標とは必ずしも一致しなくてもよい。例えば、最も二次スコアが高いサンプル点の座標を少しオフセットした座標を移動目標基準座標として設定してもよいし、各サンプル点の一次スコアから、プレイヤキャラクタから所定距離の任意の点の二次スコアを計算するようにしてもよい。
【0115】
また、サンプル点の数については、固定の数としてもよいし、ゲーム状況に応じて変動させてもよい。サンプル点を増やせば、安全度の高い位置をより正確に判定できる点で有利であり、サンプル点を減らせば、処理負荷が軽減される点で有利である。
【0116】
また、サンプル点の位置について、上記の例では、
図17で示したような、リーダーキャラクタの現在座標を中心とする円の円周上に等角度で配置される例を示した。他の実施形態では、リーダーキャラクタの現在座標から各サンプル点までの距離や、サンプル点間の角度は、必ずしも同じ値でなくてもよい。リーダーキャラクタの周囲(近傍)といえるような範囲内であれば、どのような位置をサンプル点として採用してもよい。
【0117】
また、リーダーキャラクタの周囲の安全度の算出については、他の実施形態では、上述以外の手法で算出してもよい。例えば、上記一次スコアの算出については、地形オブジェクト自体に、安全度を示す情報を持たせるようにしてもよい。そして、上記のようにサンプル点を決定し、各サンプル点に地形オブジェクトが存在するか否か(崖か否か)と、存在する場合は、その地形オブジェクトが有する安全度を示す情報に基づいて、各サンプル点の安全度を算出してもよい。また、本実施例ではある位置へサブキャラクタが移動することの許容度を示す値として当該位置の安全度(安全であるほどスコアが高くなる値)を判定しているが、移動することの許容度を示す値として、危険度(危険であるほどスコアが高くなる値)を用いて、危険度が低い方へサブキャラクタを移動させるようにしてもよい。
【0118】
また、上記二次スコアに関して、上記の例では、全てのサンプル点を考慮して二次スコアを算出する例を挙げた。この他、例えば、あるサンプル点の両隣にあるサンプル点だけを考慮して、これらの加重平均を求めて二次スコアとしてもよい。この場合、上述した手法よりは安全度の判定精度は低下し得るが、処理負荷を軽減することができる。判定精度を場面により調整することで、敢えて「一応は危険を避けるように動くが、落下する可能性も残っている」というような移動制御(ゲームバランス)にして、リーダーキャラクタの操作について、ユーザに緊張感を持たせるようなことも可能である。
【0119】
また、上記実施形態においては、ゲーム処理に係る一連の処理を単一の本体装置2で実行される場合を説明した。他の実施形態においては、上記一連の処理が複数の情報処理装置からなる情報処理システムにおいて実行されてもよい。例えば、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの一部の処理がサーバ側装置によって実行されてもよい。更には、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの主要な処理がサーバ側装置によって実行され、当該端末側装置では一部の処理が実行されてもよい。また、上記情報処理システムにおいて、サーバ側のシステムは、複数の情報処理装置によって構成され、サーバ側で実行するべき処理を複数の情報処理装置が分担して実行してもよい。また、いわゆるクラウドゲーミングの構成としてもよい。例えば、本体装置2は、ユーザの操作を示す操作データを所定のサーバに送り、当該サーバにおいて各種ゲーム処理が実行され、その実行結果が動画・音声として本体装置2にストリーミング配信されるような構成としてもよい。
【符号の説明】
【0120】
1 ゲームシステム
2 本体装置
3 左コントローラ
4 右コントローラ
81 プロセッサ
84 フラッシュメモリ
85 DRAM