(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024015493
(43)【公開日】2024-02-02
(54)【発明の名称】情報処理システム、情報処理プログラム、情報処理方法、および情報処理装置
(51)【国際特許分類】
A63F 13/63 20140101AFI20240126BHJP
A63F 13/5372 20140101ALI20240126BHJP
A63F 13/57 20140101ALI20240126BHJP
A63F 13/58 20140101ALI20240126BHJP
【FI】
A63F13/63
A63F13/5372
A63F13/57
A63F13/58
【審査請求】未請求
【請求項の数】16
【出願形態】OL
(21)【出願番号】P 2023202434
(22)【出願日】2023-11-30
(62)【分割の表示】P 2023523122の分割
【原出願日】2022-03-03
(71)【出願人】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】100158780
【弁理士】
【氏名又は名称】寺本 亮
(74)【代理人】
【識別番号】100121359
【弁理士】
【氏名又は名称】小沢 昌弘
(74)【代理人】
【識別番号】100130269
【弁理士】
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】深田 直希
(72)【発明者】
【氏名】高山 貴裕
(72)【発明者】
【氏名】佐藤 祐也
(57)【要約】
【課題】仮想オブジェクト同士を接続して複数の仮想オブジェクトからなるオブジェクトを生成する場合にユーザビリティを向上させることが可能な情報処理システムを提供する。
【解決手段】情報処理システムの一例は、複数の仮想オブジェクトのうちの第1のオブジェクトを、複数の仮想オブジェクトのうちの第2のオブジェクトにそれぞれの接着位置において接着させる。第1のオブジェクト及び第2のオブジェクトの少なくとも何れか一方に設定された優先接着部を他の部分よりも優先して、接着位置として接着される。
【選択図】
図30
【特許請求の範囲】
【請求項1】
ユーザ操作に応じて第1のオブジェクトをゲーム空間内において移動または姿勢変化させるオブジェクト操作手段と、
ユーザ操作に応じて前記第1のオブジェクトと前記ゲーム空間内に配置された第2のオブジェクトを、前記第1のオブジェクトの前記第2のオブジェクトに対する位置または姿勢に応じた、前記第1のオブジェクトおよび前記第2のオブジェクトのそれぞれの接着位置同士で接着させる接着手段とを備え、
前記接着手段は、前記第1のオブジェクト及び前記第2のオブジェクトの少なくとも何れか一方に設定された優先接着部を、当該オブジェクトのその他の部分よりも優先して前記接着位置として他方のオブジェクトに接着させる、情報処理システム。
【請求項2】
前記接着手段は、
第1の条件を満たさない場合には、第2の条件を満たす、前記第1のオブジェクトにおける第1部分と前記第2のオブジェクトにおける第2部分とを前記接着位置として接着させ、
前記第1の条件を満たす場合には、前記優先接着部を、前記第2の条件を満たす、前記第1のオブジェクトにおける第1部分または前記第2のオブジェクトにおける第2部分よりも優先して前記接着位置として接着させる、請求項1に記載の情報処理システム。
【請求項3】
前記第1のオブジェクト及び前記第2のオブジェクトには前記優先接着部が設定され、
前記ゲーム空間には、前記優先接着部が設定されない第3のオブジェクトが配置され、
前記接着手段は、
前記第1のオブジェクトと前記第3のオブジェクトとを接着させる場合、第2の条件を満たす、前記第1のオブジェクトにおける第1部分と前記第3のオブジェクトにおける第3部分とを前記接着位置として接着させ、
前記第1のオブジェクトと前記第2のオブジェクトとを接着させる場合、第1の条件を満たすときには、前記第1のオブジェクトの前記第1の部分が前記第2の条件を満たすとしても、前記第1のオブジェクトの前記優先接着部を前記接着位置として接着させる、請求項1に記載の情報処理システム。
【請求項4】
前記第1のオブジェクト及び前記第2のオブジェクトには前記優先接着部が設定され、
前記接着手段は、
第1の条件を満たす場合、前記第1のオブジェクトの前記優先接着部と前記第2のオブジェクトの前記優先接着部とを前記接着位置として接着させ、
前記第1の条件を満たさない場合、前記第1のオブジェクト及び前記第2のオブジェクトにおける第2の条件を満たすそれぞれの部分を前記接着位置として接着させる、請求項1に記載の情報処理システム。
【請求項5】
前記第1の条件は、前記第1のオブジェクトの前記優先接着部と前記第2のオブジェクトの前記優先接着部との距離が所定値以下であるという条件を含む、請求項2から4の何れかに記載の情報処理システム。
【請求項6】
前記第1の条件は、前記第1のオブジェクトの前記優先接着部または前記第2のオブジェクトの前記優先接着部に設定された法線ベクトルに関する条件を含む、請求項2から5の何れかに記載の情報処理システム。
【請求項7】
前記第2の条件は、前記第1のオブジェクトと前記第2のオブジェクトとの距離が最も近いという条件である、請求項2から6の何れかに記載の情報処理システム。
【請求項8】
前記接着手段は、
前記第1のオブジェクト及び前記第2のオブジェクトに前記優先接着部が設定されている場合、それぞれの前記優先接着部を、当該オブジェクトのその他の部分よりも優先して前記接着位置として他方のオブジェクトに接着させ、
前記第1のオブジェクト及び前記第2のオブジェクトの一方に前記優先接着部が設定されていない場合、他方のオブジェクトに設定されている前記優先接着部を、当該オブジェクトのその他の部分よりも優先して前記接着位置として他方のオブジェクトに接着させることはしない、請求項1に記載の情報処理システム。
【請求項9】
前記接着手段は、それぞれの前記優先接着部において前記第1のオブジェクトと前記第2のオブジェクトとを接着する場合、各優先接着部に基づく所定の方向を用いて、前記第1のオブジェクト及び前記第2のオブジェクトの少なくとも何れか一方の姿勢を調整し、前記第1のオブジェクトと前記第2のオブジェクトとを接着する、請求項1から8の何れかに記載の情報処理システム。
【請求項10】
前記接着手段は、それぞれの前記優先接着部において前記第1のオブジェクトと前記第2のオブジェクトとを接着する場合、各優先接着部の法線方向が平行となるように、前記第1のオブジェクトと前記第2のオブジェクトとを接着する、請求項9に記載の情報処理システム。
【請求項11】
前記接着手段は、それぞれの前記優先接着部において前記第1のオブジェクトと前記第2のオブジェクトとを接着する場合、前記第1のオブジェクトの前記優先接着部に設定された接線方向と、前記第2のオブジェクトの前記優先接着部に設定された接線方向とが予め定められた角度となるように、前記第1のオブジェクトと前記第2のオブジェクトとを接着する、請求項9又は10に記載の情報処理システム。
【請求項12】
前記接着手段によって前記第1のオブジェクトおよび前記第2のオブジェクトのそれぞれの接着位置同士が接着される前に、当該それぞれの接着位置を示すガイドオブジェクトを生成する、ガイドオブジェクト生成手段をさらに備える、請求項1から11の何れかに記載の情報処理システム。
【請求項13】
前記ガイドオブジェクトは、前記それぞれの接着位置を結ぶ、請求項12に記載の情報処理システム。
【請求項14】
情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、前記コンピュータを、
ユーザ操作に応じて第1のオブジェクトをゲーム空間内において移動または姿勢変化させるオブジェクト操作手段と、
ユーザ操作に応じて前記第1のオブジェクトと前記ゲーム空間内に配置された第2のオブジェクトを、前記第1のオブジェクトの前記第2のオブジェクトに対する位置または姿勢に応じた、前記第1のオブジェクトおよび前記第2のオブジェクトのそれぞれの接着位置同士で接着させる接着手段として機能させ、
前記接着手段は、前記第1のオブジェクト及び前記第2のオブジェクトの少なくとも何れか一方に設定された優先接着部を、当該オブジェクトのその他の部分よりも優先して前記接着位置として他方のオブジェクトに接着させる、情報処理プログラム。
【請求項15】
情報処理システムにおいて実行される情報処理方法であって、
ユーザ操作に応じて第1のオブジェクトをゲーム空間内において移動または姿勢変化させるオブジェクト操作ステップと、
ユーザ操作に応じて前記第1のオブジェクトと前記ゲーム空間内に配置された第2のオブジェクトを、前記第1のオブジェクトの前記第2のオブジェクトに対する位置または姿勢に応じた、前記第1のオブジェクトおよび前記第2のオブジェクトのそれぞれの接着位置同士で接着させる接着ステップと、を含み、
前記接着ステップでは、前記第1のオブジェクト及び前記第2のオブジェクトの少なくとも何れか一方に設定された優先接着部を、当該オブジェクトのその他の部分よりも優先して前記接着位置として他方のオブジェクトに接着させる、情報処理方法。
【請求項16】
ユーザ操作に応じて第1のオブジェクトをゲーム空間内において移動または姿勢変化させるオブジェクト操作手段と、
ユーザ操作に応じて前記第1のオブジェクトと前記ゲーム空間内に配置された第2のオブジェクトを、前記第1のオブジェクトの前記第2のオブジェクトに対する位置または姿勢に応じた、前記第1のオブジェクトおよび前記第2のオブジェクトのそれぞれの接着位置同士で接着させる接着手段と、を備え、
前記接着手段は、前記第1のオブジェクト及び前記第2のオブジェクトの少なくとも何れか一方に設定された優先接着部を、当該オブジェクトのその他の部分よりも優先して前記接着位置として他方のオブジェクトに接着させる、情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ユーザの操作により複数の仮想オブジェクトを組み合わせることが可能な情報処理システム、情報処理プログラム、情報処理方法および情報処理装置に関する。
【背景技術】
【0002】
従来より、操作対象オブジェクトを移動させて仮想空間に存在するオブジェクトと接触させることで複数のオブジェクトを一体として構成するゲームシステムがある(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、個別の複数の仮想オブジェクトを用いて、ユーザの操作により当該複数の仮想オブジェクトからなるオブジェクトを生成する場合において、ユーザビリティを向上させるという観点では改善の余地があった。
【0005】
それ故、本発明の目的は、個別の複数の仮想オブジェクトを用いて、当該複数の仮想オブジェクトからなるオブジェクトを生成する場合にユーザビリティを向上させることが可能な情報処理システム、情報処理プログラム、情報処理方法および情報処理装置を提供することである。
【課題を解決するための手段】
【0006】
上記の課題を解決すべく、本発明は、以下の構成を採用した。
【0007】
本実施形態の情報処理システムの一例は、ゲーム空間内で移動可能であってそれぞれを接着可能な複数の仮想オブジェクトを前記ゲーム空間に配置する配置手段と、前記ゲーム空間に配置された複数の仮想オブジェクトのうちの第1オブジェクトをユーザの選択操作によって選択する選択手段と、前記選択操作によって選択された前記第1オブジェクト、及び、前記複数の仮想オブジェクトのうちの第2オブジェクトにおけるそれぞれの位置を示す接着オブジェクトを生成する接着オブジェクト生成手段と、ユーザの接着指示に応じて、前記第1オブジェクトと前記第2オブジェクトとを、前記接着オブジェクトが示すそれぞれの前記位置において接着する接着手段と、を備える。前記接着オブジェクト生成手段は、前記接着指示が行われる前に前記ゲーム空間内で前記選択された前記第1オブジェクトが移動または姿勢変化したことに応じて、前記接着オブジェクトが示すそれぞれの前記位置を変化させる。
本実施形態の情報処理システムの他の例は、ユーザ操作に応じて第1のオブジェクトをゲーム空間内において移動または姿勢変化させるオブジェクト操作手段と、ユーザ操作に応じて前記第1のオブジェクトと前記ゲーム空間内に配置された第2のオブジェクトを、前記第1のオブジェクトの前記第2のオブジェクトに対する位置または姿勢に応じた、前記第1のオブジェクトおよび前記第2のオブジェクトのそれぞれの接着位置同士で接着させる接着手段とを備え、前記接着手段は、前記第1のオブジェクト及び前記第2のオブジェクトの少なくとも何れか一方に設定された優先接着部を、当該オブジェクトのその他の部分よりも優先して前記接着位置として他方のオブジェクトに接着させる。
【0008】
上記によれば、ユーザが複数の仮想オブジェクトを接着して複数の仮想オブジェクトからなるオブジェクトを構成する場合に、利便性を向上させることができる。
【0009】
また、上記情報処理システムは、前記第1オブジェクトが移動する場合に、前記第1オブジェクトと前記第2オブジェクトとの衝突判定を行い、前記第1オブジェクトと前記第2オブジェクトとが衝突した場合、前記第1オブジェクト及び前記第2オブジェクトの少なくとも何れか一方の移動を制御する制御手段をさらに備えてもよい。
【0010】
上記によれば、第1オブジェクトと第2オブジェクトを組み立てるときに衝突判定が行われ、各オブジェクトの挙動が制御される。これにより、ユーザは、第1オブジェクトと第2オブジェクトとの距離を認識しながら、第1オブジェクトと第2オブジェクトを組み立てることができる。
【0011】
また、上記情報処理システムは、前記第1オブジェクトを前記第2オブジェクトの表面に投影した投影像を生成する投影手段をさらに備えてもよい。
【0012】
上記によれば、第1オブジェクトと第2オブジェクトとの位置関係をユーザに容易に認識させることができる。
【0013】
また、前記投影手段は、前記選択された第1オブジェクトを第1方向に投影した第1投影像と、前記選択された第1オブジェクトを前記第1方向と直交する第2方向に投影した第2投影像とを生成してもよい。
【0014】
上記によれば、直交する2方向に第1オブジェクトを投影することができるため、ユーザは、第1オブジェクトと第2オブジェクトとの位置関係をより容易に認識することができる。
【0015】
また、上記情報処理システムは、前記ゲーム空間に設定された光源に基づいて、前記投影像とは別に、前記第1オブジェクトの影を生成する影生成手段をさらに備えてもよい。
【0016】
上記によれば、第1オブジェクトの影と投影像とを生成することができる。
【0017】
また、前記選択された前記第1オブジェクトは所定の色で表示され、前記第1オブジェクトの投影像は、前記所定の色で表示されてもよい。
【0018】
上記によれば、第1オブジェクトとその投影像とが同じ色で表示されるため、ユーザは、第2オブジェクトの表面に映った投影像が、第1オブジェクトの投影像であることを容易に認識することができ、第1オブジェクトと第2オブジェクトとの位置関係を容易に認識することができる。
【0019】
また、前記仮想オブジェクトには、他の部分よりも接着され易い優先接着部が設定されてもよい。
【0020】
上記によれば、優先接着部において複数の仮想オブジェクトを優先的に接着することができる。
【0021】
また、前記第1オブジェクトの前記優先接着部と前記第2オブジェクトの前記優先接着部とが第1の条件を満たす場合、前記接着オブジェクト生成手段は、前記第1オブジェクトの前記優先接着部及び前記第2オブジェクトの前記優先接着部を示す前記接着オブジェクトを生成してもよい。前記第1オブジェクトの前記優先接着部と前記第2オブジェクトの前記優先接着部とが前記第1の条件を満たさない場合、前記接着オブジェクト生成手段は、前記第1オブジェクト及び前記第2オブジェクトにおける第2の条件を満たすそれぞれの位置を示す前記接着オブジェクトを生成してもよい。
【0022】
上記によれば、第1オブジェクト及び第2オブジェクトの双方の優先接着部が第1の条件を満たす場合には、これらの優先接着部において、第1オブジェクト及び第2オブジェクトを接着することができる。また、第1の条件を満たさない場合は、第1オブジェクト及び第2オブジェクトにおける第2の条件を満たす位置において、第1オブジェクト及び第2オブジェクトを接着することができる。
【0023】
また、前記第1オブジェクトの前記優先接着部と前記第2オブジェクトの前記優先接着部とが第1の条件を満たす場合、前記接着オブジェクト生成手段は、前記第1オブジェクトの前記優先接着部及び前記第2オブジェクトの前記優先接着部を示す前記接着オブジェクトを生成してもよい。前記第1オブジェクト及び前記第2オブジェクトの少なくとも一方に前記優先接着部が設定されていない場合、前記接着オブジェクト生成手段は、前記第1オブジェクト及び前記第2オブジェクトにおける第2の条件を満たすそれぞれの位置を示す前記接着オブジェクトを生成してもよい。
【0024】
上記によれば、第1オブジェクトの優先接着部と第2オブジェクトの優先接着部とが第1の条件を満たす場合には、当該優先接着部同士を優先的に接着することができる。また、第1オブジェクト及び第2オブジェクトの少なくとも一方に優先接着部が設定されていない場合、第1オブジェクト及び第2オブジェクトにおける第2の条件を満たす位置において、第1オブジェクト及び第2オブジェクトを接着することができる。
【0025】
また、前記接着手段は、それぞれの前記優先接着部において前記第1オブジェクトと前記第2オブジェクトとを接着する場合、各優先接着部に基づく所定の方向を用いて、前記第1オブジェクト及び前記第2オブジェクトの少なくとも何れか一方の姿勢を調整し、前記第1オブジェクトと前記第2オブジェクトとを接着してもよい。
【0026】
上記によれば、優先接着部同士を接着する場合に、各優先接着部に基づく所定の方向を用いて第1オブジェクト又は第2オブジェクトの姿勢を調整することができる。例えば、各優先接着部に設定された方向に基づいて、各オブジェクトの姿勢を調整し、各オブジェクトを接着することができる。
【0027】
また、前記接着手段は、それぞれの前記優先接着部において前記第1オブジェクトと前記第2オブジェクトとを接着する場合、各優先接着部の法線方向が平行となるように、前記第1オブジェクトと前記第2オブジェクトとを接着してもよい。
【0028】
上記によれば、各優先接着部の法線方向を合わせることができ、例えば、第1オブジェクトのある面と、第2オブジェクトのある面とが平行になるように、第1オブジェクトと第2オブジェクトの姿勢を調整して、2つのオブジェクトを接着することができる。
【0029】
また、前記接着手段は、それぞれの前記優先接着部において前記第1オブジェクトと前記第2オブジェクトとを接着する場合、前記第1オブジェクトの前記優先接着部に設定された接線方向と、前記第2オブジェクトの前記優先接着部に設定された接線方向とが予め定められた角度となるように、前記第1オブジェクトと前記第2オブジェクトとを接着してもよい。
【0030】
上記によれば、各優先接着部に設定された接線方向が予め定められた角度となるように、第1オブジェクトと第2オブジェクトの姿勢を調整して、2つのオブジェクトを接着することができる。
【0031】
また、前記接着オブジェクトは、前記第1オブジェクトの前記位置と前記第2オブジェクトの前記位置とを結ぶオブジェクトであってもよい。
【0032】
上記によれば、第1オブジェクト及び第2オブジェクトが接着オブジェクトで示された接着位置で接着されることを直感的にユーザに認識させることができる。
【0033】
また、前記選択手段は、前記第1オブジェクト及び前記第2オブジェクトが接着された状態において、前記第1オブジェクト及び前記第2オブジェクトのうちの何れか一方を選択してもよい。前記接着オブジェクト生成手段は、前記選択された何れか一方の仮想オブジェクト、及び、前記複数の仮想オブジェクトのうちの第3オブジェクトにおけるそれぞれの位置を示す前記接着オブジェクトを生成してもよい。前記接着手段は、ユーザの接着指示に応じて、前記選択された何れか一方の仮想オブジェクトと前記第3オブジェクトとを、前記接着オブジェクトが示すそれぞれの前記位置において接着してもよい。
【0034】
上記によれば、ユーザは、第1及び第2オブジェクトからなるオブジェクトに対して、さらに第3オブジェクトを容易に所望の位置に接着することができる。
【0035】
また、前記接着手段によって接着された前記第1オブジェクトと前記第2オブジェクトとの接着位置を覆うカバーオブジェクトが表示されてもよい。
【0036】
上記によれば、前記第1オブジェクトと前記第2オブジェクトとが接着する位置において、当該接着位置を覆うカバーオブジェクトが表示されるため、接着位置をユーザに認識させることができる。
【0037】
また、前記接着手段によって前記第1オブジェクトと前記第2オブジェクトとが前記接着オブジェクトが示す前記位置において接着された後、前記接着オブジェクトは、前記カバーオブジェクトとして前記位置に残留してもよい。
【0038】
上記によれば、接着オブジェクトをカバーオブジェクトとして接着指示後も残留させることができる。
【0039】
また、前記接着手段によって前記第1オブジェクトと前記第2オブジェクトとが前記接着オブジェクトが示す前記位置において接着された後、前記接着オブジェクトは当該位置を含む所定範囲に残留してもよい。
【0040】
上記によれば、第1オブジェクトと第2オブジェクトとが接着された後でも、これらがユーザの操作により接着されたことを表示することができる。
【0041】
また、前記接着手段は、前記第1オブジェクトと前記第2オブジェクトとを接着する場合、互いに近づくように前記第1オブジェクトと前記第2オブジェクトとを移動させて接着してもよい。
【0042】
上記によれば、第1オブジェクトと第2オブジェクトとを接着する際に、互いに近づけながら移動させることができる。
【0043】
また、前記複数の仮想オブジェクトのそれぞれには重さが設定されてもよい。前記接着手段は、軽い方のオブジェクトの方が重い方のオブジェクトよりも移動距離が長くなるように、前記第1オブジェクトと前記第2オブジェクトとを移動させてもよい。
【0044】
上記によれば、ユーザは、例えば2つの仮想オブジェクトが接着されるときの挙動によって2つの仮想オブジェクトの重さの関係を把握することができる。
【0045】
また、前記接着手段は、前記接着指示に応じて、複数の前記仮想オブジェクトを接着した合体オブジェクトを生成してもよい。また、上記情報処理システムは、複数の前記仮想オブジェクトを含む合体オブジェクトから、少なくとも何れか1つの仮想オブジェクトを離脱させる離脱手段と、前記合体オブジェクトを構成する複数の前記仮想オブジェクトに基づいて、前記合体オブジェクトに関する合体オブジェクト情報を算出して記憶する合体オブジェクト情報算出手段と、前記合体オブジェクト情報に基づいて、前記合体オブジェクトの動作を制御する動作制御手段と、をさらに備えてもよい。前記合体オブジェクト情報算出手段は、前記接着手段によって前記仮想オブジェクトが接着される毎に前記合体オブジェクト情報を算出して記憶し、前記離脱手段によって前記合体オブジェクトから前記仮想オブジェクトが離脱される毎に前記合体オブジェクト情報を算出して記憶してもよい。
【0046】
上記によれば、合体オブジェクトの挙動を計算する際に、合体オブジェクトに含まれる複数の仮想オブジェクト間の接着をその都度調べなくても、合体オブジェクト情報を用いて合体オブジェクトとしての挙動を計算することができる。
【0047】
また、他の発明は、情報処理装置のコンピュータを上記各手段として機能させる情報処理プログラムであってもよい。また、他の発明は、上記情報処理システムにおいて行われる情報処理方法であってもよい。
【図面の簡単な説明】
【0048】
【
図1】本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図
【
図2】本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図
【
図6】本体装置2の内部構成の一例を示すブロック図
【
図7】本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図
【
図8】本実施形態のゲームが実行された場合に表示されるゲーム画像の一例を示す図
【
図9】ユーザがエンジンオブジェクト70aを選択している様子を示すゲーム画像の一例を示す図
【
図10】ユーザキャラクタPCが
図9の位置から斜め上方向に移動した後のゲーム画像の一例を示す図
【
図11】ユーザキャラクタPCが
図10の位置からさらに奥行き方向に移動した後のゲーム画像の一例を示す図
【
図12】
図11に示す状態でユーザによって接着指示が行われた後のゲーム画像の一例を示す図
【
図13】エンジンオブジェクト70aと翼オブジェクト70bとによって構成された合体オブジェクトとしての飛行機オブジェクト75の一例を示す図
【
図14】車輪オブジェクト70cを選択した直後のゲーム画像の一例を示す図
【
図15】車輪オブジェクト70cを選択した後、車輪オブジェクト70cの姿勢を変化させた後のゲーム画像の一例を示す図
【
図16】選択した車輪オブジェクト70cを板オブジェクト70dに近づけたときのゲーム画像の一例を示す図
【
図17】車輪オブジェクト70cが板オブジェクト70dに接着された後のゲーム画像の一例を示す図
【
図18】合体オブジェクト76を構成する板オブジェクト70dを選択して、板オブジェクト70dに車輪オブジェクト70cを接着させる様子の一例を示す図
【
図19】合体オブジェクトとしての4輪車オブジェクト76の一例を示す図
【
図20】岩オブジェクト70gを選択した直後のゲーム画像の一例を示す図
【
図21】選択した岩オブジェクト70gを箱オブジェクト70fに近づけたときのゲーム画像の一例を示す図
【
図22】
図21の状態から岩オブジェクト70gを動かしたときのゲーム画像の一例を示す図
【
図23】
図22の状態で接着指示が行われたときのゲーム画像の一例を示す図
【
図24】接着オブジェクト78の基本形状の一例を示す図
【
図25】接着オブジェクト78を変形させる方法を説明するための図
【
図26】接着オブジェクト78を変形させる方法を説明するための図
【
図27】接着オブジェクト78を変形させる方法を説明するための図
【
図28】接着オブジェクト78を変形させる方法を説明するための図
【
図29】2つの仮想オブジェクト70が優先接着部BPにおいて接着される場合の接着オブジェクト78の生成について説明するための図
【
図30】2つの仮想オブジェクト70が優先接着部BPにおいて接着される場合において、接着指示が行われる前後の位置関係を示す図
【
図31】接線ベクトルTLに応じて選択オブジェクトの姿勢が制御される例を説明するための図
【
図32】2つの仮想オブジェクト70が接着されている状態で接着解除操作が行われたときの一例を示す図
【
図33】仮想カメラVCの向きを右方向に変化させたときの選択オブジェクトの移動の一例を示す図
【
図34】2つの仮想オブジェクト70が接着されている状態で所定の解除条件を満たさない入力が行われたときの一例を示す図
【
図35】4つの仮想オブジェクト70が接着されている状態で接着解除操作が行われた場合の接着解除の一例を示す図
【
図36】ゲーム処理の実行中に本体装置2のメモリに記憶されるデータの一例を示す図
【
図37】本体装置2のプロセッサ81によって実行されるゲーム処理の一例を示すフローチャート
【
図38】ステップS106の合体オブジェクト生成処理の一例を示すフローチャート
【
図39】ステップS152の接着オブジェクト生成処理の一例を示すフローチャート
【
図40】ステップS108の接着解除処理の一例を示すフローチャート
【発明を実施するための形態】
【0049】
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。
【0050】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0051】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0052】
図3は、本体装置2の一例を示す六面図である。
図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
【0053】
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。
【0054】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。
【0055】
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、
図6に示すスピーカ88)を備えている。
図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。
【0056】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
【0057】
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。
【0058】
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。
【0059】
図4は、左コントローラ3の一例を示す六面図である。
図4に示すように、左コントローラ3は、ハウジング31を備える。
【0060】
左コントローラ3は、アナログスティック32を備える。
図4に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
【0061】
左コントローラ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プログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
【0062】
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
【0063】
図5は、右コントローラ4の一例を示す六面図である。
図5に示すように、右コントローラ4は、ハウジング51を備える。
【0064】
右コントローラ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を備える。
【0065】
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
【0066】
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、
図3に示す構成の他、
図6に示す各構成要素81~91、97、および98を備える。これらの構成要素81~91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
【0067】
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System-on-a-chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0068】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0069】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
【0070】
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0071】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi-Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。
【0072】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。
【0073】
プロセッサ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は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0074】
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
【0075】
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0076】
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
【0077】
また、本体装置2は、加速度センサ89を備える。本実施形態においては、加速度センサ89は、所定の3軸(例えば、
図1に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ89は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。
【0078】
また、本体装置2は、角速度センサ90を備える。本実施形態においては、角速度センサ90は、所定の3軸(例えば、
図1に示すxyz軸)回りの角速度を検出する。なお、角速度センサ90は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。
【0079】
加速度センサ89および角速度センサ90は、プロセッサ81に接続され、加速度センサ89および角速度センサ90の検出結果は、プロセッサ81へ出力される。プロセッサ81は、上記の加速度センサ89および角速度センサ90の検出結果に基づいて、本体装置2の動きおよび/または姿勢に関する情報を算出することが可能である。
【0080】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。
【0081】
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、
図6で示しているため
図7では省略している。
【0082】
左コントローラ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(登録商標)の規格に従って行われる。
【0083】
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
【0084】
左コントローラ3は、各ボタン103(具体的には、ボタン33~39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(
図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
【0085】
左コントローラ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へ出力される。
【0086】
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【0087】
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
【0088】
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
【0089】
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。
【0090】
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、アナログスティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
【0091】
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
【0092】
(ゲームの概要)
次に、本実施形態のゲームについて説明する。本実施形態のゲームでは、仮想空間(ゲーム空間)に、ユーザキャラクタPCが配置され、ユーザキャラクタPCが仮想空間内を移動したり所定の動作を行ったり、敵キャラクタを倒したりすることでゲームが進行する。仮想空間には仮想カメラが配置される。仮想カメラは、その撮像範囲にユーザキャラクタPCを含むように配置される。例えば、仮想カメラは、ユーザキャラクタPCの背後に設定されてもよい。仮想カメラを用いてユーザキャラクタPCを含むゲーム画像が生成されて、ディスプレイ12又は据置型モニタに表示される。
【0093】
図8は、本実施形態のゲームが実行された場合に表示されるゲーム画像の一例を示す図である。
図8に示されるように、仮想空間には、ユーザキャラクタPCと、複数の仮想オブジェクト70(70a~70g)とが配置される。また、図示は省略するが、仮想空間には、仮想空間に固定される木や建物等のオブジェクトが配置される。
【0094】
ユーザキャラクタPCは、ユーザによって操作されるキャラクタである。ユーザキャラクタPCは、コントローラ(3又は4)に対する入力に応じて仮想空間内を移動したり、仮想空間内で所定の動作を行ったりする。また、ユーザキャラクタPCは、複数の仮想オブジェクト70を組み合わせて合体オブジェクトを作成する。
【0095】
複数の仮想オブジェクト70は、ユーザの操作に応じて仮想空間内を移動可能なオブジェクトであり、互いに接着し得るオブジェクトである。複数の仮想オブジェクト70は、互いに接着されることで合体オブジェクトを構成する。例えば、複数の仮想オブジェクト70は、予め仮想空間の地面に配置されている。また、複数の仮想オブジェクト70は、ユーザの操作に基づいて仮想空間に出現してもよい。例えば、ユーザキャラクタPCが敵キャラクタを倒した場合や所定の課題をクリアした場合に、仮想オブジェクト70が仮想空間に出現してもよい。また、複数の仮想オブジェクト70は、ユーザキャラクタPCが所有するアイテムとして管理されており、通常は仮想空間に配置されず、ユーザキャラクタPCの仮想的な収容領域内に素材オブジェクトとして収容されてもよい。そして、ユーザの操作が行われた場合に、収容領域内に収容された仮想オブジェクト70が仮想空間内に出現してもよい。
【0096】
ユーザは、複数の仮想オブジェクト70を組み合わせることにより、合体オブジェクトを生成することができる。例えば、ユーザは、合体オブジェクトとして、車両、戦車、飛行機等を生成することができ、生成した合体オブジェクトを用いてゲームを進めることができる。例えば、ユーザは、生成した合体オブジェクトを、仮想空間内での移動や敵キャラクタへの攻撃のために用いることができる。
【0097】
例えば、複数の仮想オブジェクト70は、エンジンオブジェクト70aと、翼オブジェクト70bと、車輪オブジェクト70cと、板オブジェクト70dと、操縦桿オブジェクト70eと、箱オブジェクト70fと、岩オブジェクト70gとを含む。なお、これらの他にも、合体オブジェクトを構成するための別の仮想オブジェクトがさらに用意されてもよい。
【0098】
エンジンオブジェクト70aは、ジェットエンジンを模したオブジェクトであり、動力を有する仮想オブジェクトである。エンジンオブジェクト70aは、合体オブジェクトの一部として構成された場合、合体オブジェクト全体に対して速度や加速度、角速度を加える。翼オブジェクト70bは、空を飛ぶための仮想オブジェクトであり、所定の速度以上で仮想空間内を移動する場合に揚力を発生させる。
【0099】
車輪オブジェクト70cは、動力を有する仮想オブジェクトであり、例えば車両の車輪として構成可能なオブジェクトである。車輪オブジェクト70cは、予め定められた一方向に回転可能に構成されている。また、板オブジェクト70dは、平面状の仮想オブジェクトである。板オブジェクト70dは、例えば車両の車体として利用可能である。また、複数の板オブジェクト70dを縦にして並べることで仮想空間に壁を形成したり、複数の板オブジェクト70dを用いて6面体を形成したりすることもできる。
【0100】
操縦桿オブジェクト70eは、合体オブジェクトの一部として構成された場合に、合体オブジェクトの移動を制御するための仮想オブジェクトである。例えば、操縦桿オブジェクト70eは、合体オブジェクトに対して回転を加え、合体オブジェクトの移動方向を制御する。
【0101】
また、箱オブジェクト70fは、例えば立方体の形状を有する仮想オブジェクトであり、様々な合体オブジェクトの一部として構成可能なオブジェクトである。また、岩オブジェクト70gは、曲面形状の仮想オブジェクトであり、岩を模したオブジェクトである。
【0102】
図8に示されるように、仮想オブジェクト70の表面には、1又は複数の優先接着部BPが設定される場合がある。詳細は後述するが、優先接着部BPは、仮想オブジェクト70同士を接着する際に、他の部分よりも優先的に接着される位置である。
【0103】
ここで、本実施形態において、仮想オブジェクト70同士の「接着」とは、仮想オブジェクト70同士が近接した位置で一体的なオブジェクトとしてふるまうことを意味する。例えば、2つの仮想オブジェクト70が接着されている場合、当該2つの仮想オブジェクト70は互いに接してもよい。また、2つの仮想オブジェクト70が接着されている場合、2つの仮想オブジェクト70が厳密に接していなくてもよく、例えば、2つの仮想オブジェクト70間に、間隙があったり、後述する接着オブジェクトが介在してもよい。また、「複数の仮想オブジェクト70が一体的なオブジェクトとしてふるまう」とは、複数の仮想オブジェクト70の相対的な位置関係が維持され、複数の仮想オブジェクト70が1つのオブジェクトであるかのように仮想空間内を移動したり、姿勢を変化させたりすることを含む。なお、接着された複数の仮想オブジェクト70の相対的な位置関係が完全に固定されず、例えば、複数の仮想オブジェクト70の何れかに力が加わったり、衝撃が加わったりした場合に、これらが接着されたまま、これらの位置関係に多少の変化があってもよい。
【0104】
優先接着部BPは、ゲーム制作者によって各仮想オブジェクト70に予め設定されている。例えば、エンジンオブジェクト70aの底面には1つの優先接着部BPが設定される。また、翼オブジェクト70bの上面には、3つの優先接着部BPが設定される。また、板オブジェクト70dの上面、及び、側面には複数の優先接着部BPが設定される。また、車輪オブジェクト70c、及び、操縦桿オブジェクト70eにも、1又は複数の優先接着部BPが予め設定される。
【0105】
一方、箱オブジェクト70f及び岩オブジェクト70gには、優先接着部BPは設定されていない。
【0106】
ユーザは、仮想空間に配置されている何れか1つの仮想オブジェクト70を選択し、他の仮想オブジェクト70と接着することで、複数の仮想オブジェクト70を接着した合体オブジェクトを生成することができる。
図9は、ユーザがエンジンオブジェクト70aを選択している様子を示すゲーム画像の一例を示す図である。
【0107】
ユーザは、例えば、左コントローラ3のアナログスティック32を用いてユーザキャラクタPCを仮想空間内で移動させることができる。ユーザキャラクタPCが仮想空間内を移動すると、ユーザキャラクタPCに追従して仮想カメラも仮想空間内を移動する。また、ユーザは、右コントローラ4のアナログスティック52を用いて仮想カメラの向き(視線方向)を制御することができる。仮想カメラは、その撮像範囲にユーザキャラクタPCが含まれるように、仮想空間内を移動する。
【0108】
例えば、画面の中央には仮想オブジェクト70を指示するための指示標識(図示せず)が表示されており、ユーザは、ユーザキャラクタPCを移動させたり仮想カメラの向きを変化させたりすることで、画面の中央にエンジンオブジェクト70aが位置するようにする。指示標識によってエンジンオブジェクト70aが指示されているときに(すなわち、エンジンオブジェクト70aが画面の中央に位置しているときに)、左コントローラ3又は右コントローラ4の所定のボタンが押下されると、
図9に示されるように、エンジンオブジェクト70aが選択される。選択されている仮想オブジェクト70は、他の仮想オブジェクト70とは異なる表示態様となる。例えば、各仮想オブジェクト70は、ユーザによって選択されていないときにはそれぞれ固有の色を有するが、ユーザによって選択されているときは、所定の色(例えば黄色)に変化する。例えば、
図9に示すように、選択されているエンジンオブジェクト70aは、他の仮想オブジェクト70とは異なる所定の色(例えば黄色)で表示される。なお、選択されている仮想オブジェクト70を囲むような画像を表示したり、選択されている仮想オブジェクト70を指示する矢印を表示したりすることで、選択されている仮想オブジェクト70を他の仮想オブジェクト70とは異なる表示態様で表示してもよい。
【0109】
なお、以下では、ユーザによって選択されている仮想オブジェクト70を、「選択オブジェクト」ということがある。また、ユーザによって選択されていない仮想オブジェクト70を、「他の仮想オブジェクト70」ということがある。
【0110】
また、仮想オブジェクト70が選択されている場合、当該仮想オブジェクト70が選択されていることを示す選択画像77が表示される。選択画像77は、ユーザキャラクタPCから選択オブジェクトに伸びる画像である。
【0111】
選択されているエンジンオブジェクト70aは、ユーザの操作によって(又は自動的に)、地面から浮いたように表示される。選択されているエンジンオブジェクト70aが地面から浮いている場合、地面には、エンジンオブジェクト70aの像71a(投影像)が投影される。また、エンジンオブジェクト70aの所定位置(例えば中心位置)を示す点72aも、地面に投影される。
【0112】
エンジンオブジェクト70aが選択されている状態でユーザキャラクタPCが仮想空間内を移動すると、ユーザキャラクタPCの移動に追従してエンジンオブジェクト70aも移動する。すなわち、選択オブジェクトは、ユーザキャラクタPCの移動に応じて移動する。
【0113】
また、後述するように、ユーザキャラクタPCの位置が変化しなくても、選択オブジェクトは移動する場合がある。例えば、ユーザキャラクタPCの向きが変化した場合も、移動する。具体的には、ユーザキャラクタPCの正面に選択オブジェクトが位置するように、ユーザキャラクタPCの向きの変化に応じて、選択オブジェクトは移動する。また、ユーザキャラクタPCと選択オブジェクトとの間の距離が変化することによって、選択オブジェクトが移動する場合もある。例えば、ユーザキャラクタPCの向きが仮想空間の上方に変化された場合、選択オブジェクトも仮想空間の上方に移動する。ユーザキャラクタPCが仮想空間の上方を向くときは、ユーザキャラクタPCが地面と平行な方向を向くときよりも、ユーザキャラクタPCと選択オブジェクトとの間の距離が長くなる。
【0114】
図10は、ユーザキャラクタPCが
図9の位置から斜め上方向に移動した後のゲーム画像の一例を示す図である。
図10に示されるように、ユーザキャラクタPCが移動すると、選択されているエンジンオブジェクト70aも移動する。具体的には、左コントローラ3のアナログスティック32の入力方向に応じて、ユーザキャラクタPCが移動し、ユーザキャラクタPCの移動に応じて仮想カメラも移動する。選択オブジェクトは、ユーザキャラクタPCとの位置関係が維持されるように移動する。このため、ユーザキャラクタPCが仮想空間において所定方向に移動すると、選択されているエンジンオブジェクト70aも所定方向に移動する。
【0115】
図11は、ユーザキャラクタPCが
図10の位置からさらに奥行き方向に移動した後のゲーム画像の一例を示す図である。
図11に示されるように、ユーザキャラクタPCが
図10の位置からさらに奥行き方向に移動すると、エンジンオブジェクト70aもさらに奥行き方向に移動する。この場合、エンジンオブジェクト70aは、地面に配置された翼オブジェクト70bの上方に位置する。このとき、エンジンオブジェクト70aと翼オブジェクト70bとを結ぶ接着オブジェクト78が出現する。
【0116】
ここで、接着オブジェクト78は、選択オブジェクトと、他の仮想オブジェクト70とを接着するためのオブジェクトであり、粘性を有する接着剤を模したオブジェクトである。接着オブジェクト78は、選択オブジェクト及び他の仮想オブジェクト70のそれぞれの接着位置を示すオブジェクトである。ここで、「接着位置」は、選択オブジェクトと、他の仮想オブジェクト70とが接着された場合、選択オブジェクトと他の仮想オブジェクト70が接する位置である。接着オブジェクト78は、2つの仮想オブジェクト70の接着位置を結び、ユーザの接着指示が行われた場合に、これら2つの仮想オブジェクト70が接着位置において接着されることをユーザに認識させる。接着オブジェクト78は、選択オブジェクトと他の仮想オブジェクト70とが接着される前において、選択オブジェクトと他の仮想オブジェクト70とが所定の接着条件を満たす場合に出現する。所定の接着条件は、選択オブジェクトと他の仮想オブジェクト70とが接着し得る条件である。例えば、所定の接着条件は、選択オブジェクトと他の仮想オブジェクト70との距離、選択オブジェクト及び他の仮想オブジェクト70の大きさ、形状、姿勢等によって定まる条件である。具体的には、選択オブジェクトが移動される場合、所定の接着条件を満たす他の仮想オブジェクト70が探索される。探索の結果、選択オブジェクトと接触し得る他の仮想オブジェクト70が見つかった場合、選択オブジェクトと当該他の仮想オブジェクト70とを結ぶ接着オブジェクト78が出現する。接着オブジェクト78により、ユーザは、選択オブジェクトがどの仮想オブジェクト70に接着するか、選択オブジェクトにおけるどの位置と他の仮想オブジェクト70におけるどの位置とが接着するかを接着前に認識することができる。
【0117】
なお、接着オブジェクト78は、仮想オブジェクト70が選択されたこと(仮想オブジェクト70が選択オブジェクトとして設定されたこと)に応じて選択オブジェクト及び他の仮想オブジェクト70の表面に出現し、その後、選択オブジェクトと他の仮想オブジェクト70とが所定の接着条件を満たしたときに、選択オブジェクトと他の仮想オブジェクト70とを結ぶように形成されてもよい。
【0118】
選択オブジェクトと他の仮想オブジェクト70とが所定の接着条件を満たす場合において、選択オブジェクトと他の仮想オブジェクト70とに優先接着部BPが設定されている場合、優先接着部同士が優先的に接着される。具体的には、選択オブジェクトに設定された優先接着部BPと、他の仮想オブジェクト70に設定された優先接着部BPとが、第1の条件(詳細は後述する)を満たす場合には、これら優先接着部BPが接着位置として設定される。そして、接着オブジェクト78は、これら優先接着部BP同士を結ぶように形成される。
【0119】
選択オブジェクトに設定された優先接着部BPと、他の仮想オブジェクト70に設定された優先接着部BPとが第1の条件を満たさない場合、優先接着部BP又は他の部分が、接着位置として設定される(このとき、優先接着部BPは、特に他の部分と区別されることなく接着位置として設定され得る)。具体的には、選択オブジェクト及び他の仮想オブジェクト70における第2の条件を満たすそれぞれの位置が接着位置として設定され、当該接着位置同士を結ぶ接着オブジェクト78が生成される。例えば、第2の条件を満たす位置は、選択オブジェクトと他の仮想オブジェクト70とが最も近接する位置である。また、選択オブジェクト及び他の仮想オブジェクト70の少なくとも何れか一方に優先接着部BPが設定されていない場合も、選択オブジェクト及び他の仮想オブジェクト70における第2の条件を満たす位置(最近接位置)が接着位置として設定される。なお、例えば、選択オブジェクトの優先接着部BPと、他の仮想オブジェクト70の優先接着部以外の部分とが第2の条件を満たす場合は、選択オブジェクトの優先接着部BPと他の仮想オブジェクト70の優先接着部以外の部分とが接着位置として設定される。接着オブジェクト78の生成方法の詳細については後述する。
【0120】
図11に示される例では、選択されているエンジンオブジェクト70aの優先接着部BPと、翼オブジェクト70bの優先接着部BPとが第1の条件を満たすため、接着オブジェクト78は、これら優先接着部BPを結ぶように表示される。
【0121】
また、
図11に示されるように、エンジンオブジェクト70aが翼オブジェクト70bの上方に移動された場合、エンジンオブジェクト70aの像71aは、翼オブジェクト70bの表面に投影される。選択オブジェクトの像71、及び、当該選択オブジェクトの中心位置72が他の仮想オブジェクト70の表面に投影されることにより、ユーザは、選択オブジェクトと他の仮想オブジェクト70との位置関係を認識することができる。
【0122】
図12は、
図11に示す状態でユーザによって接着指示が行われた後のゲーム画像の一例を示す図である。
図12に示されるように、接着オブジェクト78によって優先接着部BP同士が結ばれているときに、ユーザによって接着指示(例えば、操作ボタン53~56の押下)が行われると、エンジンオブジェクト70aと翼オブジェクト70bとが優先接着部BPにおいて接着される。すなわち、優先接着部BP同士が重なるように、エンジンオブジェクト70aと翼オブジェクト70bとが接着する。2つの仮想オブジェクト70a、70bが接着する際には、2つの仮想オブジェクト70a、70bが引き合うように、少なくとも一方が移動する。2つの仮想オブジェクト70a、70bが接着された後、接着指示前に選択されていたエンジンオブジェクト70aの選択は解除され、エンジンオブジェクト70aの表示態様は通常に戻る。エンジンオブジェクト70aと翼オブジェクト70bとが接着されることにより、エンジンオブジェクト70aと翼オブジェクト70bとは、合体オブジェクトとして構成され、以後、これら2つの仮想オブジェクト70は、一体的に動作する。すなわち、2つの仮想オブジェクト70が接着された後、これら2つの仮想オブジェクト70の相対的な位置関係は変化しない。なお、2つの仮想オブジェクト70間の接着は、所定の解除条件を満たす入力が行われた場合に解除される。2つの仮想オブジェクト70の接着状態の解除の詳細については後述する。
【0123】
選択オブジェクトと他の仮想オブジェクト70とが接着された後も、接着オブジェクト78は、選択オブジェクトと他の仮想オブジェクト70との間に残留する。具体的には、接着オブジェクト78は、選択オブジェクトの接着位置の周辺の表面と、他の仮想オブジェクト70の接着位置の周辺の表面とに沿うように残留する。この場合、選択オブジェクトと他の仮想オブジェクト70とが接着される前と、選択オブジェクトと他の仮想オブジェクト70とが接着された後とで、接着オブジェクト78の形状は変化する。接着オブジェクト78の形状の変化については後述する。
【0124】
図13は、エンジンオブジェクト70aと翼オブジェクト70bとによって構成された合体オブジェクトとしての飛行機オブジェクト75の一例を示す図である。
図13では、ユーザキャラクタPCが飛行機オブジェクト75上に乗って空を飛んでいる様子が示されている。
【0125】
飛行機オブジェクト75全体としての挙動は、飛行機オブジェクト75の一部を構成する各部品(エンジンオブジェクト70a及び翼オブジェクト70b)と、飛行機オブジェクト75の一部を構成しないオブジェクト(例えばユーザキャラクタPC)によって定まる。具体的には、エンジンオブジェクト70aは、動力を有し、飛行機オブジェクト75全体に対して所定の速度(又は加速度)を加える。また、翼オブジェクト70bは、飛行機オブジェクト75全体に対して、飛行機オブジェクト75の速度に応じた揚力を加える。また、エンジンオブジェクト70a、翼オブジェクト70b、及び、ユーザキャラクタPCは、それぞれ予め定められた重さを有する。また、飛行機オブジェクト75は、仮想空間の風の影響を受ける。エンジンオブジェクト70aによる速度、翼オブジェクト70bによる揚力、各オブジェクトの重さ、風による力等に基づいて物理計算を行うことで、飛行オブジェクト75全体の挙動が求められる。例えば、エンジンオブジェクト70aによって十分な速度が加えられ、翼オブジェクト70bによって十分な揚力が得られる場合は、飛行オブジェクト75は、仮想空間の空を飛ぶ。
【0126】
なお、
図13に示されるエンジンオブジェクト70aと翼オブジェクト70bとにより構成される飛行機オブジェクト75に対して、さらに別の仮想オブジェクト70を接着することもできる。例えば、翼オブジェクト70bに2つ以上のエンジンオブジェクト70aを接着することができる。この場合、2つ以上のエンジンオブジェクト70aを有する飛行機オブジェクト75の速度はより大きくなる。また、1つの翼オブジェクト70bの横に別の翼オブジェクト70bを接着することで、2つの翼オブジェクト70bが一体となった大きな翼を構成することもできる。2つの翼オブジェクト70bを有する飛行機オブジェクト75は、より大きな揚力を得ることができ、より重いオブジェクトを乗せても飛行することができる。
【0127】
次に、
図14~
図19を参照して、複数の仮想オブジェクト70を用いて合体オブジェクトとしての4輪車オブジェクトを生成する場合について説明する。
図14は、車輪オブジェクト70cを選択した直後のゲーム画像の一例を示す図である。
図15は、車輪オブジェクト70cを選択した後、車輪オブジェクト70cの姿勢を変化させた後のゲーム画像の一例を示す図である。
図16は、選択した車輪オブジェクト70cを板オブジェクト70dに近づけたときのゲーム画像の一例を示す図である。
図17は、車輪オブジェクト70cが板オブジェクト70dに接着された後のゲーム画像の一例を示す図である。
図18は、合体オブジェクト76を構成する板オブジェクト70dを選択して、板オブジェクト70dに車輪オブジェクト70cを接着させる様子の一例を示す図である。
図19は、合体オブジェクトとしての4輪車オブジェクト76の一例を示す図である。
【0128】
図14に示されるように、地面に配置された車輪オブジェクト70cが画面のほぼ中央に表示されているときにユーザによる選択操作が行われた場合、車輪オブジェクト70cが選択される。選択された車輪オブジェクト70cが持ち上げられた場合、地面には、車輪オブジェクト70cの像71cが投影される。地面に投影された像71cは、車輪オブジェクト70を仮想空間の真上から見たときと同じ形状である。また、車輪オブジェクト70cの中心位置を示す点72cが地面に投影される。
【0129】
図14に示される状態でユーザによる回転操作が行われた場合、選択された車輪オブジェクト70cの仮想空間内での姿勢が変化する(
図15)。具体的には、車輪オブジェクト70cの回転軸(車輪が回転する軸)が地面と平行となるように、車輪オブジェクト70cの姿勢が変化される。この場合、地面に投影される車輪オブジェクト70cの像71cも変化する。
【0130】
図15に示される状態でユーザキャラクタPCが板オブジェクト70dの方向に移動される。なお、
図15では、板オブジェクト70dに2つの車輪オブジェクト70cが既に接着されている例が示されている。
【0131】
ユーザキャラクタPCの移動(車輪オブジェクト70cの移動)によって、車輪オブジェクト70cと板オブジェクト70dとが所定の接着条件を満たした場合、車輪オブジェクト70cと板オブジェクト70dとを結ぶ接着オブジェクト78が出現する(
図16)。具体的には、接着オブジェクト78は、選択されている車輪オブジェクト70cの優先接着部BPと、板オブジェクト70dの側面に設定された優先接着部BPとを結ぶように生成される。また、板オブジェクト70dの側面には、車輪オブジェクト70cの像71cxが投影される。
【0132】
ここで、選択されている車輪オブジェクト70cの像71cは、地面にも板オブジェクト70dの側面にも投影される。選択オブジェクトの像71は、単に仮想空間内の光源による影ではなく、選択オブジェクトと他の仮想オブジェクト70との位置関係をユーザに認識させやすくするためのものである。選択オブジェクトの像71は、仮想空間の上下方向と、左右方向と、奥行き方向とに形成される。具体的には、仮想空間の上下方向に平行な直線に基づいて選択オブジェクトを投影することで、地面には、選択オブジェクトの上下方向の像71yが形成される。また、仮想カメラの左右方向に平行な直線に基づいて選択オブジェクトを投影することで、当該選択オブジェクトの左右方向に存在する他の仮想オブジェクト70の面に、当該選択オブジェクトの左右方向の像71xが形成される。また、仮想カメラから見た仮想空間の奥行き方向に平行な直線に基づいて選択オブジェクトを投影することで、当該選択オブジェクトの奥行き方向に存在する他の仮想オブジェクト70の面に、当該選択オブジェクトの奥行き方向の像71zが形成される。なお、仮想空間内の光源の有無及び光源の位置に応じて、仮想オブジェクト70の影も像71とは別に表示される。
【0133】
図16に示す例では、選択されている車輪オブジェクト70cの左側に板オブジェクト70dが存在しているため、板オブジェクト70dの側面には、車輪オブジェクト70cの左右方向の像71cxの一部が形成されている。また、板オブジェクト70dの側面には、選択されている車輪オブジェクト70cの中心位置を示す点72cxも表示される。
【0134】
このように、選択オブジェクトが、上下方向、左右方向、及び奥行き方向の3つの方向に投影されるため、選択オブジェクトの近傍に他の仮想オブジェクト70が存在する場合には、当該他の仮想オブジェクト70の表面に選択オブジェクトの像71及び中心位置を示す点72が表示される。これにより、ユーザは、選択オブジェクトと他の仮想オブジェクト70との位置関係を容易に認識することができる。例えば、選択オブジェクトの左右方向の像71xによって、ユーザは、選択オブジェクトが他の仮想オブジェクト70の真横に位置するのか、あるいは斜めにずれているのかを認識することができる。また、他の仮想オブジェクト70の表面に形成された選択オブジェクトの像71の形状によって、ユーザは、選択オブジェクトの姿勢を認識することができる。
【0135】
車輪オブジェクト70cと板オブジェクト70dとが接着オブジェクト78で結ばれているときに、ユーザによって接着指示が行われると、車輪オブジェクト70cと板オブジェクト70dとは優先接着部BPにおいて接着される(
図17)。これにより、3つの車輪オブジェクト70cと、1つの板オブジェクト70dとを含む合体オブジェクト76が形成される。
【0136】
ユーザは、さらに同様の手順により、仮想オブジェクト70を合体オブジェクト76に接着することができる。例えば、ユーザは、仮想空間に配置された別の車輪オブジェクト70cを選択して、
図17に示す板オブジェクト70dの左側の側面に、当該選択した車輪オブジェクト70cを接着することができる。また、
図18に示されるように、ユーザは、合体オブジェクト76を構成する板オブジェクト70dを選択して、板オブジェクト70dを含む合体オブジェクト76全体を移動させ、仮想空間に配置された車輪オブジェクト70cに近づける。すると、板オブジェクト70dの優先接着部BPと、車輪オブジェクト70cの優先接着部BPとを結ぶ接着オブジェクト78が出現する。そして、ユーザは、接着指示により、選択した板オブジェクト70dに車輪オブジェクト70cを接着することができる。
【0137】
これにより、4つの車輪オブジェクト70cを有する合体オブジェクト76が生成される。さらに板オブジェクト70dの上に操縦桿オブジェクト70hが接着されると、合体オブジェクトとして、
図19に示されるような4輪車オブジェクト76が生成される。
【0138】
図19に示されるように、4輪車オブジェクト76は、車体を構成する板オブジェクト70dと、車輪を構成する4つの車輪オブジェクト70cと、操縦桿オブジェクト70hとを含む。4つの車輪オブジェクト70dのそれぞれは、4輪車オブジェクト76全体に対して速度(速さ及び移動方向)を加える。また、操縦桿オブジェクト70は、4輪車オブジェクト76全体に対して回転を加え、4輪車オブジェクト76全体の進行方向を変化させる。ユーザは、ユーザキャラクタPCを4輪車オブジェクト76の上に乗せて、例えばアナログスティック32を操作することで、4輪車オブジェクト76をアナログスティック32の入力方向に応じた方向に移動させることができる。これにより、ユーザキャラクタPCを仮想空間内で移動させることができる。
【0139】
次に、
図20~
図23を参照して、優先接着部BPが設定されていない仮想オブジェクト70同士を接着する場合について説明する。
図20は、岩オブジェクト70gを選択した直後のゲーム画像の一例を示す図である。
図21は、選択した岩オブジェクト70gを箱オブジェクト70fに近づけたときのゲーム画像の一例を示す図である。
図22は、
図21の状態から岩オブジェクト70gを動かしたときのゲーム画像の一例を示す図である。
図23は、
図22の状態で接着指示が行われたときのゲーム画像の一例を示す図である。
【0140】
図20及び
図21に示されるように、地面に配置された岩オブジェクト70gを選択して、箱オブジェクト70fに近づけた場合、選択されている岩オブジェクト70gと箱オブジェクト70fとを結ぶ接着オブジェクト78が出現する。ここで、岩オブジェクト70g及び箱オブジェクト70fには、優先接着部BPが設定されていない。この場合、岩オブジェクト70gの表面の、最も箱オブジェクト70fに近い位置が、接着位置として設定される。同様に、箱オブジェクト70fの表面の、最も岩オブジェクト70gに近い位置が、接着位置として設定される。接着オブジェクト78は、これら2つの接着位置を結ぶように表示される。例えば、
図21では、岩オブジェクト70gにおける点P1と、箱オブジェクト70fの角とが最近接位置であるため、これらの位置が接着オブジェクト78によって結ばれている。
【0141】
図21の状態から岩オブジェクト70gを動かすと、接着オブジェクト78が示す接着位置が変化する(
図22)。例えば、
図21では、接着オブジェクト78によって、岩オブジェクト70gにおける点P1と、箱オブジェクト70fの角とが、接着位置として示されている。これに対して、
図22では、接着オブジェクト78によって、岩オブジェクト70gにおける点P2と、箱オブジェクト70fの側面の中央部分とが最近接位置であるため、これらの位置が接着位置として示されている。
【0142】
また、上述のように、選択オブジェクトは、仮想空間の上下方向、左右方向、奥行き方向にそれぞれ投影されるため、その方向に投影面が存在すれば、選択オブジェクトの像71が、投影面に生成される。
図21では、岩オブジェクト70gの真横に箱オブジェクト70fが存在しないため、箱オブジェクト70fの側面には岩オブジェクト70gの像71gxが表示されていない。一方、
図22では、岩オブジェクト70gのほぼ真横方向に箱オブジェクト70fが位置しているため、箱オブジェクト70fの側面には岩オブジェクト70gの像71gxが表示されている。また、図示は省略するが、岩オブジェクト70gの中心位置を示す点72gxも、箱オブジェクト70fの側面に表示される。また、
図21及び
図22では、地面に、岩オブジェクト70gの像71gyが投影される。
【0143】
図22の状態で接着指示が行われると、岩オブジェクト70gと箱オブジェクト70fとが接着される(
図23)。具体的には、岩オブジェクト70gにおける点P2と、箱オブジェクト70fの側面の中央部分とが接着される。すなわち、岩オブジェクト70gにおける点P2と、箱オブジェクト70fの側面の中央部分とが重なるように岩オブジェクト70g及び箱オブジェクト70fの少なくとも一方が移動する。岩オブジェクト70gと箱オブジェクト70fとが接着された後も、接着オブジェクト78は残留する。
【0144】
(接着オブジェクト78の生成方法の詳細)
次に、接着オブジェクト78の生成方法の詳細について説明する。
図24~
図28を参照して、優先接着部BP以外の部分において2つの仮想オブジェクト70が接着される場合について説明する。
【0145】
図24は、接着オブジェクト78の基本形状の一例を示す図である。
図24に示されるように、接着オブジェクト78は、底面又は上面を構成する2つの第1部分782と、2つの第1部分782を結ぶ第2部分783とを含む。第1部分782は、仮想オブジェクト70の接着位置に接着される。第1部分782及び第2部分783は、複数のボーン781を含む。ボーン781は、接着オブジェクト78の形状を定めるための骨組みとなるものである。複数のボーン781を囲むように表面が形成される。複数のボーン781のそれぞれを変形させることで、接着オブジェクト78全体が変形する。以下、2つの仮想オブジェクト70の間に接着オブジェクト78を生成する方法について説明する。
【0146】
図25~
図28は、接着オブジェクト78を変形させる方法を説明するための図である。
【0147】
上述のように、優先接着部BP同士で2つの仮想オブジェクト70が接着しない場合、2つの仮想オブジェクト70が最も近接する位置が接着位置として設定される。具体的には、まず、選択オブジェクトと他の仮想オブジェクト70とが所定の接着条件を満たすか否かが判定される。
【0148】
図25に示されるように、選択オブジェクト70Aと他の仮想オブジェクト70Bとが所定の接着条件を満たす場合、選択オブジェクト70Aと他の仮想オブジェクト70Bとの最近接位置が計算される。最近接位置を計算する方法は任意であるが、例えば、選択オブジェクト70Aの中心からスタートして、選択オブジェクト70Aと他の仮想オブジェクト70Bとが最も近接する位置を再帰的に求める。この結果、例えば、選択オブジェクト70Aにおける点MPAと、他の仮想オブジェクト70Bにおける点MPBとが、最近接位置として算出される。
【0149】
次に、選択オブジェクト70Aの点MPAにおける法線ベクトルと、他の仮想オブジェクト70Bの点MPBにおける法線ベクトルとが算出され、各法線ベクトルに垂直な平面がそれぞれ計算される。次に、計算された2つの平面を平均したカット平面74が算出される。具体的には、カット平面74は、点MPAと点MPBとの中点を通り、点MPAにおける法線ベクトルと点MPBにおける法線ベクトルとを平均したベクトルを法線とする平面である。
【0150】
次に、
図26に示されるように、算出したカット平面74を用いて、選択オブジェクト70Aのバウンディングボックス73A及び他の仮想オブジェクト70Bのバウンディングボックス73Bを切る。ここで、バウンディングボックスは、各仮想オブジェクト70を囲む立体であり、各仮想オブジェクト70に設定される。バウンディングボックスは、それに対応する仮想オブジェクト70よりも簡素化された形状、又は、同じ形状の立体である。具体的には、算出したカット平面74を点MPAと点MPBとの中点MPCから当該カット平面74の法線方向における点MPA側に所定距離だけ離れた位置に配置し、当該位置に配置されたカット平面74Aを用いて、バウンディングボックス73Aを切る。また、算出したカット平面74を中点MPCから当該カット平面74の法線方向における点MPB側に所定距離だけ離れた位置に配置し、当該位置に配置されたカット平面74Bを用いて、バウンディングボックス73Bを切る。
【0151】
図27には、選択オブジェクト70Aのバウンディングボックス73Aをカット平面74Aで切った断面SAと、他の仮想オブジェクト70Bのバウンディングボックス73Bをカット平面74Bで切った断面SBとが示されている。この2つの断面SA及び断面SBを重ね合わせた面SABが算出される。この面SABは、断面SAを断面SBに(又は、断面SBを断面SAに)投影して得られる面である。この面SABの大きさに基づいて、接着オブジェクト78の各ボーン781の大きさが定められる。例えば、接着オブジェクト78の第1部分782が、面SABの形状と合うように、第1部分782の各ボーン781の大きさが定められる。そして、面SABに接着オブジェクト78の第1部分782が配置される。すなわち、断面SAのうち、面SABに相当する部分に、接着オブジェクト78の一方の第1部分782が配置され、断面SBのうち、面SABに相当する部分に、接着オブジェクト78の他方の第1部分782が配置される。
【0152】
そして、
図28に示されるように、各仮想オブジェクト70の表面に沿うように接着オブジェクト78の各ボーン781が変形される。例えば、選択オブジェクト70Aの表面に沿うように、接着オブジェクト78の第1部分782に含まれる破線で示されたボーン781が変形される。
図28では、変形される前のボーン781が破線で示され、変形された後のボーン781が実線で示されている。このように各ボーン781が変形されることで、接着オブジェクト78が、選択オブジェクト70A及び他の仮想オブジェクト70Bの表面に密着するように変形する。具体的には、接着オブジェクト78の一方の第1部分782は、選択オブジェクト70Aの点MPAを含む所定範囲の表面に密着し、接着オブジェクト78の他方の第1部分782は、他の仮想オブジェクト70Bの点MPBを含む所定範囲の表面に密着する。また、接着オブジェクト78の第2部分783は、点MPAと点MPBとの距離に応じて、変形される。このため、選択オブジェクト70Aと他の仮想オブジェクト70Bとの距離が近い場合は、接着オブジェクト78は短くなり、当該距離が長い場合は、接着オブジェクト78は長くなる。
【0153】
以上のように、優先接着部BP同士で2つの仮想オブジェクト70が接着しない場合、まず、2つの仮想オブジェクト70の最近接位置MPA,MPBが、接着位置として設定される。そして、2つの仮想オブジェクト70の間に、接着位置同士を結ぶように接着オブジェクト78が生成される。2つの仮想オブジェクト70が未だ接着されていない場合(すなわち、2つの仮想オブジェクト70の間に接着オブジェクト78が出現してから未だ接着指示が行われていない場合)、2つの仮想オブジェクト70の位置関係が変化すると、接着位置も変化する。例えば、選択オブジェクト70Aを他の仮想オブジェクト70Bから遠ざけたり、近づけたりすると、最近接位置MPA,MPBは変化する。また、選択オブジェクト70Aの姿勢を変化させると、最近接位置MPA,MPBは変化する。接着オブジェクト78は、常に最近接位置MPA,MPBを結ぶように変化する。言い換えると、接着オブジェクト78が示す2つの仮想オブジェクト70の接着位置は、2つの仮想オブジェクト70の位置関係の変化に応じて(選択オブジェクト70Aの移動に応じて)、変化する。また、接着オブジェクト78全体の形状も、2つの仮想オブジェクト70の位置関係の変化に応じて(選択オブジェクト70Aの移動に応じて)、変化する。
【0154】
このように接着オブジェクト78が生成されることで、ユーザは、2つの仮想オブジェクト70が接着する位置を容易に認識することができる。これにより、2つの仮想オブジェクト70を組み立てやすくすることができる。
【0155】
図28に示す状態で、ユーザによって接着指示が行われた場合、選択オブジェクト70Aと他の仮想オブジェクト70Bとは、最近接位置MPA,MPBにおいて互いに接着される。具体的には、2つの最近接位置MPA,MPBの距離が所定時間(複数のフレーム時間)かけて0となるように、選択オブジェクト70A及び他の仮想オブジェクト70Bの位置が変化される。この間、選択オブジェクト70Aに対する他の仮想オブジェクト70Bの相対的な姿勢は、変化しない。また、この間も接着オブジェクト78の形状は上述のようにして求められ、最近接位置MPA,MPBの距離に応じて、接着オブジェクト78の形状も変化する。そして、2つの最近接位置MPA,MPBが一致した場合、2つの仮想オブジェクト70の接着が完了する。2つの仮想オブジェクト70が接着された後も、接着オブジェクト78は接着位置の周辺に残留する。2つの仮想オブジェクト70が接着された後の接着オブジェクト78の形状も、上述した方法により求められる。2つの仮想オブジェクト70が接着された後は、これらの相対的な位置関係は変化しないため、接着オブジェクト78の形状は変化しない。
【0156】
ここで、接着オブジェクトが「残留する」とは、厳密にデータ上、接着前の接着オブジェクトと同じ接着オブジェクトがそのまま残留すること、接着前の接着オブジェクトとは異なるデータであるが、外見上、接着オブジェクトが存在しているように見える態様で残留していることを含んでもよい。例えば、上述のように接着オブジェクトは複数のボーン(接着オブジェクトの3次元形状を定めるためのデータ)を含むが、2つの仮想オブジェクト70が接着された後に残留する接着オブジェクトは、接着前の接着オブジェクトと同様に、複数のボーンを含んでもよい。また、2つの仮想オブジェクト70が接着された後に残留する接着オブジェクトは、外見上、複数のボーンを含む上記接着オブジェクトと同じように見えるが、複数のボーンを含まない、あるいは、ボーンの数が減少されたオブジェクトとして、2つの仮想オブジェクト70の間に表示されてもよい。また、2つの仮想オブジェクト70が接着された後に残留する接着オブジェクトは、外見上、上記接着オブジェクトと同じように見える単なる画像として、2つの仮想オブジェクト70の間に表示されてもよい。
【0157】
なお、接着された2つの仮想オブジェクト70の接着位置を覆うカバーオブジェクトが表示されてもよい。接着前に表示されていた上記接着オブジェクトは、接着後、当該カバーオブジェクトとして接着位置に残留してもよい。カバーオブジェクトは、データ上、接着オブジェクトと同じオブジェクトであってもよいし、外見上、接着オブジェクトと見なせるオブジェクト(単なる画像も含む)であってもよいし、外見上も接着オブジェクトとは異なるオブジェクトであってもよい。
【0158】
このように、2つの仮想オブジェクト70が接着された後、接着位置を覆うカバーオブジェクト(上記接着オブジェクト、外見上接着オブジェクトと見なせるオブジェクト、外見上も接着オブジェクトと異なるオブジェクト)が存在することで、ユーザが接着位置を認識することができる。また、例えば、2つの大きな仮想オブジェクト70が点接触して合体オブジェクトを形成する場合、当該点接触している部分にカバーオブジェクトが存在しない場合は、点接触で2つの仮想オブジェクト70が合体しているように見えてしまい、ユーザに違和感を生じさせる可能性がある。本実施形態では、2つの仮想オブジェクト70が接触している部分に、当該接触部分を覆うボリュームのカバーオブジェクトが存在するため、そのようなカバーオブジェクト(例えば、ボンドのような接着オブジェクト)によって2つの仮想オブジェクト70が接着しているように見え、そのような違和感を減ずることができる。
【0159】
次に、2つの仮想オブジェクト70が優先接着部BPにおいて接着される場合について説明する。
図29は、2つの仮想オブジェクト70が優先接着部BPにおいて接着される場合の接着オブジェクト78の生成について説明するための図である。
【0160】
選択オブジェクト70Aと他の仮想オブジェクト70Bとが所定の接着条件を満たす場合において、選択オブジェクト70Aにおける優先接着部BPaと、他の仮想オブジェクト70Bにおける優先接着部BPbとが、第1の条件を満たす場合、2つの優先接着部BPが、接着位置として設定される。そして、これら2つの優先接着部BPを結ぶ接着オブジェクト78が生成される。例えば、選択オブジェクト70Aの優先接着部BPa1と、他の仮想オブジェクト70Bの優先接着部BPb1とが第1の条件を満たす場合、優先接着部BPa1と優先接着部BPb1とを結ぶ接着オブジェクト78が生成される。
【0161】
ここで、第1の条件は、次に示す3つの条件A~Cである。
(条件A)選択オブジェクト70Aの優先接着部BPaと、他の仮想オブジェクト70Bの優先接着部BPbとの距離が、所定の閾値以内であること。
(条件B)優先接着部BPaに設定された法線ベクトルNVaと、優先接着部BPbに設定された法線ベクトルNVbの逆ベクトルとのなす角が、所定の閾値以下であること。
(条件C)(C-1)優先接着部BPaが、優先接着部BPbを通り法線ベクトルNVbに垂直な平面Sbよりも法線ベクトルNVbが示す側に存在し、かつ、(C-2)優先接着部BPbが、優先接着部BPaを通り法線ベクトルNVaに垂直な平面Saよりも法線ベクトルNVaが示す側に存在すること。
【0162】
例えば、
図29に示す例では、優先接着部BPa1と優先接着部BPb1との距離は、所定の閾値以内であるため、これら2つの優先接着部BPa1、BPb1は、条件Aを満たす。また、
図29では、法線ベクトルNVa1と法線ベクトルNVb1とは反対方向を向く。すなわち、法線ベクトルNVa1と法線ベクトルNVb1の逆ベクトルとのなす角は0度である。このため、
図29に示す例では、2つの優先接着部BPa1、BPb1は、条件Bを満たす。各優先接着部BPには予めその点における法線を示す法線ベクトルNVが設定されている。なお、優先接着部BPにおける法線ベクトルNVは、予め設定されず、その都度計算により求められてもよい。
【0163】
また、上記条件Cは、
図29の優先接着部BPa1、BPb1のように、2つの優先接着部BPa、BPbが互いに向き合っているような関係を有していることである。すなわち、優先接着部BPa1は、優先接着部BPb1を通り法線ベクトルNVb1に垂直な平面Sb1よりも、法線ベクトルNVb1が示す側(
図29の右側)に存在する(上記C-1を満たす)。また、優先接着部BPb1は、優先接着部BPa1を通り法線ベクトルNVa1に垂直な平面Sa1よりも、法線ベクトルNVa1が示す側(
図29の左側)に存在する(上記C-2を満たす)。このため、
図29に示す例では、優先接着部BPa1と優先接着部BPb1とは、条件Cを満たす。
【0164】
なお、優先接着部BPb2は、優先接着部BPb1との関係では条件Cを満たさない。すなわち、優先接着部BPa1は、優先接着部BPb2を通り法線ベクトルNVb2に垂直な平面Sb2よりも、法線ベクトルNVb2が示す側(
図29の左側)に存在しない。言い換えると、優先接着部BPa1は、平面Sb2よりも、法線ベクトルNVb2と反対側に位置する。
【0165】
したがって、優先接着部BPa1との関係で上記3つの条件A~Cを満たすのは、優先接着部BPb1のみである。このため、優先接着部BPa1と優先接着部BPb1とが、接着位置として設定される。そして、
図29に示すように、優先接着部BPa1と優先接着部BPb1とを結ぶように接着オブジェクト78が生成される。
【0166】
接着オブジェクト78は、上述した方法と同じ方法で生成される。すなわち、
図25~
図28では、選択オブジェクト70Aと他の仮想オブジェクト70Bとの最近接位置が接着位置として設定されたが、最近接位置の代わりに、優先接着部BPa1、BPb1が、接着位置として設定される。そして、これら2つの接着位置を結ぶように接着オブジェクト78が生成される。具体的には、接着オブジェクト78は、選択オブジェクト70Aの優先接着部BPa1を含む所定範囲の表面に密着し、他の仮想オブジェクト70Bの優先接着部BPb1を含む所定範囲の表面に密着するように生成される。
【0167】
なお、選択オブジェクト70Aにおけるある1つの優先接着部BPaに対して、第1の条件を満たす他の仮想オブジェクト70Bの優先接着部BPbが複数存在する場合もあり得る。この場合には、優先接着部BPaとの関係で第1の条件を満たす複数の優先接着部BPbのうちの何れか1つが、当該優先接着部BPaとペアをなす優先接着部BPbとして選択される。例えば、複数の優先接着部BPbのうち、優先接着部BPaと最も近い優先接着部BPbが選択されてもよい。また、複数の優先接着部BPbのうち、優先接着部BPaに設定された法線ベクトルNVaと最も向きが近い(法線ベクトルNVaとの角度が180度に近い)法線ベクトルNVbを有する優先接着部BPbが選択されてもよい。そして、これらペアをなす2つの優先接着部BPa、BPbが接着位置として設定され、これら2つの優先接着部BPa、BPbを結ぶ接着オブジェクト78が生成される。
【0168】
また、第1の条件を満たす優先接着部BPa、BPbのペアが、複数存在する場合もある。この場合は、複数の優先接着部BPa、BPbのペアのうち、最も距離の短いペアが選択され、当該選択されたペアの2つの優先接着部BPa、BPbを結ぶ接着オブジェクト78が生成されてもよい。なお、最も距離の短いペアが複数存在する場合には、各ペアを結ぶ接着オブジェクト78が複数生成される。
【0169】
優先接着部BPa1と優先接着部BPb1が接着オブジェクト78で結ばれているときに、ユーザによって接着指示が行われた場合、2つの優先接着部BP同士が接着される。この場合、優先接着部BPa1と優先接着部BPb1との位置が一致し、かつ、法線ベクトルNVa1と法線ベクトルNVb1の逆ベクトルとの角が0度となるように、2つの仮想オブジェクト70の位置関係が変更される。
【0170】
図30は、2つの仮想オブジェクト70が優先接着部BPにおいて接着される場合において、接着指示が行われる前後の位置関係を示す図である。
【0171】
図30の上図に示されるように、接着指示が行われる前では、選択オブジェクト70Aの優先接着部BPa1と他の仮想オブジェクト70Bの優先接着部BPb1とは、2つの仮想オブジェクト70の最近接位置ではないが、第1の条件を満たしている。すなわち、(条件A)優先接着部BPa1と優先接着部BPb1との距離は、所定の閾値以内である。また、(条件B)優先接着部BPa1の法線ベクトルNVa1と、優先接着部BPb1の法線ベクトルNVb1の逆ベクトルとは、0度よりも大きな角度を有するが、所定の閾値以下である。また、図から優先接着部BPa1と優先接着部BPb1とは条件Cを満たす。したがって、優先接着部BPa1と優先接着部BPb1とは第1の条件を満たす。このため、優先接着部BPa1、BPb1が接着位置として設定され、優先接着部BPa1、BPb1を結ぶ接着オブジェクト78が生成される。
【0172】
この状態でユーザによって接着指示が行われた場合、
図30の下図に示されるように、優先接着部BPa1と優先接着部BPb1とが接着される。具体的には、優先接着部BPa1と優先接着部BPb1との位置が一致される。また、法線ベクトルNVa1と法線ベクトルNVb1の逆ベクトルとの角が0度となるように、2つの仮想オブジェクト70の姿勢が調整される。言い換えると、優先接着部BPa1の法線方向と、優先接着部BPb1の法線方向とが平行となるように、選択オブジェクト70A及び他の仮想オブジェクト70Bのうちの少なくとも何れか一方の姿勢が調整される。
【0173】
なお、各優先接着部BPには、法線ベクトルNVに加えて、法線ベクトルNVに垂直な接線ベクトルTLが設定されている。接線ベクトルTLは、優先接着部BPにおける接線を示すベクトルである。2つの仮想オブジェクト70が優先接着部BPにおいて接着される場合、この接線ベクトルTLに応じて2つの仮想オブジェクト70の相対的な姿勢が制御される。
【0174】
図31は、接線ベクトルTLに応じて選択オブジェクトの姿勢が制御される例を説明するための図である。
【0175】
図31の上図では、板オブジェクト70dと、操縦桿オブジェクト70hとは未だ接着されておらず、板オブジェクト70dの優先接着部BPdと、操縦桿オブジェクト70hの優先接着部BPhとが、接着オブジェクト78で結ばれている。例えば、板オブジェクト70dの上面に設定された優先接着部BPdには、板オブジェクト70dの上面に平行であって、板オブジェクト70dの前方を向く接線ベクトルTLdが予め設定されている。また、操縦桿オブジェクト70hの底面に設定された優先接着部BPhには、操縦桿オブジェクト70hの底面に平行であって、操縦桿オブジェクト70hの前方を向く接線ベクトルTLhが予め設定されている。
図31の上図では、接線ベクトルTLdと接線ベクトルTLhとの角は、0度ではなく、ある程度の角度を有する。
【0176】
この状態で接着指示が行われた場合、
図31の下図に示すように、接線ベクトルTLdと接線ベクトルTLhとの角が予め定められた複数の角度のうちに何れかとなるように、操縦桿オブジェクト70hの向きが制御され、操縦桿オブジェクト70hと板オブジェクト70dとが接着される。予め定められた角度は、例えば、0度、45度、90度、135度、又は、180度であってもよい。例えば、接着指示が行われる直前の接線ベクトルTLdと接線ベクトルTLhとの角度が0度から30度の範囲である場合、接着指示が行われたときに、接線ベクトルTLdと接線ベクトルTLhとの角度が0度となるように、操縦桿オブジェクト70hの向きが調整される。また、接着指示が行われる直前の接線ベクトルTLdと接線ベクトルTLhとの角度が31度から74度の範囲である場合には、接着指示が行われたときに、接線ベクトルTLdと接線ベクトルTLhとの角度が45度となるように、操縦桿オブジェクト70hの向きが調整される。すなわち、接線ベクトルTLdと接線ベクトルTLhとの角度が第1の範囲の場合は、接線ベクトルTLdと接線ベクトルTLhとの角度が第1の角度となるように、接線ベクトルTLdと接線ベクトルTLhとの角度が第2の範囲の場合は、接線ベクトルTLdと接線ベクトルTLhとの角度が第2の角度となるように、調整される。
【0177】
図31の例では、操縦桿オブジェクト70hの接線ベクトルTLhと、板オブジェクト70dの接線ベクトルTLdとの角度が0度となるように、操縦桿オブジェクト70hの向きが制御される。これにより、操縦桿オブジェクト70hを4輪車オブジェクト76の進行方向と同じ向きに容易に接着させることができる。
【0178】
以上のように、選択オブジェクト70Aと他の仮想オブジェクト70Bとは、優先接着部間で優先的に接着される。優先接着部は、各仮想オブジェクト70に予め設定されており、各仮想オブジェクト70における中心や左右対称の位置等に設定されている。選択オブジェクト70Aの優先接着部BPaと他の仮想オブジェクト70Bの優先接着部BPbとが重なるように接着されるため、ユーザは、選択オブジェクト70Aの位置を細かく制御しなくても、適切な位置において選択オブジェクト70Aと他の仮想オブジェクト70Bとを接着することができる。
【0179】
また、各優先接着部BPには、法線ベクトルNVが予め設定されており、2つの優先接着部BPが接着される場合には、2つの法線ベクトルNVが反対方向となるように制御される。このため、ユーザは、選択オブジェクト70Aの姿勢を細かく制御しなくても、適切な姿勢で選択オブジェクト70Aと他の仮想オブジェクト70Bとを接着することができる。
【0180】
また、各優先接着部BPには、接線ベクトルTLが予め設定されており、2つの優先接着部BPが接着される場合には、2つの接線ベクトルTLが予め定められた複数の角度のうちの何れかとなるように制御される。このため、ユーザは、選択オブジェクト70Aを適切な姿勢で他の仮想オブジェクト70Bに接着させることができる。
【0181】
なお、このような法線ベクトルNV又は接線ベクトルTLに基づく選択オブジェクト70A及び他の仮想オブジェクト70Bの姿勢の調整は、選択オブジェクト70Aと他の仮想オブジェクト70Bとが優先接着部BP同士で接着される場合にのみ行われる。
【0182】
(接着解除の詳細)
次に、複数の仮想オブジェクト70が接着されている場合において、複数の仮想オブジェクト70の接着を解除する方法について説明する。上記のように複数の仮想オブジェクト70を接着させて合体オブジェクトが構成された後、所定の解除条件を満たす入力(以下、「接着解除操作」という)が行われた場合、仮想オブジェクト70の接着が解除される。
【0183】
図32は、2つの仮想オブジェクト70が接着されている状態で接着解除操作が行われたときの一例を示す図である。
【0184】
箱オブジェクト70fと岩オブジェクト70gとが接着オブジェクト78によって接着されているときに、選択操作が行われると、2つの仮想オブジェクト70f、70gのうちの何れか一方が選択される。例えば、合体オブジェクトを構成する箱オブジェクト70f及び岩オブジェクト70gのうち、岩オブジェクト70gが指示されているときに選択操作が行われた場合、
図32に示されるように、岩オブジェクト70gが選択オブジェクトとして選択される。岩オブジェクト70gが選択されると、岩オブジェクト70gの表示態様が変化する。また、岩オブジェクト70gが選択されると、合体オブジェクトを構成する箱オブジェクト70f及び岩オブジェクト70gの像71f及び71gが地面に投影される。また、選択されている岩オブジェクト70gの中心位置を示す点72gが地面に投影される。岩オブジェクト70gが選択されているときに、接着解除操作が行われると、箱オブジェクト70fと岩オブジェクト70gとの接着が解除される。
【0185】
ここで、接着解除操作は、例えば、所定時間内に、ユーザキャラクタPCの向き(仮想カメラの向き)を反転させる操作を所定回数行うことである。選択オブジェクトが設定されている場合(すなわち、仮想オブジェクト70が選択されている場合)、選択オブジェクトと、ユーザキャラクタPCと、仮想カメラとは、所定の位置関係を維持する。具体的には、ユーザキャラクタPCの向きと、仮想カメラの向きとはおおむね一致し、ユーザキャラクタのおおむね正面に(仮想カメラの正面に)選択オブジェクトが位置するように制御される。このため、ユーザキャラクタPCの向き(仮想カメラの向き)が変化すると、選択オブジェクトの仮想空間における位置も変化する。
【0186】
例えば、アナログスティック52の入力方向に応じて、ユーザキャラクタPCの向き(仮想カメラの向き)が変化する。所定時間内に、アナログスティック52を用いて、反対方向への方向入力操作が所定回数行われた場合、接着解除操作が検出され、箱オブジェクト70fと岩オブジェクト70gとの接着が解除される。ここで、反対方向への方向入力操作は、第1方向への方向入力が行われた後、第1方向と所定の閾値(例えば150度)より大きい角度を有する第2方向への方向入力が行われることである。
【0187】
また、ユーザキャラクタPCの向き(仮想カメラの向き)は、例えば、右コントローラ4(左コントローラ3でもよいし、本体装置2でもよい)の姿勢に応じて変化してもよい。例えば、右コントローラ4の姿勢は、角速度センサ115(及び加速度センサ114)の出力に基づいて算出される。例えば、角速度センサ115の出力に基づいて、右コントローラ4の振り操作が検出され、振り操作の検出結果に応じて箱オブジェクト70fと岩オブジェクト70gとの接着が解除されてもよい。具体的には、接着解除操作として、所定時間内に、右コントローラ4を用いた反対方向への振り操作が所定回数行われた場合、箱オブジェクト70fと岩オブジェクト70gとの接着が解除されてもよい。右コントローラ4を用いた反対方向への振り操作は、第1方向への振り操作が行われた後、第1方向と所定の閾値(例えば90度)より大きい角度を有する第2方向への振り操作が行われたことであってもよい。
【0188】
図33は、ユーザキャラクタPCの向き(仮想カメラVCの向き)を右方向に変化させたときの選択オブジェクトの移動の一例を示す図である。
図33では、仮想カメラVCと、ユーザキャラクタPCと、選択オブジェクト70とを仮想空間の上方から見た図が示されている。
図33に示されるように、仮想オブジェクト70が選択オブジェクトとして設定されている場合、ユーザキャラクタPCと、仮想カメラVCとは同じ方向を向く。例えば、アナログスティック52の左右方向が入力された場合、ユーザキャラクタPCの向きが左右方向に変化するとともに、仮想カメラVCがユーザキャラクタPCを中心としてヨー方向に回転しながら、仮想カメラVCの向きも左右方向に変化する。また、ユーザキャラクタPCの正面(仮想カメラVCの正面)に選択オブジェクト70が位置するように、選択オブジェクト70が移動される。例えば、アナログスティック52の右方向が入力された場合、ユーザキャラクタPC(仮想カメラVC)の向きが右方向に変化し、選択オブジェクト70も右方向に移動する。一方、アナログスティック52の右方向が入力されても、ユーザキャラクタPCは移動しない。例えば、所定時間(例えば1秒間)に、アナログスティック52を用いて左方向への入力と右方向への入力とが所定回数行われた場合、ユーザキャラクタPC及び仮想カメラVCの向きが左方向および右方向に変化し、選択オブジェクト70が仮想空間内で左方向および右方向に移動する。この場合、選択オブジェクトは、ユーザキャラクタPCを中心に左右方向に揺れるように表示される。そして、選択オブジェクトと、当該選択オブジェクトに接着されている他の仮想オブジェクトとの接着が解除され、選択オブジェクトから他の仮想オブジェクトが離脱する。
【0189】
アナログスティック52の上下方向が入力された場合も同様である。すなわち、アナログスティック52の上下方向が入力された場合、ユーザキャラクタPCの向きが上下方向に変化するとともに、仮想カメラVCがユーザキャラクタPCを中心としてピッチ方向に回転しながら、仮想カメラVCの向きも上下方向に変化する。接着解除操作として、所定時間(例えば1秒間)に、アナログスティック52の上下方向が所定回数入力された場合、選択オブジェクトはユーザキャラクタPCを中心に上下方向に揺れるように表示され、選択オブジェクトと他の仮想オブジェクトとの接着が解除される。
【0190】
このように、ユーザキャラクタPCの向きを所定方向に揺らすと、選択オブジェクトも所定方向に振られるように動き、選択オブジェクトと他の仮想オブジェクトとの接着が解除され、他の仮想オブジェクトが選択オブジェクトから離脱する。これにより、ユーザオブジェクトPCが選択オブジェクトを揺らして、選択オブジェクトに接着された他の仮想オブジェクトを振り落とすような挙動となる。したがって、ユーザの直感に合う操作で、選択オブジェクトと他の仮想オブジェクトとの接着を解除することができる。
【0191】
また、本実施形態においては、選択オブジェクトは、ユーザキャラクタPCの向きだけでなく、仮想カメラVCの向きにも連動して移動することになる。すなわち、仮想カメラVCの向きを所定方向に揺らすことで、選択オブジェクトも所定方向に振られるように動き、選択オブジェクトと他の仮想オブジェクトとの接着が解除される、と捉えることもできる。これにより、選択オブジェクトが画面の中心付近に表示されたまま、画面全体が所定方向に振られるように動き、選択オブジェクトに接着された他の仮想オブジェクトを振り落とすような挙動となる。したがって、ユーザの直感に合う操作で、選択オブジェクトと他の仮想オブジェクトとの接着を解除することができる。
【0192】
なお、左右方向と上下方向とでユーザキャラクタPCの向き、仮想カメラの設定、及び選択オブジェクトの移動について、異なる制御が行われてもよい。例えば、アナログスティック52を用いた左右方向の入力に対しては、その入力量(傾倒の度合い)に応じてユーザキャラクタPC及び仮想カメラの向きが左右方向に変化し、選択オブジェクトも同様に左右方向に移動する。一方、アナログスティック52を用いて上下方向の入力が行われた場合、ユーザキャラクタPCの向きは上下方向に変化し、選択オブジェクトも同様に上下方向に移動するが、ユーザキャラクタPCの向きの上下方向の変化量は選択オブジェクトの上下方向への移動量と比べて小さくてもよい。また、仮想カメラの向きの変化量も同様であってもよい。また、アナログスティック52を用いて上下方向の入力が行われた場合、仮想カメラはズームイン/ズームアウトしてもよい。例えば、アナログスティック52を用いた上方向の入力に応じて、ユーザキャラクタPCが上方向を向くとともに、選択オブジェクトは上方向に移動し、ユーザキャラクタPCと選択オブジェクトとの距離が長くなる。このとき、仮想カメラは、ユーザキャラクタPC及び選択オブジェクトをその撮像範囲に含めるために、ズームアウトする。また、アナログスティック52を用いて下方向の入力が行われた場合は、選択オブジェクトは地面によって下方向に移動せず、ユーザキャラクタPCの向きも下方向とはならずほぼ水平方向となり、仮想カメラは、ズームインしてもよい。また、右コントローラ4(左コントローラ3、本体装置2でもよい)の姿勢を用いて上下方向の入力を行う場合も同様である。
【0193】
なお、左右方向の入力については上記接着解除操作として検出される一方、上下方向の入力については、上記接着解除操作として検出されなくてもよい。すなわち、上下方向の入力に応じて選択オブジェクトは上下方向に移動するが、上下方向の入力に応じて選択オブジェクトと他の仮想オブジェクト70との接着が解除されなくてもよい。さらに、アナログスティック52を用いた上下方向の入力については接着解除操作として検出されない一方で、コントローラ(3又は4。本体装置2でもよい)の姿勢を用いた上下方向の入力(コントローラ又は本体装置2を上下に振る操作)については、接着解除操作として検出されてもよい。
【0194】
図32に戻り、岩オブジェクト70gを選択している状態で接着解除操作が行われた場合、岩オブジェクト70gと箱オブジェクト70fとの接着が解除される。
図32に示されるように、岩オブジェクト70gと箱オブジェクト70fとの接着が解除された場合、岩オブジェクト70gから箱オブジェクト70fが離れ、箱オブジェクト70fが地面に落下する。箱オブジェクト70fと岩オブジェクト70gとを接着していた接着オブジェクト78は、消去される。岩オブジェクト70gと箱オブジェクト70fとの接着が解除された後も、岩オブジェクト70gは選択されたままであり、宙に浮いたままである。
【0195】
図34は、2つの仮想オブジェクト70が接着されている状態で所定の解除条件を満たさない入力が行われたときの一例を示す図である。
【0196】
図34に示されるように、岩オブジェクト70gを選択している状態でアナログスティック52に対する入力が行われ、当該入力が所定の解除条件を満たさない場合、ユーザキャラクタPC(仮想カメラ)の向きの変化に応じて、岩オブジェクト70gは移動する。この場合、岩オブジェクト70gと箱オブジェクト70fとの接着は解除されず、合体オブジェクト(岩オブジェクト70g及び箱オブジェクト70f)は、ユーザキャラクタPC(仮想カメラ)の向きの変化に応じて、仮想空間内で移動する。例えば、岩オブジェクト70gを選択している状態でアナログスティック52の右方向が入力された場合、ユーザキャラクタPC(仮想カメラ)の向きは右方向に変化し、
図34の上図よりも右側の仮想空間が見えるようになる(
図34の下図)。この場合、岩オブジェクト70g及び箱オブジェクト70fも右方向に移動する。
【0197】
なお、岩オブジェクト70gを選択している状態で左コントローラ3のアナログスティック32に対する入力が行われた場合、ユーザキャラクタPCが仮想空間内を移動するとともに、仮想カメラも仮想空間内を移動する。ユーザキャラクタPC及び仮想カメラの移動に伴って、合体オブジェクト(岩オブジェクト70g及び箱オブジェクト70f)も移動する。すなわち、アナログスティック32に対する入力が行われた場合、ユーザキャラクタPCと選択オブジェクトとの相対的な位置関係は変わらず、アナログスティック32に対する入力に応じて、ユーザキャラクタPCと選択オブジェクトとが移動する。このユーザキャラクタPCの移動を伴う入力(アナログスティック32に対する入力)によっては、上記解除条件は満たされない。例えば、仮にユーザキャラクタPCを移動させるためのアナログスティック32を用いて、所定時間内に逆方向への入力が所定回数行われた場合、岩オブジェクト70gと箱オブジェクト70fとの接着は解除されない。この場合、アナログスティック32を用いた入力に応じて、合体オブジェクト(岩オブジェクト70g及び箱オブジェクト70f)は、仮想空間内を移動する。一方、アナログスティック52に対する入力に応じて、ユーザキャラクタPC及び仮想カメラの向きが変化し、選択オブジェクトが、ユーザキャラクタPCによって振られるように移動する。この選択オブジェクトが振られるような移動によって、選択オブジェクトと他の仮想オブジェクト70との接着が解除される。
【0198】
3つ以上の仮想オブジェクト70が接着されて合体オブジェクトとして構成されている場合も、同様の接着解除操作によって、接着状態を解除することができる。
図35は、4つの仮想オブジェクト70が接着されている状態で接着解除操作が行われた場合の接着解除の一例を示す図である。
【0199】
図35の上図に示されるように、箱オブジェクト70fには、岩オブジェクト70g1と、岩オブジェクト70g2とが接着されている。また、岩オブジェクト70g2には、さらに岩オブジェクト70g3が接着されている。これにより、4つの仮想オブジェクト70からなる合体オブジェクトが形成されている。このような状態で、ユーザの選択操作により、合体オブジェクトを構成する4つの仮想オブジェクト70のうちの何れか1つが選択される。例えば、4つの仮想オブジェクト70のうち、箱オブジェクト70fが選択オブジェクトとして選択される。
【0200】
選択オブジェクトが選択されているときに、ユーザによって接着解除操作が行われた場合、選択オブジェクトと、当該選択オブジェクトに接着された全ての仮想オブジェクト70との接着が解除される(
図35の下図)。具体的には、箱オブジェクト70fと岩オブジェクト70g1との接着が解除され、箱オブジェクト70fと岩オブジェクト70g1とを接着していた接着オブジェクト78は消去される。また、箱オブジェクト70fと岩オブジェクト70g2との接着も解除され、箱オブジェクト70fと岩オブジェクト70g2とを接着していた接着オブジェクト78も消去される。一方、箱オブジェクト70fと岩オブジェクト70g2との接着が解除されても、岩オブジェクト70g2と岩オブジェクト70g3との接着は解除されない。
【0201】
すなわち、選択オブジェクトに複数の仮想オブジェクト70が接着しているときに接着解除操作が行われた場合、選択オブジェクトと、当該選択オブジェクトに接着された仮想オブジェクト70との接着状態は解除されるが、選択オブジェクト以外の仮想オブジェクト70の接着状態は維持される。言い換えると、接着解除操作によって、選択オブジェクトに接着している全ての接着オブジェクト78が消去され、選択オブジェクト以外の仮想オブジェクト70に接着している接着オブジェクト78は存続する。
【0202】
このように、本実施形態では、複数の仮想オブジェクト70を接着させて合体オブジェクトが生成された後、合体オブジェクトを構成する複数の仮想オブジェクト70のうちの何れか1つが選択され、所定の解除条件を満たす入力が行われた場合には、選択された仮想オブジェクト70と接着された他の仮想オブジェクトとの接着が解除される。合体オブジェクトを構成する複数の仮想オブジェクト70のうちの何れか1つが選択され、所定の解除条件を満たさない入力が行われた場合は、合体オブジェクト全体が移動する。また、合体オブジェクトを構成する複数の仮想オブジェクト70のうちの何れか1つを選択した場合、選択された仮想オブジェクトに、さらに別の仮想オブジェクト70を接着することもできる。例えば、合体オブジェクトを構成する複数の仮想オブジェクト70のうちの何れか1つを選択し、ユーザキャラクタPCを移動させて、合体オブジェクト全体を移動させる。選択オブジェクトが仮想空間に配置された他の仮想オブジェクト70に近づくと、選択オブジェクトと当該他の仮想オブジェクト70とを結ぶ接着オブジェクト78が出現する。そして、ユーザの接着指示に応じて、選択オブジェクトと当該他の仮想オブジェクト70とが接着される。
【0203】
これにより、ユーザは、複数の仮想オブジェクト70を接着させて合体オブジェクトを生成した後、仮想オブジェクト70間の接着を解除することができる。作成した合体オブジェクトに含まれる仮想オブジェクト70の一部を離脱させ、別の仮想オブジェクトを接着することで、合体オブジェクトを再構成することができる。
【0204】
合体オブジェクトを構成する1つの仮想オブジェクトを選択して、選択オブジェクトに接着している仮想オブジェクトのみを合体オブジェクトから離脱させることができるため、ユーザの利便性を向上させることができる。例えば、合体オブジェクトの接着を解除する場合、合体オブジェクトに含まれる全ての仮想オブジェクト70間の全ての接着状態を解除することも考えられる。しかしながら、全ての接着状態が解除される場合、ユーザは最初から組み立てを行う必要がある。これに対して、本実施形態では、ユーザは、合体オブジェクトを構成する一部の仮想オブジェクトを選択し、選択した仮想オブジェクトのみの接着状態を解除することができるため、一部の接着状態を維持したまま、合体オブジェクトを再構築することができる。
【0205】
また、本実施形態では、選択オブジェクトはユーザキャラクタPC(仮想カメラ)の前方に固定され、ユーザキャラクタPC(仮想カメラ)の向きを変化させることで、選択オブジェクトが仮想空間内で移動する。このため、例えば、ユーザキャラクタPC(仮想カメラ)の向きを左右方向や上下方向に揺らすと、選択オブジェクトが左右方向や上下方向に揺れる。このようなユーザにとって直感的で分かりやすい操作によって、仮想オブジェクトの接着状態を解除することができる。すなわち、選択オブジェクトに接着している仮想オブジェクトを振り落とすような操作によって、選択オブジェクトの接着状態を解除することができる。
【0206】
(ゲーム処理に用いられるデータの説明)
次に、上述したゲーム処理に用いられるデータについて説明する。
図36は、ゲーム処理の実行中に本体装置2のメモリに記憶されるデータの一例を示す図である。
【0207】
図36に示されるように、本体装置2のメモリ(DRAM85、フラッシュメモリ84、又は外部記憶媒体)には、ゲームプログラムと、ユーザキャラクタデータと、仮想オブジェクトデータと、選択オブジェクトデータと、接着オブジェクトデータと、仮想カメラデータと、複数の合体オブジェクトデータとが記憶される。
【0208】
ゲームプログラムは、上述したゲーム処理を実行するためのプログラムである。ゲームプログラムは、スロット23に装着される外部記憶媒体又はフラッシュメモリ84に予め記憶されており、ゲームの実行時にDRAM85に読み込まれる。なお、ゲームプログラムは、ネットワーク(例えばインターネット)を介して他の装置から取得されてもよい。
【0209】
ユーザキャラクタデータは、ユーザキャラクタPCに関するデータであり、ユーザキャラクタPCの仮想空間における位置や姿勢に関する情報を含む。また、ユーザキャラクタデータは、ユーザキャラクタPCが所有するアイテムや能力等を示す情報を含んでもよい。
【0210】
仮想オブジェクトデータは、仮想空間に配置され、合体オブジェクトの一部として構成されていない仮想オブジェクト70に関するデータである。仮想オブジェクトデータは、各仮想オブジェクト70(70a~70g)の種類、重さ、仮想空間における位置、姿勢を示す情報を含む。また、仮想オブジェクトデータは、各仮想オブジェクト70に設定された優先接着部BPの仮想オブジェクト70における位置、法線ベクトルNV、接線ベクトルTLに関する情報を含む。
【0211】
選択オブジェクトデータは、ユーザによって選択されている選択オブジェクトに関するデータである。
【0212】
接着オブジェクトデータは、上述した接着オブジェクト78の位置や形状等に関する情報を含む。接着オブジェクトデータは、仮想オブジェクト70の接着位置を示す情報を含む。
【0213】
仮想カメラデータは、仮想カメラの位置や向きに関する情報を含む。
【0214】
合体オブジェクトデータは、ユーザによって作成された、複数の仮想オブジェクト70からなる1つ合体オブジェクトに関するデータである。複数の合体オブジェクトが仮想空間に配置されている場合、合体オブジェクト毎に合体オブジェクトデータが記憶される。
【0215】
具体的には、合体オブジェクトデータは、合体オブジェクトを構成する複数の仮想オブジェクト70に関する仮想オブジェクトデータと、仮想オブジェクト70間を接着する接着オブジェクト78に関する接着オブジェクトデータとを含む。また、合体オブジェクトデータは、合体オブジェクト情報を含む。
【0216】
合体オブジェクト情報は、合体オブジェクトの挙動を計算する際に用いられる情報であり、例えば、合体オブジェクトの重さ、重心位置を含む。合体オブジェクトの重心位置は、その合体オブジェクトを構成する複数の仮想オブジェクト70の重さ、合体オブジェクトにおける位置、姿勢等に基づいて算出される。また、合体オブジェクト情報は、合体オブジェクトの速度に関する情報を含んでもよい。合体オブジェクトが、動力を有する1又は複数の仮想オブジェクト70を含む場合、その動力を有する仮想オブジェクト70の合体オブジェクトにおける位置や姿勢等に基づいて、合体オブジェクトの速度が算出されてもよい。このようにして算出された合体オブジェクトの速度が、合体オブジェクト情報として記憶される。合体オブジェクト情報は、合体オブジェクトを構成する仮想オブジェクト70に変化がある毎に、再計算される。例えば、2つの仮想オブジェクト70A,70Bからなる合体オブジェクトがある場合、仮想オブジェクト70A,70Bのそれぞれの位置や姿勢、種類、重さ等に基づいて、合体オブジェクト情報(例えば重心位置、速度等)が算出されて記憶される。この合体オブジェクトに対して、別の仮想オブジェクト70Cが接着した場合、3つの仮想オブジェクト70A~70Cのそれぞれの位置、姿勢、種類、重さ等に基づいて、合体オブジェクト情報が再計算されて、記憶される。
【0217】
(本体装置2におけるゲーム処理の詳細)
次に、本体装置2において行われるゲーム処理の詳細について説明する。
図37は、本体装置2のプロセッサ81によって実行されるゲーム処理の一例を示すフローチャートである。
【0218】
図37に示されるように、プロセッサ81は、まず、初期処理を実行する(ステップS100)。具体的には、プロセッサ81は、仮想空間を設定し、仮想空間にユーザキャラクタPC、仮想カメラ、及び、複数の仮想オブジェクト70等を配置する。これらの他にも様々なオブジェクト(例えば、仮想空間の地面を表すオブジェクト、仮想空間に固定された木や建物などのオブジェクト)が仮想空間に配置される。
【0219】
次に、プロセッサ81は、コントローラからの操作データを取得する(ステップS101)。操作データは、左コントローラ3の各ボタン103、アナログスティック32、加速度センサ104、角速度センサ105、右コントローラ4の各ボタン113、アナログスティック52、加速度センサ114、角速度センサ115からのデータを含む。本体装置2は、各コントローラから所定の時間間隔(例えば、1/200秒間隔)で操作データを受信し、当該操作データをメモリに記憶する。ステップS101では、プロセッサ81は、各コントローラから送信されてメモリに記憶された操作データを取得する。また、プロセッサ81は、本体装置2の加速度センサ89、角速度センサ90、及び、タッチパネル13からのデータを操作データとして取得する。
【0220】
続いて、プロセッサ81は、オブジェクト選択処理を行う(ステップS102)。オブジェクト選択処理は、1つの仮想オブジェクト70を選択オブジェクトとして設定する処理である。具体的には、プロセッサ81は、操作データに基づいて、仮想オブジェクト70の選択操作が行われたか否かを判定し、選択操作が行われた場合には、指示されている仮想オブジェクト70を選択オブジェクトとして設定する。例えば、合体オブジェクトを構成しない1つの仮想オブジェクト70が指示されているときに、左コントローラ3の所定のボタンが押下された場合、当該合体オブジェクトを構成しない仮想オブジェクト70が、選択オブジェクトとして設定される。また、合体オブジェクトを構成する1つの仮想オブジェクト70が指示されているときに、左コントローラ3の所定のボタンが押下された場合、当該合体オブジェクトを構成する仮想オブジェクト70が、選択オブジェクトとして設定される。また、プロセッサ81は、選択オブジェクトを設定した場合、選択オブジェクトの表示態様を通常とは異なる表示態様(例えば黄色)に変化させる。また、プロセッサ81は、合体オブジェクトを構成する1つの仮想オブジェクト70を選択オブジェクトとして設定した場合、選択オブジェクトを含む合体オブジェクト全体の表示態様を通常とは異なる表示態様(例えば黄色)に変化させる。この場合、合体オブジェクトにおける選択オブジェクトと、合体オブジェクトにおける他の仮想オブジェクト70とを異なる表示態様で表示してもよい。
【0221】
次に、プロセッサ81は、キャラクタ移動処理を行う(ステップS103)。具体的には、プロセッサ81は、操作データに基づいて、ユーザキャラクタPCの移動操作が行われたか否かを判定し、移動操作が行われた場合には、ユーザキャラクタPCを仮想空間内で移動させる。例えば、左コントローラ3のアナログスティック32に対する方向入力が行われた場合、プロセッサ81は、アナログスティック32の入力方向に応じて、ユーザキャラクタPCを仮想空間内で移動させる。また、プロセッサ81は、ユーザキャラクタPCの移動に伴い、仮想カメラを仮想空間内で移動させる。仮想カメラは、ユーザキャラクタPCをその撮像範囲に含むように、ユーザキャラクタPCの移動に応じて移動される。また、選択オブジェクトが設定されている場合、プロセッサ81は、ユーザキャラクタPCの移動に伴い、選択オブジェクトを移動させる。選択オブジェクトが合体オブジェクトを構成する仮想オブジェクト70である場合、選択オブジェクトを含む合体オブジェクト全体が移動される。
【0222】
次に、プロセッサ81は、向き制御処理を行う(ステップS104)。具体的には、プロセッサ81は、操作データに基づいて、仮想カメラの向きを変化させる操作が行われたか否かを判定し、当該操作が行われた場合には、仮想カメラの向きを変化させる。より具体的には、選択オブジェクトが設定されている場合において、右コントローラ4のアナログスティック52に対する方向入力が行われた場合、プロセッサ81は、アナログスティック52の入力方向に応じて、ユーザキャラクタPC及び仮想カメラの向きを変化させる。また、選択オブジェクトが設定されている場合、プロセッサ81は、例えば右コントローラ4の角速度センサからのデータに基づいて、右コントローラ4の姿勢を算出し、算出した姿勢に基づいてユーザキャラクタPC及び仮想カメラの向きを変化させてもよい。また、プロセッサ81は、選択オブジェクトが設定されている場合、ユーザキャラクタPC及び仮想カメラの向きの変化に応じて、選択オブジェクトを移動させる。選択オブジェクトは、ユーザキャラクタPC及び仮想カメラの正面方向に位置するように制御される。選択オブジェクトが合体オブジェクトを構成する1つの仮想オブジェクト70である場合、選択オブジェクトを含む合体オブジェクト全体が移動される。なお、このステップS104では、ユーザキャラクタPCは移動されない。
【0223】
次に、プロセッサ81は、選択オブジェクトの像71を生成する処理を行う(ステップS105)。具体的には、選択オブジェクトが設定されている場合、プロセッサ81は、仮想空間の上下方向、仮想カメラから見た左右方向、及び奥行き方向に、選択オブジェクトを投影する処理を行う。これにより、選択オブジェクトの上下方向、左右方向、奥行き方向に存在する面に、選択オブジェクトの像71(投影像)が生成される。例えば、選択オブジェクトの左側にある他の仮想オブジェクト70の表面に、選択オブジェクト71の像71が投影されるとともに、選択オブジェクトの右側にある別の仮想オブジェクト70の表面に、選択オブジェクト71の像71が投影される。
【0224】
ステップS105に続いて、プロセッサ81は、合体オブジェクト生成処理を行う(ステップS106)。合体オブジェクト生成処理は、選択オブジェクトと他の仮想オブジェクト70とを接着させて、合体オブジェクトを生成するための処理である。例えば、ユーザの接着指示に応じて選択オブジェクトと他の仮想オブジェクト70とが接着される場合、選択オブジェクトと他の仮想オブジェクト70とは互いに引き合うように移動し、最終的に選択オブジェクトと他の仮想オブジェクト70とが接着される。合体オブジェクト生成処理の詳細については後述する。
【0225】
次に、プロセッサ81は、オブジェクト制御処理を行う(ステップS107)。ステップS107では、仮想空間内の全てのオブジェクトについて、その位置、大きさ、重さ、速度、回転速度、加わる力、摩擦等に基づいて、物理法則に従った計算が行われ、各オブジェクトの動作が制御される。仮想空間内の仮想オブジェクト70や合体オブジェクトが移動する場合には、他のオブジェクトとの衝突判定が行われ、衝突判定の結果に応じて、各オブジェクトの挙動が計算される。
【0226】
例えば、選択オブジェクトを他の仮想オブジェクト70に接着させるために選択オブジェクトが移動されている場合でも、選択オブジェクトと他の仮想オブジェクト70との衝突判定が行われる。衝突判定は、各オブジェクトの位置、姿勢、大きさ、形状に基づいて行われる。衝突判定の結果、選択オブジェクトと他の仮想オブジェクト70とが衝突する場合には、各オブジェクトの重さや衝突の際の速度等に基づいて、各オブジェクトの挙動が計算される。例えば、選択オブジェクトと他の仮想オブジェクト70との衝突によって、他の仮想オブジェクト70が移動したり、選択オブジェクトの移動が妨げられたり、選択オブジェクトの移動方向が変化されたりする。
【0227】
なお、接着オブジェクト78については、プロセッサ81は、上記衝突判定を行わない。例えば、選択オブジェクトと他の仮想オブジェクト70とを結ぶ接着オブジェクト78が生成されている場合において、選択オブジェクトと他の仮想オブジェクト70との間に、別のオブジェクトが介在する場合でも、接着オブジェクト78と別のオブジェクトとの接触判定は行われない。このため、接着オブジェクト78と別のオブジェクトとが衝突しても、別のオブジェクトの運動には影響しない。すなわち、接着オブジェクト78は、仮想オブジェクト70やユーザキャラクタPC、他のオブジェクトの運動を妨げるオブジェクトではなく、実体のない表示上のオブジェクトである。また、選択オブジェクトと他の仮想オブジェクト70とが接着された後も接着オブジェクト78は残留するが、残留している接着オブジェクト78に対しても、衝突判定は行われない。なお、接着オブジェクト78についても、上記衝突判定が行われてもよい。すなわち、選択オブジェクトと他の仮想オブジェクト70とが接着される前の接着オブジェクト78、及び、選択オブジェクトと他の仮想オブジェクト70とが接着された後の接着オブジェクト78に対して、衝突判定が行われてもよい。そして、接着オブジェクト78と別のオブジェクトとが衝突した場合は、当該別のオブジェクトの運動に影響が与えられてもよい。
【0228】
また、オブジェクト制御処理では、接着指示によって選択オブジェクトと他の仮想オブジェクト70とが接着する場合、2つの仮想オブジェクト70は互いに引き合うように移動する。この場合、比較的重い仮想オブジェクト70は移動距離が短く、比較的軽い仮想オブジェクト70は移動距離が長くなるように制御される。また、2つの仮想オブジェクト70の重量差又は重量比が所定値以上の場合には、軽い方の仮想オブジェクト70のみが移動してもよい。
【0229】
また、プロセッサ81は、オブジェクト制御処理において、合体オブジェクト情報と操作データとに基づいて、合体オブジェクトの動作を制御する。例えば、プロセッサ81は、合体オブジェクトとして、
図19に示す操縦桿オブジェクト70hを有する4輪車オブジェクト76を移動させる。この場合、プロセッサ81は、合体オブジェクト情報に含まれる速度や重心位置に基づいて4輪車オブジェクト76を移動させるとともに、操作データに基づいて、4輪車オブジェクト76の移動方向を変化させる。
【0230】
次に、プロセッサ81は、接着解除処理を行う(ステップS108)。接着解除処理は、接着されている仮想オブジェクト70間の接着を解除する処理であり、合体オブジェクトから1又は複数の仮想オブジェクト70を離脱させる処理である。接着解除処理の詳細については後述する。
【0231】
次に、プロセッサ81は、出力処理を行う(ステップS109)。具体的には、プロセッサ81は、仮想カメラに基づいてゲーム画像を生成し、当該ゲーム画像をディスプレイ12又は据置型モニタに表示させる。また、プロセッサ81は、ゲーム処理の結果に応じた音声をスピーカから出力させる。
【0232】
続いて、プロセッサ81は、ゲーム処理を終了するか否かを判定する(ステップS110)。例えば、ユーザによってゲームの終了が指示された場合、プロセッサ81は、ステップS110でYESと判定して、
図37に示すゲーム処理を終了する。ステップS110でNOと判定した場合、プロセッサ81は、ステップS101の処理を再び実行する。なお、プロセッサ81は、ステップS101~ステップS110の処理を所定のフレーム時間間隔(例えば、1/60秒間隔)で繰り返し実行する。以上で
図37の説明を終了する。
【0233】
(合体オブジェクト生成処理)
次に、上記ステップS106の合体オブジェクト生成処理の詳細について説明する。
図38は、ステップS106の合体オブジェクト生成処理の一例を示すフローチャートである。
【0234】
プロセッサ81は、選択オブジェクトが設定されているか否かを判定する(ステップS150)。選択オブジェクトが設定されていない場合は(ステップS150:NO)、プロセッサ81は、
図38に示す処理を終了する。
【0235】
選択オブジェクトが設定されている場合(ステップS150:YES)、プロセッサ81は、選択オブジェクトと他の仮想オブジェクト70とが所定の接着条件を満たすか否かを判定する(ステップS151)。具体的には、プロセッサ81は、選択オブジェクトの位置や移動方向に基づいて、所定の接着条件を満たす他の仮想オブジェクト70を探索する。探索の結果、所定の接着条件を満たす他の仮想オブジェクト70が見つかった場合、プロセッサ81は、ステップS151においてYESと判定する。一方、所定の接着条件を満たす他の仮想オブジェクト70が見つからなかった場合、プロセッサ81は、ステップS151においてNOと判定する。
【0236】
ステップS151においてYESと判定した場合、プロセッサ81は、接着オブジェクト生成処理を行う(ステップS152)。接着オブジェクト生成処理の詳細については後述する。
【0237】
続いて、プロセッサ81は、操作データに基づいて、ユーザによって接着指示が行われたか否かを判定する(ステップS153)。
【0238】
接着指示が行われた場合(ステップS153:YES)、プロセッサ81は、選択オブジェクトと他の仮想オブジェクト70とを接着する接着処理を行う(ステップS154)。ここでは、ステップS152で設定された接着位置において、選択オブジェクトと他の仮想オブジェクト70とが接着される。これにより、複数の仮想オブジェクト70からなる合体オブジェクトが生成される。2つの優先接着部BPが接着位置として設定されている場合、2つの優先接着部BPの法線方向が平行になるように、2つの優先接着部BPが接着される。
【0239】
また、ステップS154の接着処理では、プロセッサ81は、合体オブジェクト情報を算出する。具体的には、プロセッサ81は、合体オブジェクトを構成する各仮想オブジェクト70の種類、重さ、接着位置等に基づいて、合体オブジェクト情報を算出し、メモリに記憶する。仮想オブジェクト70が接着される毎に合体オブジェクト情報が算出され、メモリに記憶される。
【0240】
ステップS154の処理を行った場合、ステップS150でNOと判定した場合、ステップS151でNOと判定した場合、又は、ステップS153でNOと判定した場合、プロセッサ81は、
図38に示す処理を終了する。
【0241】
(接着オブジェクト生成処理)
次に、上記ステップS152の接着オブジェクト生成処理の詳細について説明する。
図39は、ステップS152の接着オブジェクト生成処理の一例を示すフローチャートである。
【0242】
図39に示されるように、プロセッサ81は、優先接着部同士が接着可能か否かを判定する(ステップS200)。具体的には、プロセッサ81は、選択オブジェクトの各優先接着部BPと、ステップS151で所定の接着条件を満たすと判定された他の仮想オブジェクト70の各優先接着部BPとが、上記第1の条件(条件A~条件Cの全て)を満たすか否かを判定する。第1の条件を満たす優先接着部BPのペアが存在する場合、プロセッサ81は、ステップS200でYESと判定する。第1の条件を満たす優先接着部BPのペアが存在しない場合、プロセッサ81は、ステップS200でNOと判定する。
【0243】
ステップS200でYESと判定した場合、プロセッサ81は、第1の条件を満たす2つの優先接着部BPを接着位置として設定する(ステップS201)。第1の条件を満たす2つの優先接着部BPを満たすペアが複数存在する場合、プロセッサ81は、2つの優先接着部BP間の距離が最も近いものを、接着位置として設定する。
【0244】
一方、ステップS200でNOと判定した場合、プロセッサ81は、選択オブジェクトと他の仮想オブジェクト70との最近接位置を計算して接着位置として設定する(ステップS202)。なお、ステップS202では、選択オブジェクト及び他の仮想オブジェクト70について、一方の優先接着部BPと他方の優先接着部以外の部分とが最近接位置である場合、これらが接着位置として設定される。
【0245】
ステップS201又はステップS202の処理を実行した場合、プロセッサ81は、接着オブジェクト78の各ボーン781の大きさを決定する(ステップS203)。接着オブジェクト78の各ボーン781の大きさを決定する方法は、
図26及び
図27を参照して説明した通りである。
【0246】
次に、プロセッサ81は、ステップS201又はステップS202で設定した接着位置に基づいて、接着オブジェクト78を配置する(ステップS204)。具体的には、接着オブジェクト78の一方の第1部分782を選択オブジェクトの接着位置に配置し、接着オブジェクト78の他方の第1部分782を他の仮想オブジェクト70の接着位置に配置する。
【0247】
次に、プロセッサ81は、接着オブジェクト78の各ボーン781を仮想オブジェクト70の表面に沿うように、各ボーン781の姿勢を決定する(ステップS205)。ここでは、各ボーン781の形状は維持されたまま、各ボーン781の姿勢が変化される。これにより、選択オブジェクトの接触位置と、他の仮想オブジェクト70の接触位置とを結ぶ接着オブジェクト78が生成される。接着オブジェクト78の一方の第1部分782が、選択オブジェクトの接着位置を含む表面に沿うようになり、接着オブジェクト78の他方の第1部分782が、他の仮想オブジェクト70の接着位置を含む表面に沿うようになる。なお、仮想オブジェクト70の表面に沿うように、各ボーン781の形状が変化されてもよい。
【0248】
ステップS205の処理を実行した場合、プロセッサ81は、
図39に示す接着オブジェクト生成処理を終了する。
【0249】
(接着解除処理)
次に、上記ステップS108の接着解除処理の詳細について説明する。
図40は、ステップS108の接着解除処理の一例を示すフローチャートである。
【0250】
図40に示されるように、プロセッサ81は、合体オブジェクトを構成する1つの仮想オブジェクト70が選択されているか否かを判定する(ステップS300)。
【0251】
ステップS300でYESと判定した場合、プロセッサ81は、操作データに基づいて、接着解除操作が行われたか否かを判定する(ステップS301)。具体的には、プロセッサ81は、所定時間(例えば1秒間)に、ユーザキャラクタPC(仮想カメラ)の向きを反転させる操作が所定回数行われたか否かを判定する。例えば、所定時間内に、アナログスティック52を用いて反対方向への方向入力操作が所定回数行われた場合、プロセッサ81は、接着解除操作が行われたと判定する。また、プロセッサ81は、角速度センサ115の出力に基づいて右コントローラ4の姿勢を算出し、右コントローラ4の振り操作を検出する。所定時間内に、右コントローラ4を用いて反対方向への振り操作が所定回数検出された場合、プロセッサ81は、接着解除操作が行われたと判定する。所定時間内に、アナログスティック52を用いた反対方向への方向入力操作と、右コントローラ4を用いた反対方向への振り操作とが検出された場合、それぞれの操作の回数が合算される。そして、所定時間において、合算された操作の回数が所定回数となった場合、接着解除操作が行われたと判定される。例えば、所定回数が4回に設定されている場合において、所定時間内に、アナログスティック52を用いた反対方向への方向入力操作が2回行われ、かつ、右コントローラ4を用いた反対方向への振り操作が2回行われた場合、プロセッサ81は、接着解除操作が行われたと判定する。なお、アナログスティック52を用いた方向入力操作と右コントローラ4を用いた振り操作とは、合算されず、別々の操作としてカウントされてもよい。
【0252】
接着解除操作が行われた場合(ステップS301:YES)、プロセッサ81は、選択オブジェクトと、当該選択オブジェクトに接着している全ての仮想オブジェクト70との接着を解除する(ステップS302)。また、プロセッサ81は、選択オブジェクトと接着している接着オブジェクト78を消去する。
【0253】
次に、プロセッサ81は、合体オブジェクト情報を再計算する(ステップS303)。ここでは、ステップS302の処理により構成された合体オブジェクトの合体オブジェクト情報が再計算され、メモリに記憶される。例えば、3つの仮想オブジェクト70からなる合体オブジェクトが、ステップS302の処理によって2つの仮想オブジェクト70からなる合体オブジェクトになった場合、当該2つの仮想オブジェクト70からなる合体オブジェクトの合体オブジェクト情報が再計算される。
【0254】
ステップS303の処理を行った場合、ステップS300でNOと判定した場合、又は、ステップS301でNOと判定した場合、プロセッサ81は、
図40に示す接着解除処理を終了する。
【0255】
なお、上記フローチャートで示した処理は単なる例示に過ぎず、処理の順番や内容等は適宜変更されてもよい。
【0256】
以上のように、本実施形態では、ユーザは、仮想空間内で移動可能であってそれぞれを接着可能な複数の仮想オブジェクト70のうちの第1オブジェクトを選択操作によって選択する(ステップS102)。選択された第1オブジェクト(選択オブジェクト)と、選択されていない第2オブジェクト(他の仮想オブジェクト70)とが所定の接着条件を満たす場合(ステップS151:YES)、第1オブジェクト及び第2オブジェクトのそれぞれの接着位置を示す接着オブジェクト78が出現する(ステップS152)。ユーザの接着指示に応じて、第1オブジェクトと第2オブジェクトとは、接着オブジェクトによって示される接着位置において接着される(ステップS154)。ユーザの操作により第1オブジェクトが移動または姿勢変化した場合、接着オブジェクト78が示す第1オブジェクト及び第2オブジェクトの接着位置は変化する(ステップS201、S202)。
【0257】
接着オブジェクトが表示されることにより、ユーザは、複数の仮想オブジェクトを接着して合体オブジェクトを組み立てる際に、第1オブジェクトと第2オブジェクトとが接着されることを容易に認識することができるとともに、どの部分において接着されるかを認識することができる。第1オブジェクトの移動や姿勢変化に応じて接着オブジェクトが示す接着位置が変化するため、接着位置を調整しながら第1オブジェクトと第2オブジェクトを接着することができる。
【0258】
また、本実施形態では、ユーザが、第1オブジェクトと第2オブジェクトとを接着させるために、第1オブジェクトを移動させる場合に、第1オブジェクトと第2オブジェクトとの衝突判定が行われる(ステップS106)。すなわち、ユーザが複数の仮想オブジェクトを組み立てるときでも衝突判定が行われる。第1オブジェクトと第2オブジェクトとが衝突した場合には、第1オブジェクト及び第2オブジェクトの少なくとも何れか一方の移動が制御される。例えば、衝突に応じて、第2オブジェクトが移動したり、第1オブジェクトの移動方向が変化したり、第1オブジェクトの移動速度が低下したりする。
【0259】
複数の仮想オブジェクトを組み立てるときでも衝突判定が行われ、各仮想オブジェクトの挙動が制御されるため、ユーザは、第1オブジェクトと第2オブジェクトとの距離を認識することができる。また、衝突を避けるために2つの仮想オブジェクトを離した場合は、接着オブジェクトによって2つの仮想オブジェクトの接着位置が表示されるため、ユーザは、第1オブジェクトがどの仮想オブジェクトと接着されるか、どの位置で接着されるかを認識することができる。
【0260】
また、本実施形態では、第1オブジェクト(選択オブジェクト)の像71が、第2オブジェクト(他の仮想オブジェクト70)の表面に生成される(ステップS105)。具体的には、第1オブジェクトは、直交する3つの方向(上下方向、左右方向、前後方向)に投影され、3つの方向に像71(投影像)が生成される。像71は、仮想空間の光源によって生成される第1オブジェクトの影とは別に生成される。ユーザによって選択された第1オブジェクトは、選択される前とは異なる所定の色(例えば黄色)で表示され、第1オブジェクトの像71も、同じ所定の色で表示される。このため、ユーザは、第1オブジェクトと第2オブジェクトとの位置関係を容易に認識することができる。また、第1オブジェクトとその像71とが同じ表示態様で表示されるため、ユーザは、第2オブジェクトの表面に映った像71が、第1オブジェクトの像であることを容易に認識することができ、第1オブジェクトと第2オブジェクトとの位置関係を容易に認識することができる。なお、選択された第1オブジェクトの色と、その像71の色とは、まったく同じ色で表示されなくてもよく、例えば、両方とも同じ系統の色で、一方が他方よりも濃い色であってもよい。
【0261】
また、本実施形態では、仮想オブジェクト70には、他の部分よりも接着され易い優先接着部が設定される。第1オブジェクトと第2オブジェクトの双方に優先接着部が設定されている場合には、これら優先接着部が接着位置として設定される。具体的には、第1オブジェクトの優先接着部と第2オブジェクトの優先接着部とが第1の条件(条件A~C)を満たす場合、第1オブジェクトの優先接着部と第2オブジェクトの優先接着部とが接着位置として設定される。この状態で接着指示が行われると、第1オブジェクトの優先接着部と第2オブジェクトの優先接着部とが接着される。一方、第1オブジェクトの優先接着部と第2オブジェクトの優先接着部とが第1の条件を満たさない場合は、又は、第1オブジェクト及び第2オブジェクトの少なくとも何れか一方に優先接着部が設定されていない場合、第1オブジェクト及び第2オブジェクトにおける第2の条件を満たす位置(最近接位置)が接着位置として設定される。
【0262】
また、第1オブジェクトの優先接着部と第2オブジェクトの優先接着部とが接着される場合、各優先接着部に基づく所定の方向(例えば、法線方向、接線方向)を用いて、第1オブジェクト及び第2オブジェクトの少なくとも何れか一方の姿勢が調整されて、第1オブジェクトと第2オブジェクトとが接着される。これにより、ユーザは、第2オブジェクトに対する第1オブジェクトの姿勢を細かく調整しなくても、適切な姿勢で第1オブジェクトと第2オブジェクトとを接着することができる。
【0263】
具体的には、各優先接着部には法線方向が設定され、各優先接着部の法線方向が平行となるように(例えば、法線ベクトルが逆方向となるように)、第1オブジェクトと第2オブジェクトとが接着される。これにより、例えば、第1オブジェクトにおけるある面と、第2オブジェクトにおけるある面とが平行となるように、第1オブジェクトと第2オブジェクトとを接着することができる。
【0264】
また、各優先接着部には接線方向が設定される。第1オブジェクトの優先接着部に設定された接線方向と、第2オブジェクトの優先接着部に設定された接線方向とが予め定められた角度となるように、第1オブジェクトと第2オブジェクトとが接着される。これにより、第1オブジェクトの向きと第2オブジェクトの向きとが所定の角度となるように第1オブジェクトと第2オブジェクトとを接着することができる。例えば、2つの仮想オブジェクトを同じ向きで接着したり、向きが直角となるように接着したりすることができる。
【0265】
また、本実施形態では、接着オブジェクトは、第1オブジェクトの接着位置と第2オブジェクトの接着位置とを結ぶ。第1オブジェクトの移動または姿勢変化によって、第1オブジェクトの接着位置と第2オブジェクトの接着位置との位置関係が変化した場合、接着オブジェクトの形状が変化する。このため、ユーザは、直感的に2つのオブジェクトが接着されることを認識することができる。また、第1オブジェクトの移動や姿勢変化によって接着オブジェクトの形状が変化するため、ユーザは、第1オブジェクトと第2オブジェクトの位置関係の変化を認識することができる。
【0266】
また、本実施形態では、第1オブジェクト及び第2オブジェクトが接着された状態で第1オブジェクト及び第2オブジェクトの何れか一方を選択し、選択した一方のオブジェクト及び第3オブジェクトの接着位置を結ぶ接着オブジェクトを生成する。そして、ユーザの接着指示に応じて、選択した一方のオブジェクトと第3オブジェクトとを接着する。これにより、複数の仮想オブジェクトからなる合体オブジェクトに対して、容易に所望の位置にさらに新たなオブジェクトを接着することができる。仮に、複数の仮想オブジェクトを含む合体オブジェクト全体を選択し、合体オブジェクト全体が新たなオブジェクトの接着範囲となる場合には、接着位置の指定が困難となる場合がある。しかしながら、本実施形態では、ユーザは、合体オブジェクトを構成する複数の仮想オブジェクトのうちの何れかを選択し、選択した仮想オブジェクトに新たなオブジェクトを接着するため、接着位置を指定し易い。
【0267】
また、本実施形態では、第1オブジェクトと第2オブジェクトとが接着オブジェクトにより示される接着位置において接着された後、接着オブジェクトは、接着位置を含む所定範囲に残留する。これにより、第1オブジェクトと第2オブジェクトとがユーザの操作により接着されたことを表示することができる。なお、接着位置においては第1オブジェクトと第2オブジェクトとは接しているため、厳密には2つのオブジェクトの接着位置(接着点)には接着オブジェクトは残留せず、接着位置の周辺に接着オブジェクトが残留することになる。「接着オブジェクトが接着位置を含む所定範囲に残留する」とは、このように、厳密には接着オブジェクトが接着位置には残留せず、接着位置の周辺に残留する場合も含むものとする。
【0268】
また、本実施形態では、複数の仮想オブジェクトのそれぞれには重さが設定されており、第1オブジェクトと第2オブジェクトとが接着される場合に、軽い方のオブジェクトの方が重い方のオブジェクトよりも移動距離が長くなるように移動される。これにより、2つの仮想オブジェクトが接着されるときの挙動によって2つの仮想オブジェクトの重さの関係を把握することができ、接着後の合体オブジェクトの重心位置を推定することができる。また、重さの異なるオブジェクトが互いに引き合うようにして移動し、2つのオブジェクトが接着される様子を表現することができる。
【0269】
また、本実施形態では、接着指示に応じて仮想オブジェクトを接着して合体オブジェクトを構成し、仮想オブジェクトが接着される毎に合体オブジェクト情報を算出して記憶する。また、接着解除操作に応じて合体オブジェクから仮想オブジェクトを離脱させ、仮想オブジェクトが離脱される毎に合体オブジェクト情報を算出して記憶する。合体オブジェクト情報(例えば、合体オブジェクトの重心位置)は、合体オブジェクトを構成する複数の仮想オブジェクトに基づいて算出される情報である。合体オブジェクト情報に基づいて、合体オブジェクトの動作が制御される。これにより、合体オブジェクトの挙動を計算する際に、合体オブジェクトに含まれる複数の仮想オブジェクト間の接着をその都度調べなくても、合体オブジェクト情報を用いて合体オブジェクトとしての挙動を計算することができ、計算に係る負荷を低減することができる。
【0270】
また、本実施形態では、複数の仮想オブジェクトを接着することで合体オブジェクトを生成した後、合体オブジェクトを構成する複数の仮想オブジェクトのうちの何れか1つを選択オブジェクトとして設定し、入力手段に対する入力に基づいて、選択オブジェクトを含む合体オブジェクトを移動させ、当該合体オブジェクトにさらに別の仮想オブジェクトを接着可能である。また、選択オブジェクトが設定されている場合、入力手段(例えばアナログスティック52やコントローラの角速度センサ)を用いた移動入力に応じて、選択オブジェクトを含む合体オブジェクトを移動させる(ステップS104)。選択オブジェクトが設定されている場合、入力手段を用いた移動入力が解除条件を満たすときには、合体オブジェクトを構成する仮想オブジェクトのうち、選択オブジェクトに接着されている他の仮想オブジェクトと選択オブジェクトとの接着を解除する一方(ステップS302)、選択オブジェクトに接着されていない他の仮想オブジェクトの接着を維持する。これにより、合体オブジェクトに含まれる個別の仮想オブジェクトを選択して一部の接着のみを解除することができ、ユーザ操作により複数の仮想オブジェクトを組み立てて合体オブジェクトを構成する際のユーザの利便性を向上させることができる。すなわち、合体オブジェクトに含まれる全ての仮想オブジェクトの接着を解除すると、ユーザは最初から組み立てをやり直す必要があるが、本実施形態では一部の接着を解除することができるため、最初から組み立てをやり直す必要がない。また、合体オブジェクトの移動のための入力手段が仮想オブジェクトの離脱にも用いられるため、直感的な操作で仮想オブジェクトの離脱と合体オブジェクトの移動を行うことができる。
【0271】
また、本実施形態では、選択オブジェクトと他の仮想オブジェクトとの接着が解除された場合、選択オブジェクトは引き続き選択される(選択オブジェクトは設定されたままである)。これにより、ユーザは、選択オブジェクトから他の仮想オブジェクトを離脱させた後、即座に選択オブジェクトに別の仮想オブジェクトを接着する操作に移ることができる。
【0272】
また、本実施形態では、第1入力手段(アナログスティック32)を用いた移動入力に基づいて、ユーザキャラクタを移動させるとともに、選択オブジェクトを含む合体オブジェクトを移動させる(ステップS103)。また、第2入力手段(アナログスティック52)を用いた移動入力に基づいて、ユーザキャラクタを移動させることなく、選択オブジェクトを含む合体オブジェクトを移動させ、第2入力手段を用いた移動入力が解除条件を満たすときに、選択オブジェクトと他の仮想オブジェクトとの接着を解除する。ユーザキャラクタを動かさずに選択オブジェクトを動かすことで他の仮想オブジェクトとの接着を解除するため、直感的で分かりやすい操作によって他の仮想オブジェクトを離脱させることができる。
【0273】
また、本実施形態では、選択オブジェクトに対して前記別の仮想オブジェクトを接着することも可能である。これにより、入力手段に対する入力によって、選択オブジェクトに対して、他の仮想オブジェクトを離脱させたり、別の仮想オブジェクトを接着したりすることができる。
【0274】
また、本実施形態では、所定時間内に、合体オブジェクトの移動方向の変化の回数が所定回数となった場合に、選択オブジェクトと他の仮想オブジェクトとの接着が解除される。「合体オブジェクトの移動方向の変化」とは、合体オブジェクトが第1方向に移動している状態から、第1方向とは異なる第2方向に移動している状態に変化することである。また、例えば、所定時間内に合体オブジェクトの反対方向への移動の回数が所定回数となった場合に、選択オブジェクトと他の仮想オブジェクトとの接着が解除される。ここでいう「合体オブジェクトの反対方向への移動」とは、合体オブジェクトが第1方向に移動している状態から、第1方向と所定の角度(例えば、150度~180度)を有する第2方向に移動している状態に変化することであってもよい。これにより、直感的な操作で他の仮想オブジェクトを離脱させることができる。例えば、所定時間内に反対方向への移動が所定回数行われる場合は、合体オブジェクトは揺れるように動作する。このため、合体オブジェクトから選択オブジェクトに接着された他の仮想オブジェクトを振り落とすような直感的な操作で、他の仮想オブジェクトを離脱させることができる。
【0275】
なお、解除条件は、所定時間内における入力手段を用いた移動入力の変化の回数が多いほど満たされ易い条件であってもよい。すなわち、所定時間内における入力手段を用いた移動入力の変化の回数が多いほど解除条件が満たされたと判定され易く、解除条件が満たされたと判定した場合には、選択オブジェクトと他の仮想オブジェクトとの接着が解除されてもよい。ここで、「入力手段を用いた移動入力の変化」とは、選択オブジェクトの移動のための入力が変化することであり、例えば、アナログスティック52を用いた第1方向への入力から第2方向への入力に変化することであってもよい。また、「入力手段を用いた移動入力の変化」とは、例えば、移動のための第1のボタンを入力している状態から、移動のための第2のボタンを入力している状態に変化することであってもよい。また、「所定時間内における入力手段を用いた移動入力の変化の回数が多いほど解除条件が満たされ易い」とは、例えば、所定時間内における入力手段を用いた移動入力の変化の回数が所定回数となった場合に解除条件が満たされることを含んでもよい。すなわち、所定時間内における入力手段を用いた移動入力の変化の回数がカウントされ、カウントした数が「所定回数」となった場合に、選択オブジェクトと他の仮想オブジェクトとの接着が解除されてもよい。「所定回数」は、予めゲーム制作者によって設定された一定の値であってもよいし、ゲーム中に変化する値であってもよいし、ユーザによって設定される値であってもよい。
【0276】
また、所定時間内における入力手段を用いた移動入力の変化の回数をカウントする方法に限らず、他の方法によって、解除条件が満たされたか否かを判定してもよい。例えば、所定時間内における入力手段を用いた移動入力に関する値(例えば、入力方向を示す角度)を蓄積し、蓄積した値が所定値に達した場合に、解除条件が満たされてもよい。このような場合でも、所定時間内における入力手段を用いた移動入力の変化の回数が多いほど解除条件が満たされ易くなる。
【0277】
また、本実施形態では、所定時間内に、第3入力手段(アナログスティック52)を用いた移動入力の変化の回数が多いほど、解除条件を満たしたと判定され易くてもよい。また、所定時間内に、第4入力手段(角速度センサ)を用いた移動入力の変化の回数が多いほど、解除条件を満たしたと判定され易くてもよい。所定時間内に、第3入力手段及び第4入力手段の両方に対する移動入力が行われた場合は、第3入力手段及び第4入力手段の一方に対する移動入力が行われた場合よりも、解除条件を満たしたと判定され易くてもよい。例えば、第3入力手段を用いた移動入力の変化の回数が所定回数になったときに解除条件を満たしたと判定し、第4入力手段を用いた移動入力の変化の回数が所定回数になったときに解除条件を満たしたと判定してもよい。この場合、第3入力手段を用いた移動入力の変化の回数と第4入力手段を用いた移動入力の変化の回数との合計が所定回数となったときに、解除条件が満たされたと判定し、選択オブジェクトと他の仮想オブジェクトとの接着を解除してもよい。これにより、2つの入力手段を用いて選択オブジェクトと他の仮想オブジェクトとの接着を解除させることができ、同時に2つの入力手段に対する入力が行われた場合には、素早く接着を解除させることができる。
【0278】
(変形例)
以上、本実施形態について説明したが、上記実施形態は単なる一例であり、例えば以下のような変形が加えられてもよい。
【0279】
例えば、上記実施形態では、予め仮想空間内に配置された仮想オブジェクト70を接着して合体オブジェクトを構成したが、他の実施形態では、仮想オブジェクト70は予め仮想空間内に配置されなくてもよい。例えば、ユーザキャラクタPCが有する収容領域に仮想オブジェクト70が収容され、ユーザの操作により収容領域内の仮想オブジェクト70を選択し、当該選択した仮想オブジェクト70が仮想空間に出現されてもよい。
【0280】
また、ユーザキャラクタPCや敵キャラクタが登場する仮想空間とは別に、複数の仮想オブジェクト70を用いて合体オブジェクトを生成するための別の仮想空間が用意されてもよい。この場合、当該別の仮想空間において、複数の仮想オブジェクト70が配置されて合体オブジェクトが生成される。合体オブジェクトが生成された場合、ユーザキャラクタPCや敵キャラクタが登場する仮想空間において、当該合体オブジェクトが出現されてもよい。
【0281】
また、上記実施形態では、接着位置を示す接着オブジェクト78が生成され、接着オブジェクト78によって示される接着位置が一致するように2つの仮想オブジェクト70が引き合うように接着された。他の実施形態では、例えば2つの仮想オブジェクト70がある程度近い位置にあるときに、接着コマンド(例えば上記接着指示と同じ操作又は異なる操作)を使用可能となり、当該接着コマンドの実行に応じて、2つの仮想オブジェクト70が引き合うことなく、これらの位置関係が固定(維持)されることにより、これらが接着されてもよい。すなわち、2つの仮想オブジェクト70が互いに所定距離まで近づいたときに接着コマンドが有効になり、当該接着コマンドの実行に応じて、コマンド実行時の位置関係(距離及び姿勢)が固定されて、2つの仮想オブジェクト70が互いに接着されてもよい。この2つの仮想オブジェクト70間には、上記接着オブジェクトが介在してもよいし、接着オブジェクトが介在しなくてもよい。なお、接着コマンドが実行されたときの2つの仮想オブジェクト70の位置関係に補正(例えば、姿勢の調整等)が行われて、補正後の位置関係が固定されてもよい。
【0282】
また、上記実施形態では、選択オブジェクトの優先接着部BPにおける法線ベクトルと、他の仮想オブジェクト70の優先接着部BPにおける法線ベクトルとが反対方向となるように、各優先接着部BPが接着された。他の実施形態では、選択オブジェクトの優先接着部BPにおける法線ベクトルと、他の仮想オブジェクト70の優先接着部BPにおける法線ベクトルとが同じ方向となるように、各優先接着部BPが接着されてもよい。
【0283】
また、上記実施形態では、選択オブジェクトの優先接着部BPと、他の仮想オブジェクト70の優先接着部BPとが第1の条件を満たす場合にこれら優先接着部BPが接着された。第1の条件は、上述したものに限らず、他の条件であってもよい。例えば、第1の条件は、条件A~Cのうちの何れか1つであってもよいし、別の条件であってもよい。例えば、優先接着部同士が接着することに対してユーザが違和感を覚えないような条件であればよい。
【0284】
また、選択オブジェクトの優先接着部BPと、他の仮想オブジェクト70の優先接着部BPとが第1の条件を満たさない場合には、選択オブジェクト及び他の仮想オブジェクト70における第2の条件を満たす位置(最近接位置)で2つのオブジェクトが接着された。他の実施形態では、第2の条件を満たす位置は、最近接位置に限らない。
【0285】
また、他の実施形態では、選択オブジェクト及び他の仮想オブジェクト70の両方に優先接着部が設定されている場合に、2つの優先接着部が優先的に接着された。他の実施形態では、選択オブジェクト及び他の仮想オブジェクト70の何れか一方に優先接着部が設定されている場合、何れか一方の優先接着部が優先的に接着位置として設定され、他方については優先接着部以外の部分が接着位置として設定されてもよい。
【0286】
また、上記実施形態では、合体オブジェクトを構成する仮想オブジェクトを選択し、選択オブジェクトにさらに新たな仮想オブジェクトを接着するものとした。他の実施形態では、合体オブジェクトを構成する仮想オブジェクトを選択し、合体オブジェクトを構成する選択オブジェクト以外の仮想オブジェクトに、新たな仮想オブジェクトを接着可能であってもよい。
【0287】
また、上記実施形態では、選択オブジェクトは、仮想空間の直交する3つの方向に投影され、他の仮想オブジェクト70がその方向に存在している場合には、当該他の仮想オブジェクト70の表面に選択オブジェクトの像71が生成された。他の実施形態では、選択オブジェクトから他の仮想オブジェクト70に向かう方向に、選択オブジェクトが投影され、他の仮想オブジェクト70の表面に選択オブジェクトの像71が生成されてもよい。この場合、例えば選択オブジェクトの真横には他の仮想オブジェクト70が存在せず、選択オブジェクトの斜め方向に他の仮想オブジェクト70が存在する場合でも、選択オブジェクトの像71は、他の仮想オブジェクト70の表面に生成される。
【0288】
また、上記実施形態では、第1の仮想オブジェクトを移動させて第2の仮想オブジェクトと接着させる場合には、2つの仮想オブジェクトの衝突判定を行うものとしたが、接着指示が行われる前の2つの仮想オブジェクトの間に接着オブジェクトが生成されているときには、2つの仮想オブジェクトの衝突判定は行われなくてもよい。
【0289】
また、上記実施形態では、第1の仮想オブジェクトを移動させて第2の仮想オブジェクトと接着させる場合に、第2の仮想オブジェクトの表面に第1の仮想オブジェクトの像を投影したが、このような像は必ずしも投影されなくてもよい。また、上記実施形態では、第1の仮想オブジェクトの像を、上下方向とそれに直交する左右方向に投影したが、投影の方向はこれらに限らない。また、必ずしも第1の仮想オブジェクトの像を2つの方向に投影しなくてもよい。また、第1の仮想オブジェクトを移動させる際に、第1の仮想オブジェクトの影は必ずしも生成されなくてもよい。
【0290】
また、上記実施形態では、第1の仮想オブジェクトが選択されて、第2の仮想オブジェクトに接着させる場合には、第1の仮想オブジェクトを所定の色で表示し、第1の仮想オブジェクトの像も所定の色で表示された。他の実施形態では、第1の仮想オブジェクトが選択されても、第1の仮想オブジェクトが元の色で表示されてもよい。また、第1の仮想オブジェクトの像は、元の色に応じた色で表示されてもよいし、表示されなくてもよい。
【0291】
また、上記実施形態では、優先接着部が設定される仮想オブジェクトと、優先接着部が設定されない仮想オブジェクトとが存在するものとした。他の実施形態では、優先接着部が設定されない仮想オブジェクトのみが存在してもよいし、優先接着部が設定される仮想オブジェクトのみが存在してもよい。
【0292】
また、上記実施形態では、優先接着部に基づく所定の方向(法線方向又は接線方向)を用いて、第1の仮想オブジェクト及び第2の仮想オブジェクトの少なくとも何れか一方の姿勢が調整された。他の実施形態では、法線方向や接線方向に限らず、任意の方向に基づいて、このような姿勢調整が行われてもよく、姿勢調整の方法はどのようなものでもよい。また、このような姿勢調整は行われなくてもよい。
【0293】
また、上記実施形態では、接着オブジェクトは、2つの仮想オブジェクトの接着位置を結ぶオブジェクトであるとした。他の実施形態では、接着オブジェクトは、2つの仮想オブジェクトの接着位置を示すものの、接着位置同士を結ばないオブジェクトであってもよい。
【0294】
また、上記実施形態では、接着指示に応じて、2つの仮想オブジェクト70が引き合い、軽い方が重い方よりも移動距離が長くなるように移動させた。他の実施形態では、このような移動形態に限らず、例えば、重さに関係なく同じ距離だけ移動させてもよい。
【0295】
また、上記実施形態では、選択オブジェクトが選択されている場合、接着解除操作として、アナログスティック52を用いてユーザキャラクタPCの向き(仮想カメラの向き)を変化させる操作が所定回数行われると、選択オブジェクトに接着しているオブジェクトを離脱させ、選択オブジェクト以外のオブジェクト間の接着は維持された。他の実施形態では、選択オブジェクトが選択(設定)され、上記接着解除操作が行われた場合には、選択オブジェクトに接着しているオブジェクトを離脱させるとともに、選択オブジェクト以外のオブジェクトについても、一部又は全部の接着が解除されてもよい。すなわち、接着解除操作(選択オブジェクトを中心に画面が揺れるような操作)が行われた場合、選択オブジェクトに接着しているオブジェクトを離脱させれば、選択オブジェクト以外のオブジェクトについては、接着を解除されてもよいし、維持されてもよい。
【0296】
また、上記選択解除操作以外の操作により、選択オブジェクトに接着しているオブジェクトを離脱させる一方で、選択オブジェクト以外のオブジェクトについては接着が維持されてもよい。
【0297】
例えば、特定のボタンを押下する操作が行われた場合やタッチパネルに対する所定のタッチ操作が行われた場合に、接着解除が行われてもよい。例えば、選択オブジェクトを選択した状態で特定のボタンが押下された場合、選択オブジェクトに接着しているオブジェクトを離脱させ、選択オブジェクトに接着していないオブジェクト間の接着は維持されてもよい。また、例えば、選択オブジェクトを選択した状態で特定のボタンが押下された場合、選択オブジェクトに接着しているオブジェクトを離脱させ、選択オブジェクトに接着していないオブジェクト間の接着も一部又は全部が解除されてもよい。
【0298】
また、上記実施形態では、合体オブジェクトに含まれる1つの仮想オブジェクトを選択オブジェクトとして選択したが、他の実施形態では、合体オブジェクトに含まれる複数の仮想オブジェクトを選択オブジェクトとして選択可能であってもよい。合体オブジェクトに含まれる複数の仮想オブジェクトを選択オブジェクトとして選択し、接着解除のための操作が行われた場合に、当該複数の選択オブジェクトに接着している他の仮想オブジェクトを離脱させてもよい。この場合、選択された複数の選択オブジェクト間の接着は維持されてもよいし、選択された複数の選択オブジェクト間の接着も解除されてもよい。また、合体オブジェクトの全体を選択し、接着解除のための操作が行われた場合に、合体オブジェクトの全体又は一部の接着が解除されてもよい。
【0299】
また、合体オブジェクト全体を選択オブジェクトとして選択し、接着指示により、仮想空間に配置された他の仮想オブジェクトを当該合体オブジェクトにさらに接着してもよい。この場合、合体オブジェクトに含まれる複数の仮想オブジェクトのうちの何れかに当該他の仮想オブジェクトが接着されてもよい。
【0300】
また、上記実施形態では、接着オブジェクトによって接着された複数の仮想オブジェクト70の接着解除を可能としたが、他の実施形態では、接着解除ができないように構成されてもよい。
【0301】
また、上記実施形態では、合体オブジェクトに含まれる仮想オブジェクトを選択オブジェクトとして選択し、選択オブジェクトを移動させ、接着指示により他の仮想オブジェクトを合体オブジェクトにさらに接着した。また、上記実施形態では、合体オブジェクトに含まれる仮想オブジェクトを選択オブジェクトとして選択し、接着解除操作に応じて、選択オブジェクトに接着されているオブジェクトを離脱させた。他の実施形態では、このような合体オブジェクトの生成、接着解除の方法に加えて(又は代えて)、別の方法により、合体オブジェクトの生成、接着解除が行われてもよい。
【0302】
例えば、合体オブジェクトの別の生成方法として、まず、ユーザの操作により合体コマンドが入力され、次に選択オブジェクトが選択され、さらに接着指示が行われた場合に、選択オブジェクトに他の仮想オブジェクトが接着されてもよい。合体コマンドの入力、選択オブジェクトの選択、接着指示の順番はこれに限らない。また、合体コマンドが入力された状態で選択オブジェクトが選択された場合に、接着指示が無くても、選択オブジェクトに他の仮想オブジェクトが接着されてもよい。また、合体オブジェクト全体が選択され、合体コマンドの入力された場合、合体オブジェクトに含まれる仮想オブジェクトを選択しなくても、当該合体オブジェクトに他の仮想オブジェクトがさらに接着されてもよい。
【0303】
また、別の接着解除の方法として、まず、ユーザの操作により接着解除コマンドが入力され、次に選択オブジェクトが選択され、さらに分離指示が行われた場合に、合体オブジェクトに含まれる仮想オブジェクト間の接着の解除が行われてもよい。この場合において、分離指示として、上記接着解除操作が行われてもよい。なお、接着解除コマンドの入力、選択オブジェクトの選択、分離指示の順番はこれに限らない。また、接着解除コマンドが入力された状態で選択オブジェクトが選択された場合に、分離指示が無くても、接着解除が行われてもよい。また、合体オブジェクト全体が選択され、接着解除コマンドの入力された場合、合体オブジェクトに含まれる仮想オブジェクトを選択しなくても、当該合体オブジェクトの全体又は一部の接着が解除されてもよい。
【0304】
また、ユーザキャラクタPCは、アイテムを収容可能な仮想的な収容領域(例えば、ユーザキャラクタPCが所有する仮想的なバッグ、ポーチ、アイテムボックス等)を有し、収容領域には、上記合体オブジェクトに含まれ得る素材オブジェクトが収容可能であってもよい。収容領域は、ユーザキャラクタPCによって携帯されて表示されるものであってもよいし、通常は表示されず、ユーザの操作に応じて表示されるものであってもよい。合体オブジェクトが当該収容領域に収容可能な仮想オブジェクト(素材オブジェクト)を含んでいる場合、合体オブジェクトの近くで特定の操作(例えば特定のボタンの押下)が行われると、当該素材オブジェクトを収容領域に収容することができてもよい。この場合、特定のボタンの押下に応じて、合体オブジェクトに含まれる当該素材オブジェクトの接着が解除されるとともに、当該素材オブジェクトが収容領域に収容されてもよい。例えば、仮想オブジェクト70Xと仮想オブジェクト70Yと仮想オブジェクト70Zとを含む合体オブジェクトが生成されているものとする。仮想オブジェクト70Xと仮想オブジェクト70Yとが第1の接着オブジェクトで接着され、仮想オブジェクト70Yと仮想オブジェクト70Zとが第2の接着オブジェクトで接着されている場合において、特定のボタンの押下に応じて仮想オブジェクト70Xが素材オブジェクトとして収容領域に収容されるときには、仮想オブジェクト70Xと仮想オブジェクト70Yとの接着が解除されて、第1の接着オブジェクトは消去される。そして、仮想オブジェクト70Xが素材オブジェクトとして収容領域に収容される。一方で、仮想オブジェクト70Y及び仮想オブジェクト70Zは、収容領域に収容可能な仮想オブジェクトではないため、仮想オブジェクト70Yと仮想オブジェクト70Zとの接着は解除されず、第2の接着オブジェクトは消去されない。このため、仮想オブジェクト70Y及び仮想オブジェクト70Zは合体オブジェクトとして仮想空間に存在したままとなる。なお、収容領域に収容された素材オブジェクト(仮想オブジェクト70X)は、別の合体オブジェクトの生成に用いられてもよい。
【0305】
また、上記実施形態では、接着解除操作に応じて接着が解除されるものとしたが、接着解除操作によらずに接着が解除される場合があってもよい。例えば、合体オブジェクトを構成する仮想オブジェクト同士が離れる方向に大きな力(所定の閾値を超えるの力)が加わった場合には、当該仮想オブジェクト同士の接着が解除されてもよい。
【0306】
また、上記ゲームを行うハードウェアの構成は単なる一例であり、他の任意のハードウェアにおいて上記ゲーム処理が行われてもよい。例えば、パーソナルコンピュータ、タブレット端末、スマートフォン、インターネット上のサーバ等、任意の情報処理システムにおいて上記ゲーム処理が実行されてもよい。また、上記ゲーム処理は、複数の装置によって分散実行されてもよい。
【0307】
また上記実施形態及びその変形例に係る構成は、互いに矛盾しない限り、任意に組み合わせることが可能である。また、上記は本発明の例示に過ぎず、上記以外にも種々の改良や変形が加えられてもよい。
【符号の説明】
【0308】
1 ゲームシステム
2 本体装置
3 左コントローラ
4 右コントローラ
32、52 アナログスティック
81 プロセッサ
70 仮想オブジェクト
71 仮想オブジェクトの像
78 接着オブジェクト