(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024163200
(43)【公開日】2024-11-21
(54)【発明の名称】情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法
(51)【国際特許分類】
A63F 13/5258 20140101AFI20241114BHJP
A63F 13/5255 20140101ALI20241114BHJP
G06T 19/00 20110101ALI20241114BHJP
【FI】
A63F13/5258
A63F13/5255
G06T19/00 300B
【審査請求】有
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2024150899
(22)【出願日】2024-09-02
(62)【分割の表示】P 2022094433の分割
【原出願日】2022-06-10
(71)【出願人】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】110001276
【氏名又は名称】弁理士法人小笠原特許事務所
(74)【代理人】
【識別番号】100130269
【弁理士】
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】平向 雄高
(57)【要約】
【課題】仮想カメラの視線方向に複数の遮蔽オブジェクトが存在している場合に、視認性の低下を軽減しながら仮想カメラを制御する情報処理プログラム等を提供すること。
【解決手段】仮想カメラから見て第1遮蔽オブジェクトにより当該注目対象が遮蔽されている場合、仮想カメラから注目対象に向かう仮想線上において、当該仮想線が当該第1遮蔽オブジェクトを最初に通り抜けた位置、または当該位置よりも注目対象に近い位置である第1位置に仮想カメラを移動させる。仮想カメラを第1位置に移動させた場合に、更に第2遮蔽オブジェクトにより注目対象の少なくとも一部が遮蔽されるときは、再移動条件が満たされるまでは、仮想線が当該第2遮蔽オブジェクトを最初に通り抜けた位置である、または当該位置よりも注目対象に近い位置である第2位置に仮想カメラを移動させない。
【選択図】
図19
【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、
前記コンピュータを、
仮想空間において注目対象を撮像する仮想カメラと前記注目対象を結ぶ線分が、オブジェクトと衝突するかどうか判定する衝突判定手段と、
前記衝突判定手段によって、前記線分が前記オブジェクトと衝突すると判定された場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させる仮想カメラ制御手段と、
前記仮想カメラ制御手段によって前記仮想カメラが移動された後、移動された後の前記仮想カメラと前記注目対象とを結ぶ線分がオブジェクトと衝突すると判定されてから所定時間経過することを含む再移動条件を満たすかどうかを判定する再移動判定手段として機能させ、
前記仮想カメラ制御手段は、
前記再移動条件が満たされた場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記再移動条件が満たされない場合、前記仮想カメラを移動させない、
情報処理プログラム。
【請求項2】
前記仮想カメラ制御手段は、前記仮想カメラを前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に移動させたタイミングから当該仮想カメラが所定距離以上移動した場合に、前記再移動条件が満たされたものとする、請求項1に記載の情報処理プログラム
【請求項3】
前記仮想カメラ制御手段は、前記仮想カメラの俯角が小さくなるほど前記注目対象との距離が短くなるように当該仮想カメラを制御する、請求項1に記載の情報処理プログラム。
【請求項4】
前記仮想カメラ制御手段は、ユーザによるカメラ制御入力に基づいて前記仮想カメラの位置および姿勢の少なくとも一方を制御する、請求項1に記載の情報処理プログラム。
【請求項5】
前記注目対象はプレイヤキャラクタである、請求項1に記載の情報処理プログラム。
【請求項6】
前記仮想カメラから見て、前記遮蔽オブジェクトによって前記注目対象の少なくとも一部が遮蔽される場合に、当該注目対象の少なくとも一部を、前記遮蔽オブジェクトを透過して視認できる態様で描画する描画手段として前記コンピュータを更に機能させる、請求項1に記載の情報処理プログラム。
【請求項7】
前記仮想カメラ制御手段は、前記注目対象を注視点として、前記仮想カメラの移動および姿勢変化を行う、請求項1に記載の情報処理プログラム。
【請求項8】
仮想空間において注目対象を撮像する仮想カメラと前記注目対象を結ぶ線分が、オブジェクトと衝突するかどうか判定する衝突判定手段と、
前記衝突判定手段によって、前記線分が前記オブジェクトと衝突すると判定された場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させる仮想カメラ制御手段と、
前記仮想カメラ制御手段によって前記仮想カメラが移動された後、移動された後の前記仮想カメラと前記注目対象とを結ぶ線分がオブジェクトと衝突すると判定されてから所定時間経過することを含む再移動条件を満たすかどうかを判定する再移動判定手段とを備え、
前記仮想カメラ制御手段は、
前記再移動条件が満たされた場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記再移動条件が満たされない場合、前記仮想カメラを移動させない、
情報処理装置。
【請求項9】
仮想空間において注目対象を撮像する仮想カメラと前記注目対象を結ぶ線分が、オブジェクトと衝突するかどうか判定する衝突判定手段と、
前記衝突判定手段によって、前記線分が前記オブジェクトと衝突すると判定された場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させる仮想カメラ制御手段と、
前記仮想カメラ制御手段によって前記仮想カメラが移動された後、移動された後の前記仮想カメラと前記注目対象とを結ぶ線分がオブジェクトと衝突すると判定されてから所定時間経過することを含む再移動条件を満たすかどうかを判定する再移動判定手段とを備え、
前記仮想カメラ制御手段は、
前記再移動条件が満たされた場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記再移動条件が満たされない場合、前記仮想カメラを移動させない、
情報処理システム。
【請求項10】
情報処理装置のコンピュータに実行させる情報処理方法であって、
前記コンピュータに、
仮想空間において注目対象を撮像する仮想カメラと前記注目対象を結ぶ線分が、オブジェクトと衝突するかどうか判定させ、
前記線分が前記オブジェクトと衝突すると判定された場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記仮想カメラが移動された後、移動された後の前記仮想カメラと前記注目対象とを結ぶ線分がオブジェクトと衝突すると判定されてから所定時間経過することを含む再移動条件を満たすかどうかを判定させ、
前記再移動条件が満たされた場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記再移動条件が満たされない場合、前記仮想カメラを移動させない、
情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、仮想カメラの移動制御を行う情報処理に関する。
【背景技術】
【0002】
従来から、仮想カメラとプレイヤキャラクタの間に障害物が存在しており、仮想カメラから見てプレイヤキャラクタが遮蔽されているような状態である場合に、当該障害物よりもプレイヤキャラクタに接近した位置に仮想カメラを移動させる技術が知られている(例えば特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記の技術では、仮想カメラとプレイヤキャラクタの間に存在する障害物が複数あった場合は(重なって遮蔽している場合)、これら複数の障害物の全てを一気に越えるようにして、プレイヤキャラクタが遮蔽されない位置に仮想カメラを移動させていた。
【0005】
しかしながら、上記のような移動を行った結果、視点位置が急激に変化してしまい、その結果、仮想カメラからの画像も急激に変化することもあった。そのため、視認性が低下する虞があった。
【0006】
それ故に、本開示における目的は、仮想カメラの視線方向に複数の遮蔽オブジェクトが存在している場合に、視認性の低下を軽減しながら仮想カメラを制御することができる情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供することである。
【課題を解決するための手段】
【0007】
上記目的を達成するために、例えば以下のような構成例が挙げられる。
【0008】
(構成1)
構成1は、情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、コンピュータを、遮蔽判定手段と、仮想カメラ制御手段として機能させる。遮蔽判定手段は、仮想空間において注目対象を撮影する仮想カメラから見て、第1遮蔽オブジェクトによって当該注目対象の少なくとも一部が遮蔽されるか否かを判定する。仮想カメラ制御手段は、第1遮蔽オブジェクトによって注目対象の少なくとも一部が遮蔽されると判定されたことに少なくとも基づいて、仮想カメラから注目対象に向かう仮想線上において、当該仮想線が当該第1遮蔽オブジェクトを最初に通り抜けた位置である、または当該最初に通り抜けた位置よりも注目対象に近い位置である第1位置に仮想カメラを移動させる。そして、仮想カメラ制御手段は、仮想カメラを第1位置に移動させた場合に、更に第2遮蔽オブジェクトによって注目対象の少なくとも一部が遮蔽されるとき、再移動条件が満たされていない間は、仮想線が当該第2遮蔽オブジェクトを最初に通り抜けた位置である、または当該最初に通り抜けた位置よりも注目対象に近い位置である第2位置に仮想カメラを移動させず、当該再移動条件が満たされたときに当該第2位置に仮想カメラを移動させる。
【0009】
上記構成によれば、仮想カメラの視線方向上に、注目対象を遮蔽するような遮蔽オブジェクトが複数存在している場合、注目対象が遮蔽されない位置に仮想カメラを移動させるが、この際、これらを一度で越えるようにして移動させるのではなく、再移動条件を判定することで、複数の遮蔽オブジェクトを1つずつ順番に越えていくようにしている。これにより、ごく短時間での視点位置の急激な変化を抑制し、ユーザの視認性の低下を軽減することができる。
【0010】
(構成2)
構成2は、上記構成1において、仮想カメラ制御手段は、仮想カメラが第1遮蔽オブジェクトに接触または埋没したときに、第1位置に仮想カメラを移動させてもよい。
【0011】
上記構成によれば、仮想カメラが遮蔽オブジェクトに接触または埋没するまでは、第1位置への仮想カメラの移動は行われない。そのため、仮想カメラが遮蔽オブジェクトに接触していないときにまで第1位置に移動することを抑制し、仮想カメラが頻繁に遮蔽オブジェクト(地形オブジェクト)をすり抜けてしまうことを防ぐことができる。
【0012】
(構成3)
構成3は、上記構成1または2において、仮想カメラ制御手段は、仮想カメラが第2遮蔽オブジェクトに接触または埋没したときに、再移動条件が満たされたものとしてもよい。
【0013】
上記構成によれば、遮蔽オブジェクトを越えた位置に仮想カメラが移動する条件が、1つ目の遮蔽オブジェクトと2つ目の遮蔽オブジェクトとで共通する。そのため、ユーザにとって、例えば「仮想カメラが壁にぶつかるとその先にすり抜ける」というように、仮想カメラの挙動が把握しやすくなる。
【0014】
(構成4)
構成4は、上記構成1~3のいずれかにおいて、仮想カメラ制御手段は、仮想カメラを第1位置に移動させたタイミングから所定時間が経過した場合に、再移動条件が満たされたものとしてもよい。
【0015】
上記構成によれば、仮想カメラが第1位置に移動した後、所定時間が経過するまでは第2位置への移動は行われない。そのため、短時間で仮想カメラが急激に移動することを抑制でき、視認性の低下を軽減できる。
【0016】
(構成5)
構成5は、上記構成1~3のいずれかにおいて、仮想カメラ制御手段は、仮想カメラを第1位置に移動させたタイミングから当該仮想カメラが所定距離以上移動した場合に、再移動条件が満たされたものとしてもよい。
【0017】
上記構成によれば、第1位置から所定距離以上仮想カメラが移動するまでは、第2位置への移動は行われない。そのため、短時間での仮想カメラの急激な移動を抑制できる。
【0018】
(構成6)
構成6は、上記構成1~5のいずれかにおいて、仮想カメラ制御手段は、仮想カメラの俯角が小さくなるほど注目対象との距離が短くなるように当該仮想カメラを制御してもよい。
【0019】
上記構成によれば、仮想カメラの俯角が小さくなると注目対象との距離が近くなる。そ
のため、例えば垂直方向に延びる壁のような遮蔽オブジェクトに接触する等で、仮想カメラが第1位置に移動する機会が増える。このような場合でも、急激な視点の変化を抑制できる。
【0020】
(構成7)
構成7は、上記構成1~6のいずれかにおいて、仮想カメラ制御手段は、ユーザによるカメラ制御入力に基づいて仮想カメラの位置および姿勢の少なくとも一方を制御してもよい。
【0021】
上記構成によれば、ユーザが仮想カメラを直接的に操作できるため、仮想空間内の様子を把握しやすくすることができ、ユーザの利便性を向上できる。
【0022】
(構成8)
構成8は、上記構成1~7のいずれかにおいて、注目対象はプレイヤキャラクタであってもよい。
【0023】
上記構成によれば、視認性の低下を軽減できるため、ユーザの操作対象となるプレイヤキャラクタについて、仮想空間内における位置関係をユーザが把握しやすくなる。
【0024】
(構成9)
構成9は、上記構成8において、仮想カメラから見て、遮蔽オブジェクトによって注目対象の少なくとも一部が遮蔽される場合に、当該注目対象の少なくとも一部を、当該遮蔽オブジェクトを透過して視認できる態様で描画する描画手段としてコンピュータを機能させてもよい。
【0025】
上記構成によれば、注目対象が遮蔽オブジェクトによって遮蔽されている状態のときでも、注目対象の位置をユーザに把握させることができる。
【0026】
(構成10)
構成10は、上記構成1~9のいずれかにおいて、仮想カメラ制御手段は、注目対象を注視点として、仮想カメラの移動および姿勢変化を行ってもよい。
【0027】
上記構成によれば、注目対象が移動した場合でも、常に注目対象が捉えられるように仮想カメラを制御できる。
【0028】
(構成11)
構成11は、情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、埋没判定手段と、仮想カメラ制御手段としてコンピュータを機能させる。埋没判定手段は、仮想カメラが遮蔽オブジェクトに接触または埋没するか否かを判定する。仮想カメラ制御手段は、仮想カメラが第1遮蔽オブジェクトに接触または埋没すると判定されたことに基づいて、当該仮想カメラに第1遮蔽オブジェクトが映らなくなるように当該仮想カメラを注目対象に近づける。更に、仮想カメラ制御手段は、仮想カメラに第1遮蔽オブジェクトが映らなくなるように仮想カメラを注目対象に近づけた場合に、更に別の遮蔽オブジェクトにより注目対象の少なくとも一部が遮蔽されるときであっても、当該仮想カメラが当該別の遮蔽オブジェクトに接触または埋没していないときは、当該仮想カメラに当該別の遮蔽オブジェクトが映らなくなるように当該仮想カメラを注目対象に近づける制御を行わない。
【0029】
上記構成によれば、仮想カメラの視線方向上に遮蔽オブジェクトが複数存在している場合、複数の遮蔽オブジェクトを1つずつ順番に越えていくように移動制御している。これ
により、視点位置の急激な変化を抑制し、ユーザの視認性の低下を軽減することができる。
【発明の効果】
【0030】
本実施形態によれば、仮想カメラの視線方向上に遮蔽オブジェクトが複数存在する場合における視認性を向上できる。
【図面の簡単な説明】
【0031】
【
図1】本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図
【
図2】本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図
【
図6】本体装置2の内部構成の一例を示すブロック図
【
図7】本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図
【
図8】本実施形態に係る処理の概要を説明するための図
【
図9】本実施形態に係る処理の概要を説明するための図
【
図16】本実施形態に係る処理の概要を説明するための図
【
図17】DRAM85に記憶される各種データの一例を示すメモリマップ
【
図19】本実施形態に係る仮想カメラ制御処理の詳細を示すフローチャート
【発明を実施するための形態】
【0032】
以下、一実施形態について説明する。
【0033】
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(
図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
【0034】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0035】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0036】
図3は、本体装置2の一例を示す六面図である。
図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
【0037】
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
【0038】
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
【0039】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
【0040】
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、
図6に示すスピーカ88)を備えている。
図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
【0041】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
【0042】
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
【0043】
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型
モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
【0044】
図4は、左コントローラ3の一例を示す六面図である。
図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、
図4における上下方向(
図4に示すz軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0045】
左コントローラ3は、方向入力デバイスの一例である左アナログスティック(以下、左スティックと呼ぶ)32を備える。
図4に示すように、左スティック32は、ハウジング31の主面に設けられる。左スティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、左スティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、左スティック32を押下する入力が可能である。
【0046】
左コントローラ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プログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
【0047】
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
【0048】
図5は、右コントローラ4の一例を示す六面図である。
図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、
図5における上下方向(
図5に示すz軸方向)に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0049】
右コントローラ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を備える。
【0050】
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
【0051】
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、
図3に示す構成の他、
図6に示す各構成要素81~91、97、および98を備える。これらの構成要素81~91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
【0052】
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central
Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0053】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0054】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
【0055】
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0056】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【0057】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0058】
プロセッサ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は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0059】
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
【0060】
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
【0061】
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0062】
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
【0063】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
【0064】
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
【0065】
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、
図6で示しているため
図7では省略している。
【0066】
左コントローラ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(登録商標)の規格に従って行われる。
【0067】
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
【0068】
左コントローラ3は、各ボタン103(具体的には、ボタン33~39、43、44、および47)を備える。また、左コントローラ3は、左スティック32を備える。各ボタン103および左スティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
【0069】
左コントローラ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へ出力される。
【0070】
通信制御部101は、各入力部(具体的には、各ボタン103、左スティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【0071】
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103および左スティック32に対する操作を、操作データに基づいて判別することができる
。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
【0072】
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
【0073】
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
【0074】
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、右スティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
【0075】
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
【0076】
[本実施形態における情報処理の概要]
次に、本実施形態に係るゲームシステム1で実行される情報処理の動作概要を説明する。本実施形態に係る処理は、仮想カメラの制御に関する処理である。具体的には、仮想カメラから見て、注目対象が所定のオブジェクト(以下、遮蔽オブジェクト)で遮蔽される場合を想定した処理である。本実施形態では、注目対象がプレイヤキャラクタオブジェクト(以下、PCと呼ぶ)である場合を例に説明する。
【0077】
[処理の概要と画面例]
図8および
図9は、本実施形態に係る処理の概要を説明するための図であり、仮想カメラとPC201と、上記遮蔽オブジェクトとなり得る地形オブジェクトとの位置関係を示す図でもある。また、
図10~
図15は、本実施形態の処理によって表示される画面の一例を示す図である。なお、
図8~
図9は、
図10~
図15で示すような地形を仮想カメラとPC201と通る鉛直面で切断した断面図のイメージを示す模式図である。まず、
図8を用いて、位置関係に関して説明する。
図8では、仮想3次元空間(以下単に仮想空間と呼ぶ)における地面の上にPC201が配置されている。また、
図8で言うとPC201の左側に、地形オブジェクトが配置されている。この地形オブジェクトは、3つの段差を有しており、略階段状の形状となっている。以下では、説明の便宜上、各段差に係る箇所について、
図8で示すような第1部分、第2部分、第3部分と呼ぶ。具体的にいうと、
図8において、仮想カメラからPC201に向かう仮想線(仮想カメラの視線)が地形オブジェクトを通過する(地形オブジェクトの外→中→外となる)ことが複数回ある場合に、その通過する部分(およびその近辺)の地形オブジェクトの部分を、仮想カメラから近い順にそれぞれ、第1部分、第2部分、第3部分と呼ぶ。そして、以下では、各部分が個別の遮蔽オブジェクトであるという扱いで説明する。また、これらの部分のことを総称して、「遮蔽部分」と呼ぶこともある。なお、なお、当該地形オブジェクトは、これら複数の
遮蔽部分を含む1つのオブジェクトであってもよいし、別々のオブジェクトである遮蔽部分が組み合わさって構成されるものでもよい。また、
図8~
図15では、3つの段差の各段(の高低差)を見分けやすいように、それぞれの段を異なる網掛けパターンで示している。
【0078】
上記のような形状の地形オブジェクトとPC201との位置関係を前提に、本実施形態における仮想カメラの制御処理の概要を説明する。本実施形態では、仮想カメラの注視点はPC201に設定されているとする。そして、仮想カメラから見て、上記地形オブジェクト(最寄りの遮蔽部分)によってPC201が遮蔽されて見えないような場合に、PC201が遮蔽されずに見える位置まで仮想カメラを移動させるという場合を想定する。
【0079】
ここで、仮想カメラの移動に関して補足すると、本実施形態では、ユーザの操作に基づいて仮想カメラを移動させる場合を想定する。具体的には、ユーザは、例えば右スティック52を用いて仮想カメラの俯角を変化させることができる。そして、この俯角に基づいて、仮想カメラからPC201までの距離が決まる。本実施形態では、仮想カメラの俯角が大きいほど、PC201からの距離が遠くなるものとする。そのため、ユーザが仮想カメラの俯角を大きくする操作(例えば右スティック52を上方向に入力する操作)を行うことで、仮想カメラの俯角が大きくなり、PC201から遠ざかっていく(後ずさる)ような動きとなる。逆に、ユーザが仮想カメラの俯角を小さくするように操作することで(例えば右スティック52を下方向に入力する操作)、俯角を小さくすることができる。俯角が小さくなるに連れて、仮想カメラとPC201との距離が縮まっていく。結果的に、ユーザは、当該操作によって仮想カメラを地面およびPC201に近づけていくように動かすことができる。
【0080】
なお、本実施形態に係る処理は、例えばPC201に追従させるようにして仮想カメラを移動させる等、自動的に制御する場合にも適用可能である。
【0081】
次に、本実施形態での仮想カメラの移動例を説明する。具体的には、
図9で示す「開始位置」に仮想カメラがある状態から、最終的に、仮想カメラが「位置H」に移動する場合を例に説明する。まず、上記「初期位置」に仮想カメラがあるときは、
図10に示すような画面が表示される。
図10では、仮想カメラから見て、PC201は遮蔽されていない状態を示している。また、
図10では、地形オブジェクトの段差となる部分が一部映り込んでいるような画面となっている。
【0082】
次に、上記
図9において、仮想カメラが上記「初期位置」から少し下に移動して、「位置A」に到達した場合を想定する。また、
図11は、仮想カメラが「位置A」にあるときの画面の一例である。「位置A」では、仮想カメラは地形オブジェクトには接触していない状態であるが、その視線上に、上記の3つの部分が存在しているような位置関係となっている(上記
図8参照)。すなわち、第1部分、第2部分、および、第3部分が上記仮想線上に存在している状態である。そのため、仮想カメラから見た場合、PC201が上記第1部分によって遮蔽された状態となっている。上記
図11の画面例では、画面の大部分が、仮想カメラに最寄りの位置にある第1部分で覆われているような画面となっている。
【0083】
なお、
図11でも示されるように、本実施形態では、仮想カメラから見てPC201が遮蔽されている状態のときは、PC201をシルエット表示している。これにより、遮蔽されているPC201の位置をユーザが視認(把握)できるようにしている。なお、PC201の一部だけが遮蔽されている状態の場合は、遮蔽されている部分だけをシルエット表示してもよい。
【0084】
上記のように、「位置A」においては、上記仮想線上に3つの遮蔽部分が存在しているような状態となっている。この後、仮想カメラが更に下がり、第1部分と接触した場合を想定する。この場合に、PC201が遮蔽されない位置まで仮想カメラを移動させることを考えた場合、従来では一般的に、上記複数の遮蔽部分を一度にすり抜けるように(一度で越えるように)して、遮蔽されない「位置G」(あるいは「位置H」)まで一瞬で、あるいはごく短時間で一気に移動させていた。しかし、このような制御の場合、画像の変化が急激なものとなってしまい、視認性が低下する虞があった。例えば、仮想カメラが一瞬で移動する距離がある程度長い距離となる場合は、このような急激な視点位置の変化によって、仮想空間内における位置関係をユーザが把握しにくくなる虞があった。
【0085】
そこで、本実施形態では、仮想カメラから注目対象までの視線上に複数の遮蔽部分が存在するような場合であって、視線が遮蔽されない位置に仮想カメラを移動させる場合に、これら複数の遮蔽部分を一度に越えるのではなく、1つずつ段階的に越えていくような制御を行う。このように段階的に越えていくよう制御することで、視点位置の急激な変化を抑え、視認性が低下することを防ぐことができる。
【0086】
具体的には、本実施形態では、PC201が遮蔽されている状態において、仮想カメラが遮蔽部分に接触または埋没(以下の説明では、両者を総称して接触と称する)したときに、その遮蔽部分によってPC201が遮蔽されないような位置まで、仮想カメラを通過させる。以下、このような遮蔽部分を通り抜けさせる移動のことを「すり抜け移動」と呼ぶ。また、すり抜け移動先となる、遮蔽部分によってPC201が遮蔽されないような位置のことを、「すり抜け先位置」と呼ぶ。当該すり抜け先位置は、上記仮想線が当該第1部分を最初に通過した直後の位置、または、当該通過直後の位置よりも注目対象に近い位置であるとする。
【0087】
当該すり抜け先位置に関して、上記
図9の例で説明すると、まず、仮想カメラが「位置A」から「位置B」に移動した結果、第1部分と接触する。この場合、仮想カメラからPC201に向かう上記仮想線上において、当該第1部分を最初に通過した直後の位置が算出される。そして、当該位置、または、当該位置よりPC201に近い位置が上記すり抜け先位置として決定される。本実施形態では、すり抜け先位置として、後者の位置を用いる場合を例に説明する。より具体的には、上記仮想線上において、接触中の遮蔽部分(
図8では第1部分)を通過した直後の位置からPC201側に隣接するような位置であって、当該遮蔽部分と仮想カメラが接触しないような位置をすり抜け位置として決定する。
【0088】
このようにして決定されたすり抜け先位置、
図9の例で言うと「位置C」に仮想カメラが移動される。なお、この移動については、一瞬で移動させてもよいし、第1部分の内部をゆっくりと通過するようにして移動させてもよい。前者であれば、画面上は、一瞬で第1部分をすり抜けたような表現が行われる、後者の場合は、第1部分の内部を通過する様子が、若干の時間をかけて画面に表示される。また、いずれの場合でも、複数の遮蔽部分をまとめて越える場合に比べて、その移動距離は小さなものとなるため、位置関係の把握のしにくさを軽減できる。
【0089】
上記のように仮想カメラに第1部分をすり抜け移動させ、仮想カメラが「位置C」にあるときは、
図12に示すような画面が表示される。この時点では、上記仮想線上には、まだ2つの遮蔽部分(第2部分および第3部分)が存在している状態である。そのため、表示される画面としては、仮想カメラ側(手前側)に第2部分の一部が、奥側に第3部分の一部が映っているような画面となる。また、PC201は、まだ遮蔽されている状態であるため、引き続きシルエット表示されている。
【0090】
上記のように、仮想カメラが「位置C」にある時点では、まだPC201は遮蔽されて
いる状態である。そのため、仮想カメラの位置を下げる操作が継続していれば、引き続き、第2部分をすり抜け移動させる制御が行われる。但し、本実施形態では、上記第1位置に仮想カメラを移動させた後、「再移動条件」を満たさない限りは、第2部分のすり抜け移動を行わないようにしている。つまり、遮蔽部分を1つ分すり抜け移動したら、その次にある遮蔽部分のすり抜け移動をすぐに行うのではなく、再移動条件が満たされてからすり抜け移動を行うように制御している。当該再移動条件として、本実施形態では、以下のような条件を例として説明する。まず、すり抜け先位置に移動する前に仮想カメラと接触していた遮蔽部分を第1遮蔽オブジェクトとし、すり抜け先位置から見て上記仮想線上にある遮蔽部分のうち、最寄りの遮蔽部分を第2遮蔽オブジェクトとする。上記の例で言うと、第1部分が第1遮蔽オブジェクトに該当し、第2部分が第2遮蔽オブジェクトに該当することになる。また、第1部分についてのすり抜け先位置を第1位置、第2部分についてのすり抜け先位置を第2位置とする。そして、第1位置に移動した後、第2位置に移動するための上記再移動条件として、第2遮蔽オブジェクト(第2部分)に仮想カメラが接触することを条件とする。そのため、仮想カメラの動き方としては、例えば以下のような動きとなる。まず、上記「位置C」から、仮想カメラが更に下がって、「位置D」に移動する。その結果、仮想カメラが第2部分に接触し、これをもって、上記再移動条件が満たされる。そして、第2部分のすり抜け先位置として「位置E」が決定される。その結果、仮想カメラが「位置D」で第2部分に接触すれば、仮想カメラが「位置」Dから「位置E」にすり抜け移動する、という動きになる。
【0091】
図13は、仮想カメラが「位置E」にある場合の画面例である。この画面では、PC201は第3部分によってまだ遮蔽されている状態であることが示されている。そして、この後、上記同様に、再移動条件が満たされることを条件として、仮想カメラに第3部分をすり抜け移動させる制御が行われる。この場合は、上記第2部分が第1遮蔽オブジェクトに該当し、第3部分が第2遮蔽オブジェクトに該当する。また、第1位置は「位置E」、第2位置は「位置G」に該当する。そのため、仮想カメラが「位置E」に移動した後、「位置G」にすり抜け移動する条件として、第3部分に仮想カメラが接触することが条件となる。そのため、仮想カメラの動き方としては、以下のようになる。まず、「位置E」から「位置F」に仮想カメラが移動した結果、仮想カメラが第3部分と接触する。これによって再移動条件が満たされ、すり抜け先位置として「位置G」が決定される。そして、仮想カメラを「位置F」から「位置G」にすり抜け移動することになる。
【0092】
図14は、仮想カメラが「位置G」にあるときの画面例である。「位置G」においては、PC201を遮蔽する遮蔽部分(地形オブジェクト)は存在していないため、PC201のシルエット表示は解除されている。また、仮想カメラの俯角も0度に近くなっており、視線方向が水平に近くなっている画面が表示されている。
【0093】
この後、更に仮想カメラを下げる操作が継続して行われていれば、最終的に、
図15に示すような画面が表示される。
図15は、仮想カメラが「位置H」にあるときの画面例である。この時点では、視線方向が水平(俯角が0度)となっている。なお、本実施形態では、仮想カメラの俯角が0度になれば、それ以上は仮想カメラは下方向には移動しないものとする。
【0094】
このように、本実施形態では、仮想カメラから注目対象への仮想線上に、注目対象を遮蔽する遮蔽オブジェクトが複数存在する場合、これらを一度に越えさせるのではなく、複数の遮蔽オブジェクトを1つずつ越えるようにしながら仮想カメラを段階的に移動させていく。これにより、仮想カメラの前方に複数の遮蔽オブジェクトがある場合において、仮想カメラが瞬間移動するような急激な視点変化を抑制し、視認性を向上することができる。
【0095】
なお、本実施形態では、仮想カメラを手動で操作する例を挙げている。そのため、例えば、ユーザは、仮想カメラの俯角を大きくする操作を行うこともできる。上記のように、仮想カメラの俯角が大きくなると、PC201との距離も大きくなる。そのため、仮想カメラはPC201から遠ざかる方向に移動することになる。つまり、ユーザは、仮想カメラの俯角を大きくする操作を行うことで、PC201に向かう方向とは逆方向側に仮想カメラを移動させることも可能である。この場合の仮想カメラの動き方に関して、補足説明する。
図16は、例えばある遮蔽オブジェクトをすり抜け移動した後に、ユーザが仮想カメラの俯角を大きくする操作(PC201との距離を大きくする操作)を行った場合の仮想カメラの動き方の一例を示す図である。このような場合、仮想カメラの動きとしては、すり抜け先位置から後退していくような動きとなり、遮蔽オブジェクトに埋没するような位置が移動先として算出され得る。この移動先から見た場合、PC201が遮蔽され、かつ、遮蔽オブジェクトに接触(埋没)していることになる。そのため、上記のようなすり抜け位置が仮想カメラの移動先として決定される。その結果、元の位置から少しだけ上に上がったような位置に仮想カメラが移動するような動きとなる。このような処理が繰り返されることで、結果的に、仮想カメラが遮蔽オブジェクトの壁面に沿って上に移動していくような動きとなる。そして、遮蔽オブジェクトの上まで到達して後方に接触するものがなくなれば、仮想カメラはそのまま後退していくことになる(PC201から離れながら上がっていく)。
【0096】
[本実施形態の仮想カメラ制御処理の詳細]
次に、
図17~
図19を参照して、本実施形態における仮想カメラ制御処理について、より詳細に説明する。
【0097】
[使用データについて]
まず、本処理にて用いられる各種データに関して説明する。
図17は、本体装置2のDRAM85に記憶される各種データの一例を示すメモリマップである。本体装置2のDRAM85には、ゲームプログラム301、プレイヤオブジェクトデータ302、地形オブジェクトデータ303、仮想カメラデータ304、操作データ305、シルエットフラグ306が少なくとも記憶されている。
【0098】
ゲームプログラム301は、本実施形態における仮想カメラ制御処理を含むゲーム処理を実行するためのプログラムである。
【0099】
プレイヤオブジェクトデータ302は、上記PC201に関するデータである。プレイヤオブジェクトデータ302には、PC201の位置を示す位置データやPC201の姿勢を示す姿勢データ等が含まれている。
【0100】
地形オブジェクトデータ303は、仮想空間内に配置される地形オブジェクトのデータである。地形オブジェクトデータ303には、各地形オブジェクトを一意に識別するためのIDや、配置位置を示す情報や、その形状を示すモデルデータ、ポリゴンデータ等が含まれる。
【0101】
仮想カメラデータ304は、仮想カメラを制御するためのデータである。仮想カメラデータには、仮想カメラの位置、姿勢(俯角)、画角、移動速度等を示すデータが含まれる。
【0102】
次に、操作データ305は、ユーザが操作するコントローラから得られるデータである。すなわち、ユーザが行った操作内容を示すデータである。
図18に、操作データ305のデータ構成の一例を示す。操作データ305には、デジタルボタンデータ351と、右スティックデータ352と、左スティックデータ353と、右慣性センサデータ354と
、左慣性センサデータ355とが少なくとも含まれている。デジタルボタンデータ351は、コントローラが有する各種ボタンの押下状態を示すデータである。右スティックデータ352は、上記右スティック52に対する操作内容を示すためのデータである。具体的には、x、yの2次元のデータが含まれる。左スティックデータ353は、上記左スティック32に対する操作内容を示すためのデータである。右慣性センサデータ354は、右コントローラ4の加速度センサ114や角速度センサ115の慣性センサの検出結果を示すデータである。具体的には、3軸の加速度データや3軸の角速度データが含まれる。左慣性センサデータ355は、左コントローラ3の加速度センサ104や角速度センサ105の慣性センサの検出結果を示すデータである。
【0103】
シルエットフラグ306は、PC201をシルエット表示の態様で表示するか否かを示すためのフラグである。シルエットフラグ306がオンの場合は、PC201をシルエット表示することを示す。
【0104】
すり抜けフラグ307は、仮想カメラを上記のようなすり抜け先位置に移動させるか否かを判定するためのフラグである。初期値はオフであり、すり抜けフラグ307がオンの場合は、仮想カメラをすり抜け先位置に移動させる必要があることを示している。
【0105】
その他、図示は省略するが、ゲーム処理に必要な各種データもDRAM85に格納される。
【0106】
[プロセッサ81が実行する処理の詳細]
次に、本実施形態における仮想カメラ制御処理の詳細を説明する。本実施形態では、1以上のプロセッサが1以上のメモリに記憶された上記プログラムを読み込んで実行することにより、以下に示すフローチャートが実現される。なお、以下に示すフローチャートは、処理過程の単なる一例にすぎない。そのため、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判定ステップで利用される閾値も、単なる一例であり、必要に応じて他の値を採用してもよい。
【0107】
図19は、本実施形態に係る仮想カメラ制御処理の詳細を示すフローチャートである。なお、当該フローチャートに係る処理は、1フレーム毎に繰り返し実行される。なお、当該処理の実行に先立って、仮想空間内には、所定の地形オブジェクトおよびPC201が配置済みであるとする。
【0108】
まず、ステップS1で、プロセッサ81は、操作データ305に基づき、すり抜けフラグ307がオンか否かを判定する。当該判定の結果、オフの場合は(ステップS1でNO)、ステップS2で、プロセッサ81は、操作データに基づき、仮想カメラの俯角を設定する(つまり、仮想カメラの姿勢を変化する)。続くステップS3で、プロセッサ81は、上記設定された俯角に基づき、仮想カメラからPC201までの距離を決定する。上記のように、俯角が大きいほど当該距離は大きくなるよう決定される。そして、ステップS4で、プロセッサ81は、上記決定された距離に応じた位置に仮想カメラを移動させる(俯角と距離が決まれば必然的に位置も決まることになる)。
【0109】
次に、ステップS5で、プロセッサ81は、仮想カメラから見て、PC201が何らかの遮蔽オブジェクトによって遮蔽されているか否かを判定する。すなわち、仮想カメラからPC201に向かう上記仮想線上に遮蔽オブジェクトが存在しているか否かを判定する。当該判定の結果、PC201が遮蔽されていない場合は(ステップS5でNO)、ステップS11で、プロセッサ81は、シルエットフラグ306にオフを設定する。そして、後述するステップS9に処理が進められる。
【0110】
一方、PC201が遮蔽されている場合は(ステップS5でYES)、ステップS6で、プロセッサ81は、シルエットフラグ306をオンに設定する。これにより、仮想カメラから見てPC201が遮蔽されている状態のときは、PC201をシルエット表示するための設定が行われることになる。
【0111】
次に、ステップS7で、プロセッサ81は、仮想カメラが遮蔽オブジェクトに接触しているか否かを判定する。当該判定の結果、接触していない場合は(ステップS7でNO)、後述のステップS9に処理が進められる。一方、接触している場合は(ステップS7でYES)、ステップS8で、プロセッサ81は、仮想カメラが現在接触している遮蔽オブジェクトとPC201との位置関係に基づき、上述したようなすり抜け先位置を決定する。そして、プロセッサ81は、すり抜けフラグ307にオンを設定する。
【0112】
次に、ステップS9で、プロセッサ81は、上記仮想カメラで仮想空間を撮像することでゲーム画像を生成する。この際、上記シルエットフラグ306がオンであれば、プロセッサ81は、PC201をシルエット表示にした画像を生成する。そして、プロセッサ81は、当該生成したゲーム画像を据え置き型モニタ等に出力する。
【0113】
次に、上記ステップS1の判定の結果、すり抜けフラグ307がオンの場合の処理について説明する、この場合は、ステップS10で、プロセッサ81は、上記ステップS8で決定されたすり抜け先位置に仮想カメラを移動させる。つまり、直前のフレームに係る処理で決定されたすり抜け先位置に仮想カメラを移動させることになる。更に、プロセッサ81は、すり抜けフラグ307にオフを設定する。その後、上記ステップS5に処理が進められる。
【0114】
上記のような処理が、例えばゲーム終了条件が満たされるまで、1フレーム毎に繰り返し実行される。以上で、本実施形態に係る仮想カメラ制御処理の詳細説明を終了する。
【0115】
このように、本実施形態では、仮想カメラの前方(撮像方向)に複数の遮蔽オブジェクトが存在する場合、当該複数の遮蔽オブジェクトを1つずつ越えるようにしながら仮想カメラを段階的に移動させている。これにより、ある程度大きな距離を仮想カメラが一度に移動することによる急激な視点変化を抑制し、視認性を向上することができる。
【0116】
[変形例]
なお、上記再移動条件に関して、上記の例では、上述した「第2遮蔽オブジェクト」に仮想カメラが接触したことを再移動条件とする例を挙げた。この点、再移動条件として他の条件を用いてもよい。他の再移動条件としては、例えば、上記第1位置に仮想カメラを移動させたタイミングから所定の待機時間が経過することを再移動条件としてもよい。またその他、例えば、第1位置に仮想カメラを移動させたタイミングから当該仮想カメラが(注目対象に向けて)所定距離以上移動することを再移動条件としてもよい。また、これらの条件を併用して判定してもよい。
【0117】
また、上記仮想カメラの制御に関して、上記実施形態では、仮想カメラの俯角が大きくなるにつれて注目対象との距離が大きくなる例を挙げた。他の実施形態では、俯角は変化させずに仮想カメラの位置を注目対象に近づけていく、または遠ざけていくような制御を行ってもよい。
【0118】
また、上記実施形態においては、ゲーム処理に係る一連の処理を単一の本体装置2で実行される場合を説明した。他の実施形態においては、上記一連の処理が複数の情報処理装置からなる情報処理システムにおいて実行されてもよい。例えば、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにお
いて、上記一連の処理のうちの一部の処理がサーバ側装置によって実行されてもよい。更には、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの主要な処理がサーバ側装置によって実行され、当該端末側装置では一部の処理が実行されてもよい。また、上記情報処理システムにおいて、サーバ側のシステムは、複数の情報処理装置によって構成され、サーバ側で実行するべき処理を複数の情報処理装置が分担して実行してもよい。また、いわゆるクラウドゲーミングの構成としてもよい。例えば、本体装置2は、ユーザの操作を示す操作データを所定のサーバに送り、当該サーバにおいて各種ゲーム処理が実行され、その実行結果が動画・音声として本体装置2にストリーミング配信されるような構成としてもよい。
【符号の説明】
【0119】
1 ゲームシステム
2 本体装置
3 左コントローラ
4 右コントローラ
81 プロセッサ
84 フラッシュメモリ
85 DRAM
【手続補正書】
【提出日】2024-09-25
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、
前記コンピュータを、
仮想空間において注目対象を撮像する仮想カメラと前記注目対象を結ぶ線分が、オブジェクトと衝突するかどうか判定する衝突判定手段と、
前記衝突判定手段によって、前記線分が前記オブジェクトと衝突すると判定された場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させる仮想カメラ制御手段と、
前記仮想カメラ制御手段によって前記仮想カメラが移動された後、移動された後の前記仮想カメラと前記注目対象とを結ぶ線分がオブジェクトと衝突すると判定されてから所定時間経過することを含む再移動条件を満たすかどうかを判定する再移動判定手段として機能させ、
前記仮想カメラ制御手段は、
前記再移動条件が満たされた場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記再移動条件が満たされない場合、前記仮想カメラを移動させない、
情報処理プログラム。
【請求項2】
前記仮想カメラ制御手段は、前記仮想カメラを前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に移動させたタイミングから当該仮想カメラが所定距離以上移動した場合に、前記再移動条件が満たされたものとする、請求項1に記載の情報処理プログラム
【請求項3】
前記仮想カメラ制御手段は、前記仮想カメラの俯角が小さくなるほど前記注目対象との距離が短くなるように当該仮想カメラを制御する、請求項1に記載の情報処理プログラム。
【請求項4】
前記仮想カメラ制御手段は、ユーザによるカメラ制御入力に基づいて前記仮想カメラの位置および姿勢の少なくとも一方を制御する、請求項1に記載の情報処理プログラム。
【請求項5】
前記注目対象はプレイヤキャラクタである、請求項1に記載の情報処理プログラム。
【請求項6】
前記仮想カメラから見て、前記オブジェクトによって前記注目対象の少なくとも一部が遮蔽される場合に、当該注目対象の少なくとも一部を、前記オブジェクトを透過して視認できる態様で描画する描画手段として前記コンピュータを更に機能させる、請求項1に記載の情報処理プログラム。
【請求項7】
前記仮想カメラ制御手段は、前記注目対象を注視点として、前記仮想カメラの移動および姿勢変化を行う、請求項1に記載の情報処理プログラム。
【請求項8】
仮想空間において注目対象を撮像する仮想カメラと前記注目対象を結ぶ線分が、オブジェクトと衝突するかどうか判定する衝突判定手段と、
前記衝突判定手段によって、前記線分が前記オブジェクトと衝突すると判定された場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させる仮想カメラ制御手段と、
前記仮想カメラ制御手段によって前記仮想カメラが移動された後、移動された後の前記仮想カメラと前記注目対象とを結ぶ線分がオブジェクトと衝突すると判定されてから所定時間経過することを含む再移動条件を満たすかどうかを判定する再移動判定手段とを備え、
前記仮想カメラ制御手段は、
前記再移動条件が満たされた場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記再移動条件が満たされない場合、前記仮想カメラを移動させない、
情報処理装置。
【請求項9】
仮想空間において注目対象を撮像する仮想カメラと前記注目対象を結ぶ線分が、オブジェクトと衝突するかどうか判定する衝突判定手段と、
前記衝突判定手段によって、前記線分が前記オブジェクトと衝突すると判定された場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させる仮想カメラ制御手段と、
前記仮想カメラ制御手段によって前記仮想カメラが移動された後、移動された後の前記仮想カメラと前記注目対象とを結ぶ線分がオブジェクトと衝突すると判定されてから所定時間経過することを含む再移動条件を満たすかどうかを判定する再移動判定手段とを備え、
前記仮想カメラ制御手段は、
前記再移動条件が満たされた場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記再移動条件が満たされない場合、前記仮想カメラを移動させない、
情報処理システム。
【請求項10】
情報処理装置のコンピュータに実行させる情報処理方法であって、
前記コンピュータに、
仮想空間において注目対象を撮像する仮想カメラと前記注目対象を結ぶ線分が、オブジェクトと衝突するかどうか判定させ、
前記線分が前記オブジェクトと衝突すると判定された場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記仮想カメラが移動された後、移動された後の前記仮想カメラと前記注目対象とを結ぶ線分がオブジェクトと衝突すると判定されてから所定時間経過することを含む再移動条件を満たすかどうかを判定させ、
前記再移動条件が満たされた場合、前記線分が前記オブジェクトと衝突しない位置であって、前記注目対象に近づく位置に前記仮想カメラを移動させ、
前記再移動条件が満たされない場合、前記仮想カメラを移動させない、
情報処理方法。