(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-18
(45)【発行日】2024-10-28
(54)【発明の名称】情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法
(51)【国際特許分類】
A63F 13/55 20140101AFI20241021BHJP
A63F 13/577 20140101ALI20241021BHJP
【FI】
A63F13/55
A63F13/577
(21)【出願番号】P 2022087633
(22)【出願日】2022-05-30
【審査請求日】2023-11-06
(73)【特許権者】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】110001276
【氏名又は名称】弁理士法人小笠原特許事務所
(74)【代理人】
【識別番号】100130269
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】神門 有史
(72)【発明者】
【氏名】水上 明
【審査官】嶋田 行志
(56)【参考文献】
【文献】特開2014-023719(JP,A)
【文献】特開2009-095437(JP,A)
【文献】国際公開第2018/042467(WO,A1)
【文献】特開2018-089262(JP,A)
【文献】特許第6114460(JP,B1)
【文献】国際公開第2018/042466(WO,A1)
【文献】特開2021-186370(JP,A)
【文献】特開2018-110659(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
A63F 13/00-A63F 13/98
A63F 9/24
YouTube
(57)【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、
前記コンピュータを、
ユーザの入力に応じて仮想空間内でプレイヤキャラクタの移動および対象アクションを行わせるプレイヤキャラクタ制御手段と、
前記プレイヤキャラクタが第1位置において前記対象アクションを行ったとき以前の当該プレイヤキャラクタの位置に基づいて、基準位置を決定する基準位置決定手段と、
前記プレイヤキャラクタが前記対象アクションを行うことにより当該プレイヤキャラクタが地形オブジェクトと第2位置で接触した場合、前記基準位置を基準とした当該第2位置の高さが高さ閾値以上であるか否かを判定する判定手段と、
前記基準位置を基準とした前記第2位置の高さが前記高さ閾値以上であると判定された場合、前記地形オブジェクトから離れる方向のうち当該地形オブジェクトに対する前記第1位置側の方向を強制移動方向として、または当該地形オブジェクトに沿う下向きの方向を当該強制移動方向として、前記プレイヤキャラクタを移動させる強制移動手段として機能させる、情報処理プログラム。
【請求項2】
前記プレイヤキャラクタ制御手段は、前記ユーザの入力に基づいて前記対象アクションとして前記プレイヤキャラクタにジャンプを行わせ、
前記基準位置決定手段は、前記プレイヤキャラクタが前記ジャンプを開始した位置を前記基準位置として決定する、請求項1に記載の情報処理プログラム。
【請求項3】
前記基準位置決定手段は、前記プレイヤキャラクタが前記ジャンプを開始したときの当該プレイヤキャラクタの足下の位置を前記基準位置として決定する、請求項2に記載の情報処理プログラム。
【請求項4】
前記プレイヤキャラクタ制御手段は、仮想空間内において、前記プレイヤキャラクタの前記足下が地面に接している場合と、前記プレイヤキャラクタが水面に浮いており、当該プレイヤキャラクタの当該足下が当該水面より下に位置する場合とで、前記ジャンプにより当該プレイヤキャラクタの前記足下が高くなる高さが同じとなるように当該ジャンプを制御する、請求項3に記載の情報処理プログラム。
【請求項5】
前記強制移動手段は、前記第2位置において前記地形オブジェクトが坂道ではないと判定された場合に限り、前記プレイヤキャラクタを前記強制移動方向へ移動させる、請求項1に記載の情報処理プログラム。
【請求項6】
前記強制移動手段は、前記地形オブジェクトの前記第2位置における法線方向に基づく方向を前記強制移動方向として用いる、請求項1に記載の情報処理プログラム。
【請求項7】
前記強制移動手段は、前記地形オブジェクトの前記第2位置における前記法線方向について、当該法線方向に上方向の成分がある場合は当該上方向の成分を0にした方向を前記強制移動方向として用いる、請求項6に記載の情報処理プログラム。
【請求項8】
前記強制移動手段は、前記地形オブジェクトの前記第2位置における法線方向の上方向成分が上成分閾値よりも大きい場合は、前記第2位置から前記第1位置に向かう方向を前記強制移動方向として用いる、請求項1に記載の情報処理プログラム。
【請求項9】
前記プレイヤキャラクタ制御手段は、前記基準位置を基準とした前記第2位置の高さが前記高さ閾値未満であると判定された場合、前記地形オブジェクトのコリジョンと前記プレイヤキャラクタのコリジョンに基づいて前記プレイヤキャラクタを移動させる、請求項1に記載の情報処理プログラム。
【請求項10】
前記強制移動手段は、前記プレイヤキャラクタが前記対象アクションを行うことによって前記地形オブジェクトに沿いながら当該地形オブジェクトと前記第2位置で接触した場合であっても、前記基準位置を基準とした前記第2位置の高さが前記高さ閾値以上であると判定されたときは、前記プレイヤキャラクタを前記強制移動方向へ移動させる、請求項1に記載の情報処理プログラム。
【請求項11】
前記地形オブジェクトのメッシュと、前記地形オブジェクトのコリジョンは一致する、請求項1に記載の情報処理プログラム。
【請求項12】
ユーザの入力に応じて仮想空間内でプレイヤキャラクタの移動および対象アクションを行わせるプレイヤキャラクタ制御手段と、
前記プレイヤキャラクタが第1位置において前記対象アクションを行ったとき以前の当該プレイヤキャラクタの位置に基づいて、基準位置を決定する基準位置決定手段と、
前記プレイヤキャラクタが前記対象アクションを行うことにより当該プレイヤキャラクタが地形オブジェクトと第2位置で接触した場合、前記基準位置を基準とした当該第2位置の高さが高さ閾値以上であるか否かを判定する判定手段と、
前記基準位置を基準とした前記第2位置の高さが前記高さ閾値以上であると判定された場合、前記地形オブジェクトから離れる方向のうち当該地形オブジェクトに対する前記第1位置側の方向を強制移動方向として、または当該地形オブジェクトに沿う下向きの方向を当該強制移動方向として、前記プレイヤキャラクタを移動させる強制移動手段とを備える、情報処理装置。
【請求項13】
ユーザの入力に応じて仮想空間内でプレイヤキャラクタの移動および対象アクションを行わせるプレイヤキャラクタ制御手段と、
前記プレイヤキャラクタが第1位置において前記対象アクションを行ったとき以前の当該プレイヤキャラクタの位置に基づいて、基準位置を決定する基準位置決定手段と、
前記プレイヤキャラクタが前記対象アクションを行うことにより当該プレイヤキャラクタが地形オブジェクトと第2位置で接触した場合、前記基準位置を基準とした当該第2位置の高さが高さ閾値以上であるか否かを判定する判定手段と、
前記基準位置を基準とした前記第2位置の高さが前記高さ閾値以上であると判定された場合、前記地形オブジェクトから離れる方向のうち当該地形オブジェクトに対する前記第1位置側の方向を強制移動方向として、または当該地形オブジェクトに沿う下向きの方向を当該強制移動方向として、前記プレイヤキャラクタを移動させる強制移動手段とを備える、情報処理システム。
【請求項14】
情報処理装置のコンピュータにおいて実行させる情報処理方法であって、
前記コンピュータに、
ユーザの入力に応じて仮想空間内でプレイヤキャラクタの移動および対象アクションを行わせ、
前記プレイヤキャラクタが第1位置において前記対象アクションを行ったとき以前の当該プレイヤキャラクタの位置に基づいて、基準位置を決定させ、
前記プレイヤキャラクタが前記対象アクションを行うことにより当該プレイヤキャラクタが地形オブジェクトと第2位置で接触した場合、前記基準位置を基準とした当該第2位置の高さが高さ閾値以上であるか否かを判定させ、
前記基準位置を基準とした前記第2位置の高さが前記高さ閾値以上であると判定された場合、前記地形オブジェクトから離れる方向のうち当該地形オブジェクトに対する前記第1位置側の方向を強制移動方向として、または当該地形オブジェクトに沿う下向きの方向を当該強制移動方向として、前記プレイヤキャラクタを移動させる、情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プレイヤオブジェクトが所定の段差を越えるためのアクション(例えばジャンプ)を行うことが可能なゲーム処理に関する。
【背景技術】
【0002】
従来から、キャラクタのコリジョンに関する設定が可能な技術(ゲームエンジン)が知られている(例えば非特許文献1)。このような技術では、球形のコリジョンが設定されているキャラクタが所定のオブジェクトに乗った場合、上記コリジョンに関する所定のパラメータの設定のオン・オフによって、当該オブジェクトのコリジョンに合わせてキャラクタが滑るようにしたり、滑らないようにしたりすることができる。
【先行技術文献】
【非特許文献】
【0003】
【文献】EPICGAMES、”UNREAL ENGINE 4.26 Documentation Can Character Step Up”、[online]、[令和4年5月6日検索]、インターネット(URL:https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/Collision/CanCharacterStepUp/)
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記の技術は、上記パラメータの設定によって、球形のコリジョンを有するキャラクタがコリジョンに合わせて滑るようになるだけのものであった。ここで、当該キャラクタに越えて欲しくない高さの段差が設けられている場合を想定する。この場合、キャラクタにジャンプさせることで、このような段差を強引に乗り越えることができてしまう場合もあった。例えばジャンプの高さと段差の高さの差が僅かであった場合に、キャラクタがコリジョンに合わせて滑るように設定していても、ジャンプの勢いで強引に乗り越えることができてしまう場合があった。その結果、ゲームの開発者が想定しているキャラクタの移動可能範囲を越えた移動ができてしまう場合があった。
【0005】
それ故に、本開示における目的は、キャラクタの移動可能範囲を適切な範囲に制限できる情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供することである。
【課題を解決するための手段】
【0006】
上記目的を達成するために、例えば以下のような構成例が挙げられる。
【0007】
(構成1)
構成1は、情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、コンピュータを、プレイヤキャラクタ制御手段と、基準位置決定手段と、判定手段と、強制移動手段として機能させる。プレイヤキャラクタ制御手段は、ユーザの入力に応じて仮想空間内でプレイヤキャラクタの移動および対象アクションを行わせる。基準位置決定手段は、プレイヤキャラクタが第1位置において対象アクションを行ったとき以前の当該プレイヤキャラクタの位置に基づいて、基準位置を決定する。判定手段は、プレイヤキャラクタが対象アクションを行うことにより当該プレイヤキャラクタが地形オブジェクトと第2位置で接触した場合、基準位置を基準とした当該第2位置の高さが高さ閾値以上であるか否かを判定する。強制移動手段は、基準位置を基準とした第2位置の高さが高さ閾値以上であると判定された場合、地形オブジェクトから離れる方向のうち当該地形オブジェクトに対する第1位置側の方向を強制移動方向として、または当該地形オブジェクトに沿う下向きの方向を当該強制移動方向として、プレイヤキャラクタを移動させる。
【0008】
上記構成によれば、高さ閾値を用いた判定に基づき、プレイヤキャラクタに地形オブジェクトを越えて移動させないような制御を行うことができる。これにより、プレイヤキャラクタの移動可能範囲を適切な範囲(開発者の意図する範囲)に制限することができる。
【0009】
(構成2)
構成2は、上記構成1において、プレイヤキャラクタ制御手段は、対象アクションとして、ユーザの入力に基づいてプレイヤキャラクタにジャンプを行わせてもよい。更に、基準位置決定手段は、プレイヤキャラクタがジャンプを開始した位置(第1位置)を基準位置として決定してもよい。
【0010】
上記構成によれば、ジャンプで越えられたくない場所について、確実に越えられないようにすることができる。
【0011】
(構成3)
構成3は、上記構成2において、基準位置決定手段は、プレイヤキャラクタがジャンプを開始したときの当該プレイヤキャラクタの足下の位置を基準位置として決定してもよい。
【0012】
上記構成によれば、例えばゲームのプレイ中に、操作キャラクタを切り替えたり、何らかのギミックでプレイヤキャラクタの外形が変化する等で、プレイヤキャラクタの高さ(身長・大きさ)が変化した場合でも、高さ閾値として同じ値を用いることができる。
【0013】
(構成4)
構成4は、上記構成3において、プレイヤキャラクタ制御手段は、プレイヤキャラクタの足下が地面に接している場合と、プレイヤキャラクタが水面に浮いており、当該プレイヤキャラクタの当該足下が当該水面より下に位置する場合とで、ジャンプにより当該プレイヤキャラクタの足下が高くなる高さが同じとなるように当該ジャンプを制御してもよい。
【0014】
上記構成によれば、プレイヤキャラクタがジャンプする場所に応じて異なる高さ閾値を用いる必要がなくなる。これにより、処理の簡素化が図れる。
【0015】
(構成5)
構成5は、上記構成1~4において、強制移動手段は、第2位置における地形オブジェクトの面の水平方向との傾きの差が角度閾値以上の場合に限り、プレイヤキャラクタを強制移動方向へ移動させてもよい。
【0016】
上記構成によれば、第2位置が、例えば立っていることが不自然に思えるような急な傾斜である場合に限り、強制移動を行わせる。これにより、何らかの理由で角に当たらず高い段差を越えたときや、緩やかな坂道に着地したときにまで強制移動されることでユーザに違和感を与えることを防ぐことができる。
【0017】
(構成6)
構成6は、上記構成1~5において、強制移動手段は、地形オブジェクトの第2位置における法線方向に基づく方向を強制移動方向として用いてもよい。
【0018】
上記構成によれば、接触した地形オブジェクトの面に反発するようにしてプレイヤキャラクタクタを移動させることができる。これにより、ジャンプ等で乗り越えることができない地形オブジェクトであるということをユーザに認識させやすくすることができる。
【0019】
(構成7)
構成7は、上記構成6において、強制移動手段は、地形オブジェクトの第2位置における法線方向について、当該法線方向に上方向の成分がある場合は当該上方向の成分を0にした方向を強制移動方向として用いてもよい。
【0020】
上記構成によれば、重力方向とは逆方向に不自然に反発することを防ぐことができる。
【0021】
(構成8)
構成8は、上記構成1~7において、強制移動手段は、地形オブジェクトの第2位置における法線方向の上方向成分が上成分閾値よりも大きい場合は、第2位置から第1位置に向かう方向を強制移動方向として用いてもよい。
【0022】
上記構成によれば、第2位置が水平に近い面の場合にその法線方向に移動させるとすると、法線方向の水平方向成分(横方向成分)が小さくなるため、第2位置の少しの凹凸の違いによって水平方向成分の方向が大きく変わってしまう。そのため、第2位置が水平に近い面の場合は、法線方向は利用せず、第2位置から第1位置に向かう方向を強制移動方向することで、ユーザにとって違和感がある方向に反発するような動きを防ぐことができる。
【0023】
(構成9)
構成9は、上記構成1~8において、プレイヤキャラクタ制御手段は、基準位置を基準とした第2位置の高さが高さ閾値未満であると判定された場合、地形オブジェクトのコリジョンとプレイヤキャラクタのコリジョンに基づいてプレイヤキャラクタを移動させてもよい。
【0024】
上記構成によれば、基準位置を基準とした第2位置の高さが高さ閾値未満であれば、通常のコリジョン判定によって処理できる。そのため、プレイヤキャラクタの動作について、必要以上にユーザに違和感を与えることがない。
【0025】
(構成10)
構成10は、上記構成1~9において、強制移動手段は、プレイヤキャラクタが対象アクションを行うことによって地形オブジェクトに沿いながら地形オブジェクトと第2位置で接触した場合であっても、基準位置を基準とした第2位置の高さが高さ閾値以上であると判定されたときは、プレイヤキャラクタを強制移動方向へ移動させてもよい。
【0026】
上記構成によれば、ある地形オブジェクトについて、ユーザが垂直ジャンプで越えることを試みた場合、そこが越えることができない地形オブジェクトであることをユーザに認識させることができる。
【0027】
(構成11)
構成11は、上記構成1~10において、地形オブジェクトのメッシュと、地形オブジェクトのコリジョンは一致してもよい。
【0028】
上記構成によれば、段差のある地形オブジェクトについて、その段差を越えることが可能か否かを、目視によってプレイヤにおおよその判断をさせることができる。
【発明の効果】
【0029】
本実施形態によれば、プレイヤキャラクタの移動範囲を、例えばゲーム開発者が意図する移動範囲に制限できる。これにより、適正なゲームバランスによるゲームプレイをプレイヤに提供でき、ゲームの興趣性を向上できる。
【図面の簡単な説明】
【0030】
【
図1】本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図
【
図2】本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図
【
図6】本体装置2の内部構成の一例を示すブロック図
【
図7】本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図
【
図9】本実施形態に係る処理の概要を説明するための図
【
図10】本実施形態に係る処理の概要を説明するための図
【
図11】本実施形態に係る処理の概要を説明するための図
【
図12】本実施形態に係る処理の概要を説明するための図
【
図13】本実施形態に係る処理の概要を説明するための図
【
図14】本実施形態に係る処理の概要を説明するための図
【
図15】本実施形態に係る処理の概要を説明するための図
【
図16】本実施形態に係る処理の概要を説明するための図
【
図17】本実施形態に係る処理の概要を説明するための図
【
図18】本実施形態に係る処理の概要を説明するための図
【
図24】DRAM85に記憶される各種データの一例を示すメモリマップ
【
図27】本実施形態に係るゲーム処理の詳細を示すフローチャート
【
図28】PC移動制御処理の詳細を示すフローチャート
【
図29】ジャンプ中処理の詳細を示すフローチャート
【発明を実施するための形態】
【0031】
以下、一実施形態について説明する。
【0032】
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(
図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
【0033】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0034】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0035】
図3は、本体装置2の一例を示す六面図である。
図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
【0036】
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
【0037】
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
【0038】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
【0039】
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、
図6に示すスピーカ88)を備えている。
図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
【0040】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
【0041】
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
【0042】
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
【0043】
図4は、左コントローラ3の一例を示す六面図である。
図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、
図4における上下方向(
図4に示すz軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0044】
左コントローラ3は、方向入力デバイスの一例である左アナログスティック(以下、左スティックと呼ぶ)32を備える。
図4に示すように、左スティック32は、ハウジング31の主面に設けられる。左スティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、左スティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、左スティック32を押下する入力が可能である。
【0045】
左コントローラ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プログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
【0046】
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
【0047】
図5は、右コントローラ4の一例を示す六面図である。
図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、
図5における上下方向(
図5に示すz軸方向)に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0048】
右コントローラ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を備える。
【0049】
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
【0050】
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、
図3に示す構成の他、
図6に示す各構成要素81~91、97、および98を備える。これらの構成要素81~91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
【0051】
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0052】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0053】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
【0054】
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0055】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【0056】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0057】
プロセッサ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は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0058】
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
【0059】
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
【0060】
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0061】
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
【0062】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
【0063】
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
【0064】
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、
図6で示しているため
図7では省略している。
【0065】
左コントローラ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(登録商標)の規格に従って行われる。
【0066】
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
【0067】
左コントローラ3は、各ボタン103(具体的には、ボタン33~39、43、44、および47)を備える。また、左コントローラ3は、左スティック32を備える。各ボタン103および左スティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
【0068】
左コントローラ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へ出力される。
【0069】
通信制御部101は、各入力部(具体的には、各ボタン103、左スティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【0070】
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103および左スティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
【0071】
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
【0072】
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
【0073】
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、右スティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
【0074】
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
【0075】
[本実施形態におけるゲーム処理の概要]
次に、本実施形態に係るゲームシステム1で実行されるゲーム処理の動作概要を説明する。上記のように、上記ゲームシステム1では、本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能な構成となっている。本体装置2に左コントローラ3および右コントローラ4を装着した状態でゲームを遊ぶ場合は、ゲーム画像はディスプレイ12に出力される。また、左コントローラ3および右コントローラ4をそれぞれ外した状態の本体装置2単体がクレードルに装着された場合は、本体装置2が、クレードルを介してゲーム画像を据置型モニタ等に出力することもできる。本実施形態では、後者の態様でゲームプレイを行う場合を例に説明する。具体的には、左コントローラ3および右コントローラ4をそれぞれ外した状態の本体装置2単体がクレードルに装着され、本体装置2が、クレードルを介してゲーム画像等を据置型モニタ等に出力する態様である。
【0076】
[画面例]
図8は、本ゲームの舞台となる仮想ゲーム空間を仮想カメラで撮像することで生成される本ゲームの画面例である。なお、本実施形態では当該仮想ゲーム空間が3次元空間である場合を例とするが、他の実施形態では2次元空間であってもよい。また、本実施形態では3人称視点の画面例を例示するが、1人称視点の画面であってもよい。
図8では、プレイヤキャラクタオブジェクト(以下、PCと呼ぶ)201が表示されている。PC201は、ユーザの操作対象となるオブジェクトである。本実施形態では人型のオブジェクトを例示するが、他の実施形態では、PC201は人型でなくてもよく、例えば4足歩行の動物をモチーフにしたオブジェクトであってもよい。
【0077】
また、
図8では、PC201の左側に「段差」のある地形オブジェクトが表示されている。本実施形態で説明する処理は、PC201が所定のアクションを行ったときに、この段差を乗り越えさせるかどうかを制御するための処理である。具体的には、PC201は、ユーザの操作等に基づき、所定のアクションの一例である「ジャンプ」が可能である。そして、当該段差に向けてPCがジャンプした場合に、この段差を乗り越えさせるか否かを判定し、PC201の移動を制御するための処理である。
【0078】
ここで、上記「ジャンプ」に関して補足する。本実施形態における「ジャンプ」は、上記のようなユーザの(自発的な)ジャンプ操作に基づいて行われるものに限らない。例えば、仮想空間内に設置されているジャンプ台やバネ等にPC201が乗ることで自動的にジャンプする(させられる)ような場合も含む。またその他、例えばPC201が鳥のオブジェクトであり、滑空移動する場合に、「羽ばたき」を行って一時的に上昇するようなアクションも、ここでいう「ジャンプ」に相当するものとして扱ってもよい。
【0079】
また、本実施形態では、説明の簡便化のため、PC201がジャンプ中の間は、ユーザの操作に基づいて移動方向を変化させることはできない場合を例に説明する。他の実施形態では、PC201がジャンプ中であっても、ユーザの操作に基づいて移動方向を変化可能としてもよい。この場合でも、以下に説明するような処理は適用可能である。
【0080】
以下、本実施形態に係る制御について説明するが、まず、以下の説明の前提として、想定する段差について簡単に説明する。上記段差は、ゲームデザイン等の観点から、ゲーム開発者からすれば、ある高さの地面からは、PC201のジャンプによって「乗り越えて欲しくない」「乗り越えさせたくない」という位置づけの段差であることを想定する。換言すれば、当該段差は、PC201の移動可能範囲を制限するような役割を有するものとも言える(なお、後述の処理自体は、どのような段差であるかは区別することなく実行されるものである)。
【0081】
次に、このような、開発者側からすれば「乗り越えて欲しくない」段差に向かってPC201がジャンプした場合に、従来の手法で処理する場合の問題点等について説明する。
図9は、段差とPC201との位置関係を平面的に(例えばxy平面で)示した模式図である。ここでは、ジャンプ中におけるPC201の足下の最高到達点よりも、当該段差の高さのほうがごく僅かに高い場合を想定する。つまり、段差の根元の高さから垂直にジャンプしたときに、ぎりぎりで段差の上に届かない程度の位置関係であるとする(なお、このような高さの関係となる段差の必要性に関して、ゲームデザインやゲームバランス等の観点から、このような段差の配置が必要となることは少なからずあり得る)。このような状況の場合、PC201の移動を、例えば物理演算で行うような場合は、何らかの理由で、本来乗り越えて欲しくない段差が乗り越えられてしまう可能性があった。例えば、この段差に向かって(例えば助走をつけて)PC201をジャンプさせた場合、
図10に示すような移動態様が発生することがあり得る。
図10は、段差の角の部分に、PC201の足下がぎりぎりで接触してしまった場合の移動態様の一例である。
図10では、この場合に、PC201は、段差の角に一瞬引っかかるような動きにはなるものの、段差とのコリジョンを考慮した物理演算の結果、PC201の推進力等が働くような形となり、そのまま進行方向前方に移動できてしまったことを示している。そのため、この段差が乗り越えられないことを前提にゲームバランス等を調整しているような場合に、適切なゲームバランスによるゲームをユーザに提供できなくなる虞がある。
【0082】
ここで、上記のような「乗り越えて欲しくない」段差について、より確実に乗り越えさせないようにする手法として、以下のような手法が考えられる。まず、
図11に示すように、単純に上記の箇所の段差の高さを高くすることが考えられる。また、
図12に示すように、PC201のジャンプ性能(最高到達点)を低く設定するという手法も考えられる。つまり、最高到達点と段差の高さとに明確な差を設けるような手法である。しかし、これらの手法の場合、段差の高さに対してジャンプの高さが相対的に低くなり、ジャンプについての爽快感が失われる虞がある。また、特に段差自体を高くするような場合、マップデザイン等の観点から、見た目や見栄えが損なわれるという懸念もある。このような点を踏まえ、これとは別の手法として、例えば、
図13に示すように、段差部分の見た目はそのままで、段差よりも高い、いわば「見えない壁」のような不可視のコリジョンを設定するという手法も考えられる。これにより、段差の見た目を変えることなく、ジャンプによって乗り越えられてしまうことを確実に防ぐことは可能ではある。しかし、この場合、例えば、少し高い足場からジャンプした場合にまで、当該見えない壁で行く手を遮られてしまう虞があり、このような場合にユーザに違和感を感じさせることになる。
【0083】
そこで、上記のような点を考慮し、本実施形態では、以下のような処理を行うことで、上記のような段差を乗り越えさせないような制御を行い、PC201の移動範囲が適切な範囲となるようにしている。
【0084】
以下、
図14~
図21を用いて、本実施形態に係る処理の概要・原理について説明する。
図14は、PC201がジャンプする前の状態における、PC201と段差との位置関係を示す模式図である。なお、本実施形態では、PC201に設定されているコリジョンの一例として、PC201の中心点を中心とする球形のコリジョンが設定されている場合を例示する。また、当該球形のコリジョンの半径は16cmであり、PC201の全体を覆うような大きさであるものとする。また、上記段差を有する地形オブジェクトについては、当該地形オブジェクトのメッシュモデルと一致するコリジョンが設定されているものとする。
【0085】
図14の状態から、ユーザがPC201をジャンプさせる操作(例えばAボタン53の押下)を行うと、当該ジャンプに係る初速度や加速度等の移動パラメータが算出・設定される。そして、
図15に示すように、当該移動パラメータに基づいた軌道でPC201が移動する(ジャンプする)。ここで、本実施形態では、当該ジャンプの開始時におけるPC201の足下の位置が第1の位置として記憶される。以下、当該第1の位置のことを「基準位置」と呼ぶ。
【0086】
ここで、上記「基準位置」について補足する。本実施形態では、足を有する人型のオブジェクトを想定するため、足が地面と接触している位置を基準位置とする。この点、PC201が足が無いようなオブジェクトの場合(例えばカタツムリ等)は、地面と接触している位置を基準位置とすればよい。例えば、このようなオブジェクトの接触面の略中央となる位置を基準位置としてもよい。
【0087】
上記のようにPC201がジャンプを開始した後、
図16に示すように、段差の角の部分のコリジョンとPC201(の足下部分)のコリジョンが接触したとする。このような接触が発生した場合、第2の位置として、当該接触位置が記憶される。更に、本実施形態では、上記基準位置を基準とした当該接触位置の鉛直方向の高さ(以下、判定用高さと呼ぶ)が、所定の閾値(以下、高さ閾値と呼ぶ)以上であるか否かが判定される。当該高さの一例として、本実施形態では、高さ閾値が35cm、ジャンプの最高到達点の高さが37cmである場合(いずれも仮想空間内におけるスケール)を想定する。そして、当該判定の結果、上記判定用高さが高さ閾値以上である場合は、当該段差を乗り越えさせないような移動制御が行われる。具体的には、当該接触位置(地形オブジェクト)から離れる方向であって、基準位置側の方向に向けて、PC201を反発するようにして強制的に移動させる(以下、このような強制的な移動のことを反発移動と呼ぶ)。換言すれば、高さ閾値を用いずに考えた場合に厳密には(ぎりぎりで)乗り越えられているような状態であっても、反発移動を行わせて乗り越えさせないように制御するものである。一方、上記判定用高さが高さ閾値未満であれば、反発移動は行わずに、地形オブジェクトとPC201のコリジョン関係に基づいた(通常の)移動制御を行わせる。
【0088】
図17に、上記反発移動の一例を示す。本実施形態では、基本的には、衝突位置の面の法線方向に反発移動させる。但し、このような反発における移動方向を決定する際、上方向の成分は反映させないようにしている。
図17の例で言うと、上記ジャンプに係る進行方向は
図17における左方向であり、当該進行方向とは逆方向(
図17の右方向)に移動する例となっている。この場合、上記
図16のように段差の角の部分に接触した直後、
図17における右上方向に反発するのではなく、真右方向に反発して落下するような軌跡となる。そして、最終的には、
図18に示すように、PC201は地面に着地することになる。
【0089】
また、例えば、
図19に示すように、PC201(のコリジョン)が段差の壁に密接するような状態から、
図20に示すように、垂直にジャンプした場合を想定する。この場合、密接しながら壁に沿うようにしてPC201が上方向に移動するが、その結果、基準位置を基準とした、PC201のコリジョンと壁との接触部分の鉛直方向の高さが、高さ閾値に達した時点で(例えば段差の角部分とPC201(のコリジョン)が接触した時点で)、
図21に示すように、基準位置方向(
図21では右方向)への反発移動が行われることになる。
【0090】
このように、本実施形態では、上記判定用高さが高さ閾値以上であるか否かに基づき、反発移動を行う(すなわち、段差を乗り越えさせない)制御を行うか否かを決めている。そのため、例えば、単純にPC201が突進して壁にぶつかって跳ね返るような移動制御は、上記のような判定用高さが高さ閾値以上であるか否かに基づく制御ではない。このような制御と本実施形態の制御とは異なる制御である。
【0091】
ところで、上記の例では、PC201が地面からジャンプすることを想定した例を挙げたが、この他、「水面ジャンプ」と呼ばれるジャンプが可能なゲームも想定される。例えば、
図22に示すような、PC201が水面に浮いているような状態(あるいは泳いでいる状態)からジャンプできるようなゲームもあり得る。この場合、上記基準位置については、PC201の足下の位置を基準位置とすればよい。つまり、水面ジャンプの場合、水面を基準位置とするのではなく、この場合もPC201の足下の位置を基準位置とする。これにより、地面からのジャンプと水面ジャンプとの場合とで、上記高さ閾値として同じ閾値を用いることが可能となる。例えば、PC201が水面に浮いている状態では、PC201の足下が水面から15cm沈んでいるとする。そして、水面ジャンプの高さ(最高到達点)が37cm(水面からは22cm)であるとする。この場合に、もし基準位置を水面とすると、地面からジャンプする場合とは異なる高さ閾値を用いる必要性が出てくる。そのため、水面ジャンプの場合も、PC201の足下を基準位置とすることで、ジャンプしたときの足下の高さ(の変化)が地面からジャンプしたときと同様の高さとなり、両者で共通の上記高さ閾値を用いることが可能となる。これにより、開発負荷の軽減が期待できる。
【0092】
また、本実施形態では、ジャンプした後に着地した場所が「坂道」となる場合は、上記のような反発移動が行われないように制御している。ここで、本実施形態では、「坂道」は、PC201が着地しても違和感がないような傾斜面(道)であるとする。例えば、傾斜角度が5度以上、45度未満の傾斜面である。本実施形態では、このような傾斜面を有する地形オブジェクトについて予め「坂道」として定義する等で、「坂道」か否かの判定を行っている(判定手法の詳細については後述する)これは、例えば(ある程度緩やかな)登り坂でジャンプして着地した場合に、
図23に示すように、「判定用高さが高さ閾値以上」の位置に着地する場合もあり得る。このような場合にまで反発移動させると、ユーザに違和感を与える虞がある。そのため、着地先が「坂道」である場合は、上記のような反発移動に係る判定や制御は行わないようにしている。換言すれば、傾斜角度がある程度大きな面(着地するのが不自然なほど急な傾斜面)に着地した場合は、上記のような反発移動が行われることになる。これにより、ユーザに違和感を与えることを防ぐことができる。また、例えば登り坂をジャンプしながら登っていく、というような移動態様が制限されることを防ぐことができる。
【0093】
[本実施形態のゲーム処理の詳細]
次に、
図24~
図30を参照して、本実施形態におけるゲーム処理についてより詳細に説明する。なお、ここでは、主に、上記ジャンプに関する動作制御に関する処理について説明し、その他のゲーム処理の詳細説明は割愛する。
【0094】
[使用データについて]
まず、本ゲーム処理にて用いられる各種データに関して説明する。
図24は、本体装置2のDRAM85に記憶される各種データの一例を示すメモリマップである。本体装置2のDRAM85には、ゲームプログラム301、プレイヤオブジェクトデータ302、基準位置情報303、接触位置情報304、地形オブジェクトデータ305、操作データ306が少なくとも記憶されている。
【0095】
ゲームプログラム301は、本実施形態におけるゲーム処理を実行するためのプログラムである。
【0096】
プレイヤオブジェクトデータ302は、上記PC201に関するデータである。
図25に、当該プレイヤオブジェクトデータ302のデータ構成の一例を示す。プレイヤオブジェクトデータ302には、位置データ321、姿勢データ322、PC状態323、移動パラメータ324、外観データ325、アニメーションデータ326が少なくとも含まれている。
【0097】
位置データ321は、仮想ゲーム空間内におけるPC201の現在位置を示すデータである。例えば、位置データ321には、仮想ゲーム空間内の3次元座標が格納される。姿勢データ321は、PC201の現在の姿勢を示すデータである。例えば、姿勢データ322には、仮想ゲーム空間内においてPC201が向いている方向を示すベクトルデータ等が格納される。
【0098】
PC状態323は、ゲーム処理におけるPC201の現在の状態を示すデータである。本実施形態では、上記のようなジャンプの制御に関して、少なくとも以下の状態を示す情報のいずれかがPC状態323に設定され得る。
「接地中」・・・PC201がジャンプしていない状態である。
「ジャンプ中」・・・PC201がジャンプの動作で移動している最中の状態である。
「反発移動中」・・・PC201が上述の反発移動の制御に基づいて(強制的に)移動している最中の状態である。
【0099】
次に、移動パラメータ324は、PC201の移動制御に用いるパラメータである。例えば、移動パラメータ324には、初速度・加速度等の移動速度を指定するパラメータや、移動方向を示すパラメータ等が含まれ得る。
【0100】
外観データ325は、PC201の外観を構成するためのデータである。例えば、PC201の3Dモデルデータやテクスチャデータが含まれる。また、当該外観データ325には、PC201のコリジョンの形状や大きさを設定するための情報が含まれていてもよい。
【0101】
アニメーションデータ326は、PC201が行う各種動作のアニメーションを定義したデータである。例えば、アニメーションデータ326には、上記PC状態323で示される状態に対応するアニメーションのデータが定義されている。
【0102】
図23に戻り、次に、基準位置情報303は、上述した基準位置の座標を示すデータである。接触位置情報304は、上述の接触位置の座標を示すデータである。
【0103】
地形オブジェクトデータ305は、仮想区間内に配置される各種の地形オブジェクトのデータである。地形オブジェクトデータ305には、各種の地形オブジェクトの形状・大きさを示す3Dモデルのデータや、テクスチャデータが含まれる。また、地形オブジェクトデータ305には、それぞれのコリジョンを設定するための情報が含まれていてもよい。本実施形態では、上記のように各地形オブジェクトのメッシュと一致するコリジョンが設定されているものとする。これにより、ジャンプで乗り越え可能な段差か否かについて、ユーザがある程度目視で判断可能となる。なお、他の実施形態では、当該コリジョンとメッシュとは厳密には一致せず、多少大きさや形状のずれがあってもよい。つまり、ユーザが、「見えない壁がある」等の違和感を覚えない程度のずれがあってもよい。このようなユーザが違和感を覚えない程度のずれがあっても、実質的にメッシュとコリジョンが「一致する」ものとして扱えばよい。
【0104】
次に、操作データ306は、ユーザが操作するコントローラから得られるデータである。すなわち、ユーザが行った操作内容を示すデータである。
図26に、操作データ306のデータ構成の一例を示す。操作データ306には、デジタルボタンデータ361と、右スティックデータ362と、左スティックデータ363と、右慣性センサデータ364と、左慣性センサデータ365とが少なくとも含まれている。デジタルボタンデータ361は、コントローラが有する各種ボタンの押下状態を示すデータである。右スティックデータ362は、上記右スティック52に対する操作内容を示すためのデータである。具体的には、x、yの2次元のデータが含まれる。左スティックデータ363は、上記左スティック32に対する操作内容を示すためのデータである。右慣性センサデータ364は、右コントローラ4の加速度センサ114や角速度センサ115の慣性センサの検出結果を示すデータである。具体的には、3軸の加速度データや3軸の角速度データが含まれる。左慣性センサデータ365は、左コントローラ3の加速度センサ104や角速度センサ105の慣性センサの検出結果を示すデータである。
【0105】
その他、図示は省略するが、ノンプレイヤキャラクタ(NPC)に関するデータ等、ゲーム処理に必要な各種データもDRAM85に格納される。
【0106】
[プロセッサ81が実行する処理の詳細]
次に、本実施形態におけるゲーム処理の詳細を説明する。なお、以下に示すフローチャートは、処理過程の単なる一例にすぎない。そのため、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判定ステップで利用される閾値も、単なる一例であり、必要に応じて他の値を採用してもよい。
【0107】
図27は、本実施形態に係るゲーム処理の詳細を示すフローチャートである。なお、
図27のステップS2~S5の処理ループは、1フレーム毎に繰り返し実行される。
【0108】
[準備処理]
まず、ステップS1で、プロセッサ81は、ゲームを開始する準備のためのゲーム準備処理を実行する。この処理では、ゲームフィールドを含む仮想3次元空間を構築し、地形オブジェクト、PC201、その他NPC等の各種オブジェクトが配置する処理が実行される。そして、各種オブジェクトが配置された仮想空間が仮想カメラで撮像されることでゲーム画像が生成され、当該画像が据置型モニタ等に出力される。また、以下の処理で用いられる各種データの初期化も行われる。ここで、PC状態323には、初期値として「接地中」が設定される。
【0109】
[PC移動制御処理]
次に、ステップS2で、プロセッサ81は、PC移動制御処理を実行する。この処理では、ユーザの操作内容をPC201の移動に反映させるための処理が行われる。
図28は、当該PC移動制御処理の詳細を示すフローチャートである。
図28において、まずステップS11で、プロセッサ81は、PC状態323が「ジャンプ中」か否かを判定する。当該判定の結果、「ジャンプ中」ではない場合は(ステップS11でNO)、ステップS12で、プロセッサ81は、PC状態323が「反発移動中」か否かを判定する。当該判定の結果、「反発移動中」でもない場合は(ステップS12でNO)、ステップS13で、プロセッサ81は、操作データ306を取得する。
【0110】
次に、ステップS14で、プロセッサ81は、ジャンプ条件が満たされたか否かを判定する。当該ジャンプ条件とは、「接地中」の状態であるPC201が「ジャンプ中」に移行するための条件である。具体的には、PC状態323が「接地中」のときに、所定のジャンプ操作(例えばAボタン53の押下)が行われた場合である。その他、明示的なジャンプ操作が行われていない場合でも、例えばPC201が仮想空間内に設置されているジャンプ台に乗った場合等も、ジャンプ条件が満たされたと判定され得る。
【0111】
上記判定の結果、ジャンプ条件が満たされた場合は(ステップS14でYES)、ステップS15で、プロセッサ81は、ジャンプに係るPC201の移動パラメータ324を設定する。すなわち、ジャンプする方向や移動速度、ジャンプする高さが操作データ306等に基づいて算出され、移動パラメータ324に設定される。
【0112】
次にステップS16で、プロセッサ81は、上記基準位置を設定する。具体的には、プロセッサ81は、PC201の現在の位置データ321の内容に基づき、PC201の足下と地面とが接触している位置(ジャンプした位置)を基準位置情報303に設定する。
【0113】
なお、上述した「水面ジャンプ」に相当する場合は、PC201の足下の位置を基準位置情報303に設定すればよい。また、本実施形態では、ジャンプ条件が満たされたフレームにおけるPC201の現在位置を基準位置としているが、他の実施形態では、直前のフレームにおけるPC201の位置を基準位置としてもよい。
【0114】
次に、ステップS17で、プロセッサ81は、PC状態323に「ジャンプ中」を設定する。その後、プロセッサ81は、PC移動制御処理を終了する。
【0115】
次に、上記ステップS11の判定の結果、PC状態323が「ジャンプ中」の場合(ステップS11でYES)の処理を説明する。この場合は、ステップS19で、プロセッサ81は、ジャンプ中処理を実行する。
図29は、当該ジャンプ中処理の詳細を示すフローチャートである。
図29において、まず、ステップS31で、プロセッサ81は、移動パラメータ324に基づいて、PC201を移動させる(つまり、ジャンプ中の移動となる)。また、これに伴い、位置データ321も更新され得る。
【0116】
次に、ステップS32で、プロセッサ81は、PC201のコリジョンが地形オブジェクトと接触したか否かを判定する。例えば、垂直な壁際でPC201が垂直ジャンプしたような場合、このジャンプ中は、PC201が壁(地形オブジェクト)と接触していると判定され得る。当該判定の結果、地形オブジェクトと接触していない場合は(ステップS32でNO)、プロセッサ81はジャンプ中処理を終了する。
【0117】
一方、PC201が地形オブジェクトと接触した場合は(ステップS32でYES)、ステップS33で、プロセッサ81は、接触した位置を接触位置情報304に設定する。
【0118】
次に、ステップS34で、プロセッサ81は、接触した地形オブジェクトが坂道であるか否かを判定する。当該接触先が坂道か否かの判定手法はどのようなものでもよいが、例えば次のような手法がある。まず、地形オブジェクトを構成するデータの一つとして「属性」を持たせておく手法がある。当該「属性」は、例えば「平地」、「坂道」、「水面」等、その地形がどういう地形であるのかを示す情報である。そして、上記接触が発生したときに、その地形オブジェクトの属性を参照することで、坂道に接触したのか否かを判定する手法がある。また、別の手法として、PC201がジャンプ中の間、真下方向にレイ(直線)を飛ばし、例えばジャンプ期間中のレイの長さの変化具合で坂道か否かを判定するような手法もある。この変化が緩やかな変化であれば坂道、急激な変化であれば段差、等と判定され得る。
【0119】
上記判定の結果、坂道に接触した場合は(ステップ34でYES)、ジャンプに係る移動を終了させる(坂道に着地させる)ための処理が行われる。すなわち、ステップS37で、プロセッサ81は、PC状態323に「接地中」を設定する。
【0120】
一方、坂道に接触していない場合は(ステップS34でNO)、次に、ステップS35で、プロセッサ81は、鉛直方向における上記基準位置と上記接触位置との高低差を上記判定用高さとして算出する。そして、プロセッサ81は、当該判定用高さが、上記高さ閾値以上であるか否かを判定する。当該判定の結果、高さ閾値未満の場合は(ステップS35でNO)、ステップS36で、プロセッサ81は、ジャンプに係る移動が終了したか否かを判定する。例えば、プロセッサ81は、PC201が地面に着地したか否かを判定する。当該判定の結果、ジャンプに係る移動が終了した場合は(ステップS36でYES)、上記ステップS37で、プロセッサ81は、PC状態323に「接地中」を設定する。
【0121】
一方、まだジャンプに係る移動中である場合は(ステップS36でNO)、ステップS38で、プロセッサ81は、地形オブジェクトとPC201とのコリジョン関係に基づいて、PC201の移動パラメータ324を設定する。例えば、上記のような壁際における垂直ジャンプ中という状況の場合は、壁に沿って上方向にPC201を移動させるような移動パラメータ324が設定されることになる。その後、プロセッサ81は、ジャンプ中処理を終了する。
【0122】
一方、上記ステップ35の判定の結果、上記判定用高さが上記高さ閾値以上の場合は(ステップS35でYES)、上述した反発移動を行わせるための設定が行われる。具体的は、まず、ステップS39で、プロセッサ81は、PC201を反発移動に係るパラメータの設定を行う。具体的には、まず、プロセッサ81は、接触位置の面(以下、接触面)が水平に近い面であるか否かを判定する。例えば、プロセッサ81は、接触面の法線ベクトルについて、その垂直成分が、所定の閾値(以下、上成分閾値)より大きいか否かを判定する。例えば、法線ベクトルの長さを1とした場合に、上成分閾値は、0.8であってもよい。垂直成分が上成分閾値より大きい場合は、当該接触面は水平に近い面と考えられる。そして、当該判定の結果、垂直成分が上成分閾値より大きくない場合は、プロセッサ81は、接触面の法線ベクトルから、上方向成分を除いたベクトルを反発方向として設定する。更に、プロセッサ81は、予め定義されている初速と(一定期間分の)加速度を、移動速度のパラメータとして設定する。例えば、初速としては、80cm/s、加速度としては300cm/s^2(いずれも仮想空間内のスケール)というパラメータが予め定義されていてもよい。一方、垂直成分が上成分閾値より大きい場合は、上記接触面の法線ベクトルは用いずに反発方向が設定される。すなわち、プロセッサ81は、上記接触位置から基準位置に向かう方向を算出し、当該方向に基づいて反発方向を設定する。また、この場合の移動速度については、上記と同様の初速・加速度の設定が行われる。つまり、接触面がほぼ水平といえるような面であるか否かで、反発方向の決め方を変えている。これは、接触面がほぼ水平といえる面の場合、接触面の法線ベクトルから上方向成分を除いた水平方向のベクトルが短くなるため、その接触面のわずかな凹凸でその水平方向のベクトルの方向が大きく変わってしまうためである。
【0123】
次に、ステップS40で、プロセッサ81は、PC状態323に「反発移動中」を設定する。その後、プロセッサ81は、ジャンプ中処理を終了する。
【0124】
図28に戻り、次に、上記ステップS12の判定の結果、PC状態323が「反発移動中」の場合の処理(ステップS12でYES)について説明する。この場合は、ステップS20で、プロセッサ81は、反発移動処理を実行する。
図30は、当該反発移動処理の詳細を示すフローチャートである。
図30において、ます、ステップS51で、プロセッサ81は、移動パラメータ324に基づいてPC201を移動させる。すなわち、反発移動に係る移動制御が行われることになる。
【0125】
次に、ステップS52で、プロセッサ81は、反発移動が終了したか否か、すなわち、ジャンプ開始~反発移動に係る一連の移動が終了したか否かを判定する。例えば、PC201が地面に着地したか否かが判定される。当該判定の結果、反発移動が終了した場合は(ステップS52でYES)、ステップS53で、プロセッサ81は、PC状態323に「接地中」を設定し、反発移動処理を終了する。一方、まだ終了していない場合は(ステップS52でNO)、上記ステップS53の処理はスキップされる。つまり、反発移動に係る移動制御が継続されることになる。
【0126】
図28に戻り、反発移動処理が終われば、プロセッサ81は、PC移動制御処理を終了する。
【0127】
図27に戻り、次に、ステップS3で、プロセッサ81は、上記PC201の移動制御以外の各種ゲーム処理を実行する。例えば、移動操作以外のユーザの操作指示に基づくPC201の動作制御や、NPCの動作制御や、PC201とNPCとの接触判定に基づく処理等が適宜実行される。
【0128】
次に、ステップS4で、プロセッサ81は、上記の処理が反映された仮想空間を仮想カメラで撮像することでゲーム画像を生成して、据え置き型モニタ等に出力する。
【0129】
次に、ステップS5で、プロセッサ81は、ゲーム処理の終了条件が満たされたか否かを判定する。その結果、満たされていない場合は(ステップS5でNO)、上記ステップS2に戻り処理を繰り返す。満たされている場合は(ステップS5でYES)、当該ゲーム処理を終了する。
【0130】
以上で、本実施形態に係るゲーム処理の詳細説明を終了する。
【0131】
このように、本実施形態では、上記判定用高さ、および、上記高さ閾値の関係に基づき、段差を越えさせないような強制的な移動である反発移動の制御を行っている。これにより、段差を有する地形オブジェクトの配置によって、見た目の違和感を与えることなく、PC201の移動範囲を開発者が意図する範囲に制限することが可能となる。また、このような制御を行うに際して、ジャンプの高さそのものを調整するわけではないため、ジャンプに係るユーザの操作感が損なわれることもない。また、反発して移動させるという、ジャンプした場合に想定される動きとは異なる不自然な動きを見せることで、その段差がジャンプで越えることができない段差であるということをユーザに認識させやすくできる。
【0132】
[変形例]
なお、上述した反発移動の軌道に関しては、上記のような基準位置側の方向に向けて移動させることに限らず、例えば、
図31~
図32で示すような、地形オブジェクトに沿う下向きの方向に強制的に移動させるようにしてもよい。この際、上記のような基準位置側の方向に向けて反発するような動きは行わずに、
図32の例で言えば壁にぴったり吸い付いたような状態で真下に移動させてもよい。また、段差の形状に沿って少しだけ基準位置側の方向にずれてから下向きに移動させるようにしてもよい。
【0133】
また、本実施形態では、上記反発移動方向を決める際に、接触位置の面の法線ベクトルから上方向成分を除去したものを反発移動方向とする例を挙げた。他の実施形態では、反発移動方向を決める際に、法線ベクトルから上方向成分を除去することなくに決めてもよい。この場合は、接触位置の面に垂直に反発するように移動することになる。また、その他、例えば、接触位置の面の法線ベクトルの上方向成分が正の値(上向きのベクトル)の場合は、これを0として反発移動方向を決め、負の値(下向きのベクトル)の場合はそのまま用いて反発移動方向を決めてもよい。
【0134】
また、上記実施形態においては、ゲーム処理に係る一連の処理を単一の本体装置2で実行される場合を説明した。他の実施形態においては、上記一連の処理が複数の情報処理装置からなる情報処理システムにおいて実行されてもよい。例えば、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの一部の処理がサーバ側装置によって実行されてもよい。更には、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの主要な処理がサーバ側装置によって実行され、当該端末側装置では一部の処理が実行されてもよい。また、上記情報処理システムにおいて、サーバ側のシステムは、複数の情報処理装置によって構成され、サーバ側で実行するべき処理を複数の情報処理装置が分担して実行してもよい。また、いわゆるクラウドゲーミングの構成としてもよい。例えば、本体装置2は、ユーザの操作を示す操作データを所定のサーバに送り、当該サーバにおいて各種ゲーム処理が実行され、その実行結果が動画・音声として本体装置2にストリーミング配信されるような構成としてもよい。
【符号の説明】
【0135】
1 ゲームシステム
2 本体装置
3 左コントローラ
4 右コントローラ
81 プロセッサ
84 フラッシュメモリ
85 DRAM