(57)【要約】【課題】デバイスの姿勢を変化させることによる数値入力と仮想空間のキャラクターの操作をしやすいプログラムを提供する。【解決手段】デバイスの回転軸を設定することによって、デバイスの傾きから任意の数値入力を算出可能とする。また、傾きに応じた数値入力を用いて、ゲームなどの仮想空間内のキャラクターの移動操作を可能とすることで、主にタッチパネルを有する機器において、特に一人称視点や三人称視点での、より自由度の高いキャラクターの操作をユーザーに提供することができる。【選択図】図10
2018163132.tif 000002
【特許請求の範囲】
【請求項１】
デバイスの基準姿勢からの回転量を算出する
プログラムであり、
前記デバイスの回転軸として、前記デバイスの姿勢を基準とする回転軸からなる任意の座標系を設定し、
前記基準姿勢を基準としたベクトルを定め、
現在の前記座標系における前記ベクトルの成分に応じて、前記基準姿勢から現在の姿勢への前記デバイスの回転量を算出する
姿勢算出プログラム。
【請求項２】
デバイスの基準姿勢からの回転量を算出する
プログラムであり、
前記デバイスの回転軸として、前記デバイスの姿勢を基準とする回転軸からなる任意の座標系を設定し、
前記デバイスの回転量として、前記基準姿勢での前記回転軸における回転量、もしくは現在の姿勢での前記回転軸における回転量に任意の定数を乗じた値を用いる
姿勢算出プログラム。
【請求項３】
請求項2のプログラムであり、
前記回転軸における回転量とは、前記デバイスの前記基準姿勢と現在の姿勢を
オイラー角あるいはクォータニオンによって表現し、
前記基準姿勢と現在の姿勢との差分を算出することによって得られる、
前記回転軸における回転の成分とする
姿勢算出プログラム。
【請求項４】
デバイスの基準姿勢からの回転量を算出する
プログラムであり、
前記デバイスの回転軸として、前記デバイスの姿勢を基準とする回転軸からなる任意の座標系を設定し、
前記デバイスの基準姿勢に対応する任意の平面を設定し、
前記平面と前記回転軸とのなす角に応じた値を前記デバイスの回転量とする
姿勢算出プログラム。
【請求項５】
請求項1から請求項4いずれかのプログラムであり、
前記回転量を無効として所定の値にする、もしくは無視する範囲を有する
姿勢算出プログラム。
【請求項６】
請求項5のプログラムであり、
前記範囲外における回転量に前記範囲に応じた補正をかける
姿勢算出プログラム。
【請求項７】
請求項1から請求項6いずれかのプログラムであり、
前記デバイスの座標系を、
Dx軸を前記デバイスの右方向、Dy軸を前記デバイスの上方向、Dz軸を前記デバイスの厚さ方向とした直交座標系としたとき、
前記回転軸からなる前記座標系とは、
前記デバイスの座標系をDx軸で任意の量回転させたものと一致させる
姿勢算出プログラム。
【請求項８】
請求項1から請求項6いずれかのプログラムであり、
前記デバイスの座標系を、
Dx軸を前記デバイスの右方向、Dy軸を前記デバイスの上方向、Dz軸を前記デバイスの厚さ方向とした直交座標系としたとき、
前記回転軸からなる前記座標系とは、
前記回転軸の一つを前記Dx軸と一致させ、もう一つの回転軸を前記基準姿勢での前記Dx軸と重力との外積に一致させる直交座標とする
姿勢算出プログラム。
【請求項９】
請求項1から請求項6いずれかのプログラムであり、
前記デバイスの座標系を、
Dx軸を前記デバイスの右方向、Dy軸を前記デバイスの上方向、Dz軸を前記デバイスの厚さ方向とした直交座標系としたとき、
前記回転軸からなる前記座標系とは、
前記回転軸の一つを前記Dx軸と一致させ、もう一つの回転軸を前記基準姿勢での前記Dx軸と重力との外積に一致させる直交座標とする
姿勢算出プログラム。
【請求項１０】
請求項1から請求項6いずれかのプログラムであり、
前記デバイスの座標系を、
Dx軸を前記デバイスの右方向、Dy軸を前記デバイスの上方向、Dz軸を前記デバイスの厚さ方向とした直交座標系としたとき、
前記回転軸からなる前記座標系とは、
前記回転軸の一つを重力と逆方向に一致させ、もう一つの回転軸を前記基準姿勢での前記Dx軸と重力との外積に一致させる直交座標とする
姿勢算出プログラム。
【請求項１１】
仮想空間内のキャラクターを移動させるプログラムであり、
請求項1から請求項10いずれかの前記姿勢算出プログラムに基づく回転量に応じて、
前記キャラクターの移動方向と移動速度を決定する
操作プログラム。
【請求項１２】
請求項11のプログラムであり、
前記キャラクターの移動方向とは、前記キャラクターの観測手段の観測方向を基準とする
操作プログラム。
【請求項１３】
請求項11から請求項12いずれかのプログラムであり、
キャラクターを観測する前記観測手段の観測方向の変更をタッチ入力に応じて行う
操作プログラム。
【請求項１４】
請求項11から請求項13いずれかのプログラムであり、
任意のアクションを行う際の作用点を示す照準の操作をタッチ入力に応じて行う
操作プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
一人称視点、三人称視点でのキャラクターの制御に関するものである。
【背景技術】
【０００２】
スマートフォンやタブレットなど、タッチパネルを有するデバイスでは、タッチによる入力を主な入力手段としている。
片手で入力する場合は、図1に示すような一般的な持ち方をすると親指(2)一本による入力となる。
片手でデバイスを保持し、もう片方の手(3)で入力する場合、保持している手(1)の親指(2)ともう片方の手(3)の5本の指とによって最大6個の入力となる。
図2のように両手でデバイスを保持し、2つの親指(11と12)でタッチ入力を行う、主にゲーム操作で用いられる持ち方では、両手の親指(11と12)による2つの入力となる。
【０００３】
ゲームの分野では、画面内に仮想のボタンやアナログスティックを配置し、それらを先に述べた方法によるタッチ入力によって操作することで、ゲーム内のキャラクターやメニューといった要素を操作可能としている(例えば、特許文献１や特許文献２)。
【０００４】
ゲーム操作で主に用いられる図2の持ち方において、一人称視点ゲームや三人称視点ゲームのように、移動、カメラ操作、攻撃やジャンプなどのアクションを有する場合では、画面内の仮想のジョイスティックで移動、仮想のボタンによって攻撃やジャンプなどのアクションの2つのゲーム操作をそれぞれタッチ入力によって操作可能とし、視点の操作を機器の姿勢と連動させる方法がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2015-225397号公報
【特許文献２】特開2012-168931号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献1で用いられるような図1の持ち方によるタッチ入力の場合、同時に1つの入力しか扱えない。デバイスを保持していない手の指5本による入力を加えることで、6つの入力を扱うことが可能となるが、デバイスを保持していない手が画面を覆い画面が見づらくなり操作が困難となる。
【０００７】
特許文献2で用いられるような図2の持ち方によるタッチ入力では、同時に2つの入力しか同時に扱えず、例えば、一人称視点ゲームや三人称視点ゲームのように、移動、カメラ(視点)操作や、攻撃やジャンプなどのアクションを同時に個別に操作する必要のある場合には、2つの入力しか同時に扱えない既存の手法では満足に操作することができない。人差し指を加えた操作を行う場合、デバイスが持ちづらくなると同時に操作が難しくなる。
【０００８】
上記の問題を解決するためにカメラ操作をデバイスの姿勢と連動させる方法よって行う場合、操作者はカメラ操作のために体の姿勢を変える必要があり、他の操作を困難なものとする。
【０００９】
また、デバイスの姿勢に基づいた数値入力は、姿勢のわずかな変化にも反応してしまうことがあり、ユーザーが細かく操作することは困難である。
【００１０】
よって、本発明は、ユーザーがデバイスの姿勢に基づく数入力を容易にすることとともに、主にタッチパネルを有する機器において、特に一人称視点や三人称視点での移動、視点照準、アクションの操作をしやすい操作手段を持つプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
デバイスの基準姿勢からの回転量を算出する
プログラムであり、
前記デバイスの回転軸として、前記デバイスの姿勢を基準とする回転軸からなる任意の座標系を設定し、
前記基準姿勢を基準としたベクトルを定め、
現在の前記座標系における前記ベクトルの成分に応じて、前記基準姿勢から現在の姿勢への前記デバイスの回転量を算出する
姿勢算出プログラム。
【００１２】
デバイスの基準姿勢からの回転量を算出する
プログラムであり、
前記デバイスの回転軸として、前記デバイスの姿勢を基準とする回転軸からなる任意の座標系を設定し、
前記デバイスの回転量として、前記基準姿勢での前記回転軸における回転量、もしくは現在の姿勢での前記回転軸における回転量に任意の定数を乗じた値を用いる
姿勢算出プログラム。
【００１３】
前記回転軸における回転量とは、前記デバイスの前記基準姿勢と現在の姿勢を
オイラー角あるいはクォータニオンによって表現し、
前記基準姿勢と現在の姿勢との差分を算出することによって得られる、
前記回転軸における回転の成分とする。
【００１４】
デバイスの基準姿勢からの回転量を算出する
プログラムであり、
前記デバイスの回転軸として、前記デバイスの姿勢を基準とする回転軸からなる任意の座標系を設定し、
前記デバイスの基準姿勢に対応する任意の平面を設定し、
前記平面と前記回転軸とのなす角に応じた値を前記デバイスの回転量とする
姿勢算出プログラム。
【００１５】
前記回転量を無効とし所定の値にする、もしくは無視する範囲を設定する。
【００１６】
所定の値とは、例えば0や前記デバイスの姿勢が基準姿勢と一致しているときの回転量である。
【００１７】
前記回転量を無視するとは、例えば、前記回転量を利用する任意の機能が、前記姿勢算出プログラムからの入力が行われていないと判断することである。
【００１８】
前記範囲外における回転量に前記範囲に応じた補正をかける。
【００１９】
前記範囲外に出た状態で、回転量が最小値となり、そこから回転量をデバイスの姿勢に応じて変化させる。
【００２０】
前記デバイスの座標系を、
Dx軸を前記デバイスの右方向、Dy軸を前記デバイスの上方向、Dz軸を前記デバイスの厚さ方向とした直交座標系としたとき、
前記回転軸からなる前記座標系とは、
前記デバイスの座標系をDx軸で任意の量回転させたものと一致させる。
【００２１】
前記デバイスの座標系を、
Dx軸を前記デバイスの右方向、Dy軸を前記デバイスの上方向、Dz軸を前記デバイスの厚さ方向とした直交座標系としたとき、
前記回転軸からなる前記座標系とは、
前記回転軸の一つを前記Dx軸と一致させ、もう一つの回転軸を前記基準姿勢での前記Dx軸と重力との外積に一致させる直交座標とする。
【００２２】
前記デバイスの座標系を、
Dx軸を前記デバイスの右方向、Dy軸を前記デバイスの上方向、Dz軸を前記デバイスの厚さ方向とした直交座標系としたとき、
前記回転軸からなる前記座標系とは、
前記回転軸の一つを重力と逆方向に一致させ、もう一つの回転軸を前記基準姿勢での前記Dx軸と重力との外積に一致させる直交座標とする。
【００２３】
仮想空間内のキャラクターを移動させるプログラムであり、
前記姿勢算出プログラムに基づく回転量に応じて、
前記キャラクターの移動方向と移動速度を決定する
操作プログラム。
【００２４】
前記キャラクターの移動方向とは、
前記キャラクターの観測手段の観測方向を基準とする。
【００２５】
タッチ入力を検出する手段を備え、キャラクターを観測する前記観測手段の観測方向の変更をタッチ入力に応じて行う。
【００２６】
何らかのアクションを行う際の作用点を示す照準の操作をタッチ入力に応じて行う。
【００２７】
前記移動と観測方向の変更及び照準の操作以外の操作をさらに行うことを可能とする。
【００２８】
前記回転量または回転量に応じた数値を、任意のプログラムで利用可能な信号として出力することを可能とする。
【００２９】
任意の移動体を移動させるプログラムであり、
デバイスの基準姿勢からの姿勢の変化に応じて、
前記移動体の移動方向と移動速度を決定する
操作プログラム。
【００３０】
前記移動体の移動方向とは、
前記移動体の観測手段の観測方向を基準とする。
【００３１】
タッチ入力を検出する手段を備え、前記移動体の前記観測手段の観測方向の変更をタッチ入力に応じて行う。
【００３２】
前記移動と観測方向の変更以外の操作をさらに行うことを可能とする。
【発明の効果】
【００３３】
【図面の簡単な説明】
【００３４】
【図１】持ち方の例 縦持ち
【図２】持ち方の例 横持ち
【図３】姿勢情報に基づく数値入力決定方法の説明図
【図４】タブレットデバイスのハードウェア構成を示すブロック図
【図５】回転量決定方法の説明図
【図６】数値決定のフローチャート
【図７】回転軸の取り方の例1
【図８】回転軸の取り方の例2
【図９】回転軸の取り方の例3
【図１０】キャラクターの移動についての説明図
【図１１】回転軸の取り方の例4
【図１２】カメラの操作方法1
【図１３】カメラの操作方法2
【図１４】カメラの操作方法3
【図１５】照準の説明図
【図１６】タッチ領域とボタンの配置例
【図１７】プログラムの実装例
【図１８】回転量決定方法の例2
【図１９】回転量決定方法の例3
【図２０】回転量決定方法の例4
【発明を実施するための形態】
【００３５】
説明のための例として、本発明によって、傾き算出手段とタッチディスプレイを有するタブレットデバイス(60)におけるサードパーサンキャラクターゲームのプログラムの実施形態を示す。
【００３６】
図4はタブレットデバイス(60)のハードウェア構成例を示すブロック図である。本実施例におけるタブレットデバイス(60)はCPU(100)と主記憶(101)と補助記憶(102)と表示部(106)と入力部(103)とを備えている一般的なコンピュータである。このうち、補助記憶(102)の中には本実施形態によるプログラムが格納されている。表示部(106)はタッチディスプレイを含む。入力部(103)はタッチディスプレイのタッチ入力手段(105)と傾き算出手段(104)とを含む。タブレットデバイス(60)で実行されるプログラムは、タッチ入力手段(105)によって、タッチディスプレイに対する何らかの操作があったことを検知することが出来る。タブレットデバイス(60)で実行されるプログラムは、傾き算出手段(104)によって、タブレットデバイス(60)の傾きを検知することが出来る。ここで、タッチ入力手段(105)と傾き算出手段(104)は、ハードウェアもしくはソフトウェアもしくはそれらの組み合わせによって実現されるものである。デバイスの傾きは逐次算出することができる。
【００３７】
傾き算出手段(104)は姿勢算出プログラムを利用する場合に備える。タッチ入力手段は、タッチ入力を用いる場合に備える。動画像の表示を行う場合に、表示部(106)としてディスプレイを備える。
例えば、動画像の表示を行わない実施形態では前記コンピュータはディスプレイを備えなくてもよい。タッチ入力手段も同様である。
【００３８】
前記タブレットデバイス以外での実施形態の例は、例えば、傾き算出手段を備えた入力装置である。例えば、傾き算出手段を備えたゲームのコントローラーなどである。このような場合、実施形態に合わせて、傾き算出手段(104)とその他任意の構成要素とを分離してもよいし、その実施形態で不要な構成要素は含まなくてもよい。上記はあくまで一例であり、構成は実施形態に合わせて適宜設定する。
【００３９】
デバイス(60)の基準姿勢からの回転量に応じた数値を決定する。以下にデバイスの回転量の決定方法を例示するが、デバイスの姿勢の変化に応じてどのように回転量を決定するかは、ユーザーのプレイスタイルなどを考慮して設計者が任意に決めてもよい。
【００４０】
説明のため、デバイス(60)の座標系を定義する。図7のようにDx軸(61)をデバイス(60)の右方向、Dy軸(62)をデバイス(60)の上方向、Dz軸(63)をデバイス(60)の厚さ方向とした直交座標系とする。
【００４１】
このとき、デバイス(60)の右方向および上方向とは、縦持ちや横持ちなどデバイス(60)を持つ向きに準ずるものとしてよい。表示部としてディスプレイを備える場合はディスプレイの描画向きに準ずるものとしてよい。即ち、描画内容を基準に上方向をDx(61)軸、右方向をDy(62)、画面の向いている方向をDz(63)軸としてもよい。
【００４２】
デバイスの回転軸を前記デバイス(60)の座標系Dx(61),Dy(62),Dz(63)でのベクトルで考える。デバイスの回転軸を示す任意のベクトルとして、x軸(64)、y軸(65)、z軸(66)を定める。x軸(64)、y軸(65)、z軸(66)はベクトルの始点を共通とし、座標系としても扱うこととする。
【００４３】
回転軸の取り方の一つの例は、x軸(64)、y軸(65)、z軸(66)をDx軸(61),Dy軸(62),Dz軸(63)に一致させる。
【００４４】
回転軸の取り方の別の例は、図8のように図7のx軸(64)、y軸(65)、z軸(66)を、Dx軸(61)を回転軸としてΦ(phi)だけ回転したものとする。つまり、Dx(61)軸、Dy軸(62)、Dz軸(63) を、Dx軸(61)を回転軸としてΦ(phi)だけ回転したものとする。
【００４５】
デバイス(60)を回転したとき、同じ回転でもphiの値によってxyz各軸周りの回転量が異なる。
【００４６】
ここで、回転軸としてy軸(65)を用いるとき、phiの値によってデバイス(60)の回転の仕方に応じたy軸(65)周りでの回転量の変化の仕方が変わる。
【００４７】
例えば、phi=0°としたとき、Dy軸(62)方向の回転に応じてy軸(65)での回転量が決定する。動作の一例は、z軸(66)を重力方向と逆方向に一致させるとき、デバイス(60)を水平状態から左右に傾けることでy軸(65)での回転量が変化する。
phi=90°としたときは、 y軸(65)は-Dz軸(63)に一致することとなり、-Dz軸(63)の方向の回転に応じてy軸(65)での回転量が決定する。動作の一例は、z軸(66)を重力方向と逆方向に一致させるとき、デバイスを立てた状態で左右に傾けることでy軸(65)での回転量が変化する。
【００４８】
Dy(62)軸とDz軸(63)についても同様に回転させてもよい。
【００４９】
別の回転軸の決定方法は、x軸(64)をDx軸(61)と一致させ、y軸(65)を基準姿勢でのDx軸(61)と重力の外積とする。これにより、基準姿勢でのy軸(65)を重力と垂直とする。
【００５０】
図9に一例を示す。gは重力を表す。
【００５１】
更に別の回転軸の決定方法は、z軸(66)を重力の逆方向に一致させ、y軸(65)を基準姿勢でのDx軸(61)と重力の外積とする。
【００５２】
図11に一例を示す。gは重力を表す。
【００５３】
デバイス(60)の基準姿勢におけるx軸(64)、y軸(65)、z軸(66)をそれぞれx0軸(67)、y0軸(68)、z0軸(69)とする。
【００５４】
x0軸(67)、y0軸(68)、z0軸(69)からなる座標系の原点はデバイス(60)の位置の変化によらずx軸(64)、y軸(65)、z軸(66)からなる座標系の原点と一致させる。また、デバイスの姿勢の変化によってx0軸(67)、y0軸(68)、z0軸(69)各軸の向きは変化せず、x0軸(67)、y0軸(68)、z0軸(69)はデバイス(60)の基準姿勢を表す。原点とはデバイス(60)の回転の中心となる。
【００５５】
ユーザーの姿勢、即ちデバイス(60)の基準姿勢に応じて、回転軸x軸(64)、y軸(65)、z軸(66)とphiを設定可能とする。
もしくはユーザーが自由に設定可能とする。
【００５６】
回転量の決め方について説明する。回転量の決定方法は、複数考えられ、以下にその例を示す。
【００５７】
第一の回転量の決定方法について説明する。
x軸(64)、y軸(65)、z軸(66)の回転量とは、デバイス(60)の基準姿勢からデバイス(60)がx軸(64)、y軸(65)、z軸(66)の各軸周りでどれだけ回転したかとする。
【００５８】
第二の回転量の決定方法について説明する。
x軸(64)、y軸(65)、z軸(66)の回転量とは、デバイス(60)の基準姿勢からデバイス(60)がx0軸(67)、y0軸(68)、z0軸(69)の各軸周りでどれだけ回転したかとする。
【００５９】
第一と第二の回転量の決定方法に関して、
クォータニオンやオイラー角によってデバイス(60)の姿勢と基準姿勢を表現し、その差分から基準姿勢からの各軸の回転量を算出してもよい。計算の一例は、x軸(64)、y軸(65)、z軸(66)あるいはx0軸(67)、y0軸(68)、z0軸(69)からなる座標系で表現されたクォータニオンに関して、現在のデバイス(60)の姿勢に基準姿勢のinverse値を乗じたクォータニオンが現在の姿勢と基準姿勢との差となり、それをオイラー角表現に変換し、オイラー角の各成分を回転量として扱う。
【００６０】
第三の回転量の決定方法について説明する。
x軸(64)、y軸(65)、z軸(66)からなる座標系の原点を始点とする、デバイス(60)の基準姿勢のときのz軸(66)であるz0軸(69)方向への単位ベクトルを考える。x軸(64)とy軸(65)の回転量をそれぞれ前記単位ベクトルのy軸成分とx軸成分に応じて決定する。図5に一例を示す。
【００６１】
具体的な例は、前記単位ベクトルがx軸(64)、y軸(65)、z軸(66)からなる座標系において(nx0,ny0,nz0)と表されるとき、x軸(64)の回転をarctan(ny0/nz0)としy軸(65)の回転をarctan(nx0/nz0)とする。arctanは逆三角関数である。代わりにarctan2(ny0,nz0)、arctan2(nx0,nz0)としてもよい。
【００６２】
当然、ny0とnx0の値にそれぞれ任意の定数を乗じた値をx軸(64)とy軸(65)の回転量として扱ってもよいし、他の計算式などを用いてもよい。
【００６３】
デバイスの姿勢を変化させると、デバイス(60)の回転によっては変化しないz0軸(69)に対して、x軸(64)、y軸(65)、z軸(66)座標系がデバイス(60)の回転に伴って回転するので、x軸(64)、y軸(65)、z軸(66)座標系から見ると前記単位ベクトルが回転したようにふるまう。
【００６４】
ここで、z軸(66)での回転量を利用する場合は、デバイス(60)のz0軸(69)での回転を用いる。z0軸(69)での回転によってx軸(64)とy軸(65)も回転するので、z0軸(69)での回転ではnx0,ny0,nz0の値は変化しない。
【００６５】
前記x軸(64)、y軸(65)、z軸(66)の代わりにx0軸(67)、y0軸(68)、z0軸(69)からなる座標系を用いても良い。そうした場合は前記(nx0,ny0,nz0)の代わりに、z軸(66)方向への単位ベクトルのx0軸(67)、y0軸(68)、z0軸(69)での成分(nx,ny,nz)を用いる。
【００６６】
ここで、z軸(66)の回転量を利用する場合は、デバイス(60)のz軸(66)での回転を用いる。z軸(66)での回転によっては前記z軸(66)方向への単位ベクトルは変化しないので、z軸(66)での回転ではnx,ny,nzの値は変化しない。
【００６７】
第四の回転量の決定方法について説明する。
デバイス(60)の基準姿勢をデバイス(60)の存在する空間内のある平面Aで表現することとする。
x軸(64)での回転量を平面Aとy軸(65)のなす角とする。y軸(65)での回転量を平面Aとx軸(64)のなす角とする。このとき、平面Aと各軸とのなす角は、デバイスの回転方向を考慮した正負の値とする。
【００６８】
平面Aとは、デバイス(60)の基準姿勢でのx0軸(67)とy0軸(68)のなす平面とする。
【００６９】
例えば、回転軸を図7のようにとったときに平面Aを現実世界の地面と平行であるとすると、デバイス(60)の地面に対する傾きに応じた回転量を算出することとなる。
【００７０】
各軸の回転量に基づいた数値を決定する。デバイスの姿勢から獲得した各軸の回転量からキャラクターの移動方向と速度を決めるための数値を決定する。
【００７１】
各軸の、回転に基づいた数値入力を次のように決定する。
図3のように、ある回転軸について、基準値(20)からの回転量(25)xと、回転量を有効にするために必要な回転量であるthreshold1(21)とthreshold2(22)と、最大回転量max1(23)とmax2(24)とし、回転量を無効としたときの値を0としたとき、1つの軸の入力値joyの値を以下の疑似コードのように決定する。
if(x > max1)x=max1
if(x<max2)x=max2
if( x > threshold1){
joy = (x-threshold1)/(max1-threshold1) * 100.0
}
if( x < threshold2){
joy = (x-threshold2)/(max2-threshold2) * 100.0
}
if( x < threshold1 && x>threshold2){
joy=0.0;
}
フローチャートを図6に示す。ここではjoyの値を-100から100の範囲の数値としたが、必要に応じて任意の範囲に変更可能である。*100を別の値を乗じるようにすればよい。
【００７２】
threshold1(21)とthreshold2(22)を設定することによって、任意に決めた回転量での回転を無視するように機能し、入力値を入力無効状態とすることを容易にする。
max1(23)とmax2(24)を設定することによって、入力値が最大となる回転量を設定可能とする。
ここで、基準値(20)とthreshold1(21)とthreshold2(22)とmax1(23)とmax2(24)は回転軸ごとに個別に設定可能なパラメータ値として、必要に応じて自由に設定可能とする。
【００７３】
例えば、基準値(20)について、リセットボタン(80)等を設け、ボタンが押されたときのデバイスの姿勢を基準姿勢として設定する。基準値(20)とは基準姿勢からデバイスの姿勢が変化していないときの回転量となる。基準姿勢は前記回転量を決定する処理で考慮されているため、基本的に基準値は0としてよいが、必要に応じて0以外の値としてもよい。基準値(20)を0以外の値としたとき、基準姿勢を当該回転軸で、その値に応じて回転させたことになる。
これによってユーザーが簡単に自分の好みに合わせて、デバイスの回転量を計算する際の基準姿勢を調整することを可能とする。
【００７４】
以上のようにして得られるx軸(61)とy軸(62)の回転に基づく数値入力をそれぞれjoy_x、joy_yと呼ぶこととする。
【００７５】
仮想空間内のキャラクターの移動に関して説明する。
【００７６】
ここで示す実施形態の例は、仮想空間内の前後左右への移動とジャンプと攻撃とのアクションが可能なキャラクターを操作するゲームとする。以下では主に三人称視点でのキャラクターの操作に関して説明してゆくが、一人称視点でのキャラクターの操作も同様に行うことができる。
【００７７】
前記ゲームの一例は、ファーストパーソンシューティングゲームやサードパーソンシューティングゲームである。
【００７８】
キャラクターをデバイス(60)の基準姿勢からの回転量に応じた方向に移動させる。
キャラクターの移動方向は仮想空間内のカメラの向いている方向を基準として決定する。
【００７９】
キャラクターの移動は、joy_xとjoy_yの値に基づいて行う。より具体的には、図10の(a)のように、joy_xの値によって、カメラから見て前後方向の移動を行う。デバイスを奥に傾ける方向に回転したとき、キャラクターをカメラから見て奥方向に移動させ(図10の(a)の左側)、逆方向に回転したとき手前方向に移動させる(図10の(a)の右側)。
図10の(b)のように、joy_yの値によって、視点から見て左右方向の移動を行う。デバイスを右に傾ける方向に回転したとき、キャラクターをカメラから見て右方向に移動させ(図10の(b)の右側)、左に傾ける方向に回転したとき、左方向に移動させる(図10の(b)の左側)。
ここで、デバイスの傾きに対するキャラクターの動きは一例であり、前記回転軸の取り方と回転量の決定方法によってキャラクターの移動は変わる。
ここでの移動に関わる処理は一例であり、joy_xとjoy_yの値をもとにした別の方法でキャラクターの移動を決めても良い。例えば、カメラではなくキャラクターの前方から見て前後左右方向へ移動させる。
【００８０】
joy_xとjoy_yの値に応じて、キャラクターの移動速度を決定する。
【００８１】
joy_xの値に応じて、キャラクターの前後方向の移動速度を決定し、joy_yの値に応じてキャラクターの左右方向の移動速度を決定する。
【００８２】
ここで、キャラクターの前への移動方向を、キャラクターを観測するカメラの観測方向とする。joy_xの値に応じて、カメラから見て前後方向にキャラクターを移動させる。joy_yの値に応じて、カメラから見て左右方向にキャラクターを移動させる。
【００８３】
あるいは、キャラクターの前への移動方向を、キャラクターの前方向、すなわちキャラクターの向いている方向とする。joy_xの値に応じてキャラクターを前後方向に移動させ、joy_yの値に応じてキャラクターを旋回させる。
joy_xとjoy_yが0以外のとき、キャラクターはカーブするように移動し、joy_xが0でjoy_yが0以外のときキャラクターはその場で回転する。joy_xが0以外でjoy_yが0のときキャラクターは直進する。
【００８４】
回転軸の決定方法について、特別な場合について説明する。これらの特別な場合を適用する条件や適用するか否かは設計者やユーザーが決めることができるものとする。
【００８５】
ユーザーが仰向けでデバイスを操作しており、デバイスの画面が下を向いているときの動作に関して説明する。
デバイスが下を向いているとは即ち、デバイスのDz軸(63)が下向きとなるような姿勢を基準姿勢とする場合である。この場合、x軸(64)をDx軸(61)に一致させ、z軸(66)を重力方向と逆方向と同じにする。
キャラクターの前後方向の移動はDx軸(61)周りの回転に応じて行い、デバイスの上部を奥に傾ける方向に回転させたときキャラクターをカメラから見て前方へ移動させ(図10の(a)の左側)、手前に傾ける方向に回転させたときキャラクターをカメラから見て後方へ移動させる(図10の(a)の右側)。
キャラクターの左右方向の移動はy軸(65)周りの回転に応じて行う。このとき、キャラクターをy軸(65)周りの回転によってデバイスが傾いた方向へ移動させる。即ち、デバイスの右側が下がるように回転させるとキャラクターを右方向へ移動させ、左側が下がるように回転させるとキャラクターを左側へ移動させる。
【００８６】
あるいは、デバイスのDz軸(63)が下向きとなるような姿勢を基準姿勢とする場合、x軸(64)をDx軸(61)に一致させ、z軸(66)を重力方向と同じにする。
このようにしたとき、y軸(65)の回転方向に応じたキャラクターの移動方向が、z軸(66)を重力方向と逆方向と同じにした時とは左右逆となる。
即ち、デバイスの右側が上になるように回転させることでキャラクターを右方向へ移動させ、デバイスの左側が上になるように回転させるとキャラクターを左側に移動させる。
【００８７】
左右方向の移動方向に関して、デバイスが下方向に傾いた方向に移動させる方法と、ユーザーから見て奥の方に傾いた方向に移動する方法とで、どちらがより直感的に操作できるかはユーザーによって異なるため、任意に設定可能とすることが望ましい。
前後方向の移動に関しても、回転方向に応じた移動方向を逆転しても良い。
【００８８】
デバイスの基準姿勢が横向きのときの動作に関して説明する。ユーザーが横向きに寝ながらデバイスを操作している場合などである。
【００８９】
Dx軸(61)周りの回転量を用いるとき、デバイスの基準姿勢が横向きになるとDx軸(61)が重力方向と平行、あるいは平行に近くなる。
【００９０】
回転軸が重力方向と平行、あるいは平行に近くなると、一般的な傾き算出手段である、加速度センサと角速度センサの組み合わせのみでは、重力方向の回転量にずれが生じる可能性がある。角速度センサの積分値の誤差を、重力方向での回転では加速度センサから得られる重力によって補正できないからである。したがって、時間経過とともに重力方向の回転量はずれてゆき、結果として基準姿勢が時間経過とともに意図せず変化することとなる。
【００９１】
基準姿勢が意図せず変化することは、快適な操作を妨げる恐れがある。
【００９２】
解決策の一例は、デバイス(60)の基準姿勢に応じて、少なくともjoy_xとjoy_yを決定するための回転量を検出する回転軸が重力方向と平行、平行に近くならないように、回転軸x軸(64)、y軸(65)、z軸(66)を決定する。
【００９３】
より具体的な例は、Dz軸(63)の回転に応じて、キャラクターを前後方向に移動させる。Dy軸(62)の回転に応じて、キャラクターを左右方向に移動させる。
即ち、x軸(64)をDz軸(63)に平行、もしくは平行に近づけ、y軸(65)をDy軸(62) に平行、もしくは平行に近づける。
【００９４】
解決策のもう一つの例は、地磁気センサなど重力を軸とした回転を検出可能な手段を用いて、前記ずれを補正する。
【００９５】
デバイスの姿勢の変化によっては、各軸で回転量を適切に検出できない場合がある。ジンバルロックや特異点周辺での回転量の検出などである。
【００９６】
このような状況に陥るとき、それを解消するように回転軸や基準姿勢を更新する。このとき、新たな回転軸、基準姿勢によって現在の各軸の回転量が変化しないように、新たな回転軸、基準姿勢での各軸の回転量に補正を加える。
【００９７】
回転量を有効とする条件を設定することを可能とする。回転量が有効でない間は、回転量を所定の値とする。例えば、回転量が有効でない間は回転量を0とする。回転量を有効とする条件とは、デバイスの姿勢を変化させる以外の任意に決めた入力が行われている間、およびその入力が終了してから所定の期間とする。
例えば、タッチ入力が同時に行われている間のみ回転量を有効とする。
【００９８】
基準姿勢の設定について説明する。
デバイスの基準姿勢は、ボタンなどによってユーザーが任意のタイミングで設定可能であるとする。例えば、前記ボタンを押した、または離したときのデバイス(60)の姿勢を基準姿勢として設定する。また、前記ボタンが押されている間はキャラクターの移動を行わないものとしても良い。ボタンを押している間、または基準姿勢を設定している間はキャラクターの移動速度を0とする。基準姿勢が再設定されるとき、前記回転軸も同時に再設定されるものとして良い。
【００９９】
その他の基準姿勢の設定タイミングは、基準姿勢の設定画面を設けユーザーが任意の基準姿勢を設定可能とする。
ポーズ画面やメニュー画面などからキャラクターを操作する状態へ移行したときのデバイスの姿勢を基準姿勢として設定する。このとき、キャラクターの移動操作を行う前に確認画面を設け、ユーザーが基準姿勢を設定する余裕を設けてもよい。この設定画面はユーザー入力もしくは一定時間経過後に終了し、キャラクターの操作を開始する。
【０１００】
また、前記基準姿勢の設定後に直ちにキャラクターの移動操作を開始しないようにして、ユーザーにキャラクター操作への開始直後のキャラクターの移動方向を決定する余裕を設けてもよい。
【０１０１】
デバイス(60)の状態が所定の条件を満たすとき、キャラクターの操作を停止する。例えば、デバイス(60)を落下させてしまったときなどである。このとき、メニュー画面を開くなどしてキャラクターの移動操作を中断する。
【０１０２】
必要に応じて、上記の方法によるキャラクターの移動方向を示す手段を提供する。本実施形態ではjoy_xとjoy_yによる移動方向を示す矢印(70)をキャラクターの周囲に表示する。矢印の方向はjoy_xとjoy_yからなる移動方向を示し、矢印の大きさは移動の速さを示す。本実施形態においてjoy_xとjoy_yを成分とするベクトルを考えたとき、矢印の方向はベクトルの向き、矢印の大きさはベクトルの大きさを示す。
【０１０３】
前記矢印はキャラクターの周囲以外の、例えば画面の端に表示させてもよい。表示の仕方はプログラムの設計者が任意にデザイン可能である。
【０１０４】
キャラクターが存在する空間内のカメラの操作を、タッチディスプレイ内に指定したカメラ操作領域(81)でのタッチ入力に基づいて操作する。カメラ操作領域(81)の形状と数は任意に決めてよい。また、ディスプレイを含まないタッチ入力検出手段のタッチ入力検出面にカメラ操作領域(81)を設けてもよい。このような形態をとる場合とは、例えば、デバイス(60)と分離されているディスプレイに映像を出力するような場合や前記ディスプレイと前記タッチ入力検出手段とが分かれている場合、映像出力が必要ない場合などである。
【０１０５】
上下方向と左右方向の入力値に対して、操作するキャラクターの空間内のカメラを操作する。
前記上下方向と左右方向の入力値をカメラ操作領域(81)でのタッチ入力に基づいて決定する。
カメラの動きは状況に応じて自動的に動くようにしてもよい。例えば、障害物オブジェクトを避けるように制御する。あるいは、前記入力が一定時間検出されない、即ち、タッチ入力がされていない場合や変化していない場合、自動的にキャラクターの向きに応じた所定の向きとなるように制御する、例えば自動的にキャラクターの正面を向く。
【０１０６】
本実施形態では、カメラ操作領域(81)内にて行われたタッチ入力のスライド方向と量に基づいて、視点を変更する。一例として、視点を、横方向のスライドに応じてゲーム空間内の任意の鉛直な軸を中心に回転させ、縦方向のスライドに応じて、ゲーム空間内の任意の鉛直な軸を中心に回転させてもよい。より詳しい例は、前記軸に関して、ゲーム空間内のプレイヤーを貫く軸とする。
【０１０７】
カメラは上下方向と左右方向に操作可能とする。以下にカメラの操作と動きについて説明する。以下の説明に挙げるカメラの操作は一例であり、上下方向と左右方向などカメラ操作のうち二方向の操作をタッチ入力に応じて操作可能であれば任意の方法を用いてよい。
【０１０８】
カメラの動きの第一の方法は、キャラクターを基準とする任意の点でカメラが上下方向と左右方向に回転する。カメラは図12のように点Cをカメラの位置、点Pを、キャラクターを基準としたカメラの回転中心、rを点Cと点Pとの距離とする。カメラの位置点Cがキャラクターの後方にあり、カメラがキャラクターを捉えるようなとき、三人称視点となり、キャラクターの前方、もしくはキャラクターの位置と同じ点にあるとき、一人称視点となる。
【０１０９】
rは、ユーザーの操作や自動的に変化させることもできる。自動的に変化させる例は、上下方向の動きに応じて変化させる。例えば、三人称視点でカメラが下を向くとき、キャラクターを見下ろすようにrの値を増やす。別の例では、カメラが空間内の障害物オブジェクトを避けるようにrの値を自動的に変更する。
【０１１０】
カメラの動きの第二の方法は、図13のように、カメラの上下方向の移動に関して、軌道を設定して、上下方向の入力に対してカメラの位置点Cを前記軌道上で移動させる。軌道はカメラの左右方向の回転軸を基準として設定する。カメラの左右方向の回転軸はキャラクターを基準として設定する。
【０１１１】
図14のようにカメラの観測方向はキャラクターを基準とした点Pを向くように制御してもよい。点Pも点Cと同様に、上下方向の入力や制御状態に応じて移動させても良い。
【０１１２】
点Cや点Pの可動範囲を超えるように動かそうとするとき、代わりに点Cと点P間の距離rがさらに変化するように制御してもよい。例えば、点Cを、範囲を超えて上に動かそうとするとき、代わりにrの値を大きくして広い範囲を見渡せるようにする。
【０１１３】
照準の操作に関して説明する。照準とは、何らかのアクションや機能を行う際の作用点を示すためのものである。例えば、射撃ゲームでは発射する弾丸の発射方向や着弾点を指定する。その他、攻撃方向や位置などを指定するものである。照準を動かすとは則ち、前記作用点を動かすこととなる。ここでいう作用点とは、前記アクションや機能を働かせる点や方向を意味することとする。
【０１１４】
本実施例では、照準(130)はデバイスの画面上に表示される点として、作用点を画面において照準(130)と重なる画面が写す空間の点とする。例えば、照準(130)が仮想空間内の的と重なっていれば、作用点はその的となり、弾丸を発射するアクションを行えば弾丸はその的に向かって発射される。これはあくまで一例であり、適用先にあわせて照準(130)の働きを決める。
【０１１５】
照準(130)は任意の点に固定しても良い。例えば画面の中心に照準(130)を固定する。このとき、カメラの観測方向を変更することによって作用点を変化させることとなる。
【０１１６】
照準は画面上の照準移動領域内(131)をカメラ操作領域(81)でのタッチ入力による上下左右方向の入力値に応じて移動させる。照準は照準移動領域(131)を出ないように制御される。照準移動領域内(131)の形状は任意に決めてよい。
【０１１７】
左右方向の入力値に応じて照準を左右に動かし、上下方向の入力値に応じて照準(130)を上下に動かす。
【０１１８】
カメラ操作を伴う照準(130)の操作に関して説明する。
照準とカメラの両方を操作するとき、その両方をカメラ操作領域(81)でのタッチ入力に応じて行う。照準(130)が照準移動領域(131)内の場合と照準移動領域(131)外に出ようとする場合とでカメラの動きを変える。
【０１１９】
照準(130)が照準移動領域(131)内であるとき、カメラを動かさない。
【０１２０】
あるいは、照準(130)とカメラを同時に動かす。このとき、照準移動領域(131)外に出ようとする場合よりもカメラの移動速度を少なくしてもよい。
【０１２１】
照準(130)が照準移動領域(131)外に出ようとする場合、出ようとする方向に応じてカメラを動かす。このとき、照準(130)は照準移動領域(131)内に留める。このとき、カメラの動きは照準が照準領域内にあるとき以上にしても良い。例えば、図15のように照準が右へ移動して、照準移動領域(131)の右側へ出ようとするとき、照準の移動速度に応じた速さでカメラを回転させる。
【０１２２】
照準の動きと照準移動領域とを上下方向成分と左右方向成分とで分けて扱うとき、照準の斜め方向の移動に関して、例えば、左右方向成分のみが照準移動領域(131)外となるとき、カメラを左右方向のみに動かすか、上下方向にも動かすかは任意に決めて良い。
【０１２３】
図16に示すようにタッチ検出面にカメラ操作領域(81)を設定する。ただし、これは一例でありカメラ操作領域(81)は任意の領域としてよい。複数の領域に分かれていてもよい。カメラ及び照準はカメラ操作領域(81)でのタッチ入力に応じて行う。タッチ入力に応じた上下方向と左右方向の入力値を決定し、その入力値に応じて照準、カメラを操作する。以下、主にカメラの操作に関する例を示すが、照準に関しても同様である。
【０１２４】
ここでは、タッチ点の検出開始から未検出となるまでの一連をタッチ入力と呼ぶ。最初のタッチ検出点をタッチ開始点、現在のタッチ検出点をタッチ点、未検出となったときの最後のタッチ検出点をタッチ終了点と呼ぶこととする。タッチ入力はタッチ点の検出ごとに独立して管理可能で、複数のタッチ入力を同時に扱うことも可能とする。
例えば、タッチボタンとタッチ点の移動によるカメラ操作とを同時に行うことを可能とする。
【０１２５】
タッチ入力による上下左右方向の入力値の決定方法の一例は、タッチ点の移動方向と速度に応じて決定する。直前の、例えば直近時間やプログラムステップでタッチ点が移動した方向と量の上下方向成分と左右方向成分に応じて、それぞれ上下方向と左右方向の入力値を決定する。
【０１２６】
ここでは、タッチ入力の上下左右方向はデバイス(60)と一致させるものとする。
【０１２７】
例えば、タッチ面を右になぞるようなタッチ入力が行われると左右方向の入力値が与えられ、カメラが右方向を向く、あるいは照準が右へ移動する。
【０１２８】
タッチ入力が所定の条件のもとで終了したとき、そのタッチ入力に応じた上下左右方向の入力を継続する。
【０１２９】
タッチ点の直近任意時間での移動速度が所定の速度以上でタッチ入力が終了したとき、その任意時間でのタッチ点の移動方向と移動速度に応じて、そのタッチ入力に応じた上下左右方向の入力を継続する。例えば、カメラを操作していたとき、タッチ入力終了後もカメラが動き続ける。
【０１３０】
継続中の上下左右方向の入力値は、時間経過とともに徐々に減少させても良い。最終的に当該入力値が0となり、例えばカメラや照準は停止する。
【０１３１】
動作の一例は、タッチ面を右に弾くようなタッチ入力が行われると、カメラは右に回り続け、徐々に回転速度が遅くなり最終的に停止する。カメラの上下方向のように、可動範囲に上限がある場合はそれ以上動かさない。
【０１３２】
照準に関しても同様であり、継続によって照準が照準移動領域(131)から出ようとすることによってもカメラが動く。
【０１３３】
この継続入力中に、新たな上下左右方向の入力値を決めるためのタッチ入力が行われたとき、その継続していた入力を終了する。則ち、カメラを操作しており継続入力によってカメラが動き続けているときにカメラ操作領域に新たなタッチ入力が行われると、カメラが停止しそのタッチ入力のタッチ点の移動に応じてカメラを動かす。
【０１３４】
タッチ入力中にタッチ点の移動によってタッチ点がカメラ操作領域外(81)となった場合も、そのタッチ入力に応じた各種操作を継続しても良い。
【０１３５】
カメラ操作領域(81)外がタッチ開始点となるタッチ入力のタッチ点がカメラ操作領域(81)内となった場合は、そのタッチ入力に応じた各種操作を行わないものとして良い。則ち、タッチ開始点がカメラ操作領域内となるタッチ入力に応じて、カメラ、照準を操作する上下左右方向の入力値を決定する。
カメラ操作領域(81)内となったタッチ点をタッチ開始点として上下左右方向の入力値を決定する処理を開始しても良い。
【０１３６】
上下左右方向の入力値を決定する別の方法は、任意の始点からのタッチ点の位置に応じて決定する。いわゆるバーチャルパットである。始点はタッチ開始点としても良いし任意の固定点としても良い。
【０１３７】
その他アクションや任意の機能の実行方法に関して説明する。ここでは、キャラクターの攻撃アクションとジャンプアクションの実行方法に関して述べるが、これは一例であり、実行するアクションや機能と実行方法は適用先に応じて適宜設定する。
【０１３８】
キャラクターの攻撃について、タッチディスプレイ内に攻撃ボタン(82)を配置し、ボタンが押されるとキャラクターがボタンに応じた攻撃アクションを行う。
【０１３９】
攻撃アクションの一例とは、サードパーソンシューティングゲームやファーストパーソンシューティングゲームにおける射撃であり、前記攻撃ボタン(82)が押されると、照準(130)が示す点に向かってキャラクターが弾丸を発射する。
【０１４０】
他にも、任意の機能の例として、メニュー呼び出しボタンを配置し、ボタンが押されるとメニュー画面を呼び出すようにしてもよい。
【０１４１】
キャラクターのジャンプについて、本実施形態ではタッチディスプレイ内にタッチジェスチャ領域(83)を設定し、領域内でダブルタップが行われるとキャラクターがジャンプアクションを行う。
【０１４２】
ここで、ダブルタップによるジャンプアクションのタイミングとは、所定時間内にタッチ入力が終了しさらに所定時間内にタッチ入力が開始したときとする。このタッチ入力によってさらに前記カメラや視点の操作を可能とすることによって、ジャンプ後のカメラや照準(130)操作をスムーズに行うことを可能とする。
【０１４３】
タッチディスプレイ内のボタンやタッチジェスチャに応じた処理やアクションとは、ここで例示したもの以外も、適用先に合わせて任意に設定可能である。当然前記ダブルタップ以外の任意のタッチジェスチャを用いてもよい。
【０１４４】
デバイス(60)の姿勢に応じたキャラクターの移動を行う条件を設定してもよい。
例えば、カメラ、照準を操作している間や前記攻撃やジャンプなどの所定のアクションを行っている間、および必要に応じてそれらが終了してから所定の時間のみキャラクターの移動を行う。
【０１４５】
カメラ、照準を操作している間とは、前記タッチ入力に応じたカメラ、照準の操作が、タッチ入力が終了した後も継続している間も含めてよい。
【０１４６】
前記入力が終了してから所定の時間が経過するまでの間もキャラクターの移動を可能とする。
これによって、タッチ点がタッチ入力検出可能面から出てしまいそうになったときに、改めてタッチ入力をし直す場合、タッチ入力が行われていない間もキャラクターの移動を可能とする。
前記所定の間とは、入力やシステムの状態に応じて決定してもよい。例えば、ボタンに対しては0として、タッチ入力に対しては、直前のタッチ入力の変化量に応じた値とする。
【０１４７】
必要に応じて、姿勢情報に基づく数値入力による現在の入力値を確認可能とするための動作を行う機能を付加する。
【０１４８】
例として以下に記述する方法の任意の組み合わせによって確認する手段を提供する。
(1) 入力値に応じて、画面に数値表示やバーによる表示、矢印による方向表示(70)を加えて視覚的に確認可能とする。
(2) 入力値に応じて、音の種類、音量を変化させて鳴らすことによって、聴覚によって確認可能とする。
(3) 入力値に応じて、機器の振動機能によって、振動の強さ、振動の仕方を変化させることによって、触覚的に確認可能とする。
(4) 入力値に応じて、力覚を与える機能を有する機器によって与える力覚を変化させることによって、力覚によって確認することを可能とする。
【０１４９】
本願発明を用いることで、本実施例で説明したような仮想空間内の前後左右への移動とジャンプと攻撃とのアクションが可能なキャラクターを操作するゲームでは、図2の持ち方で操作するとき、キャラクターの移動処理を姿勢算出プログラムで得られる数値入力に基づいて行い、カメラや照準の操作を左親指で行い、攻撃などのアクションを右親指で行うことができるので、キャラクターの移動とカメラや照準の操作と攻撃などのアクションとを同時に独立して操作することを可能とするので、より自由度の高いキャラクターの操作をユーザーに提供することができる。右親指と左親指とは当然逆でもよい。
【０１５０】
また、図1の持ち方においても、姿勢算出プログラムで得られる数値入力とデバイスを保持している手の親指によって、2つの入力に応じた操作を同時に独立して行うことができる。さらに、デバイスを保持していない手を用いた入力も併せて同時に独立して行うことができる。
【０１５１】
また、デバイスの姿勢の変化をカメラの動きと連動する方法と比べて、本実施例では、デバイスの姿勢の変化に応じてキャラクターの移動速度を決定するので、キャラクターの操作を満足するために必要な基準姿勢からデバイスの姿勢を変化させる量が少なくて済む。したがって、より快適な操作を提供することができる。
【０１５２】
前記カメラや照準の操作や攻撃などのアクションや任意の機能の呼び出しは、タッチ入力手段を用いる代わりに実デバイスのボタンやアナログスティック入力の信号を用いてもよい。
【０１５３】
ここまで、サードパーサンキャラクターゲームのプログラムの実施形態として示してきたが、前記姿勢算出プログラムやキャラクターの移動に関する処理は、プログラムモジュールとしても実施することができる。このプログラムモジュールは、適用先の任意プログラムの一部として実装してもよい。
【０１５４】
このとき、前記処理はライブラリやソースコード、関数などによって実装する。これらは任意のプログラムに組み込むための実装方法の一例であり他の方法を用いてもよい。
【０１５５】
あるいは、任意のプログラムが前記回転量、あるいは前記回転量に応じた数値を利用できるような、前記任意のプログラムと独立したプログラムとして実装することもできる。
【０１５６】
例えば、ゲームのコントローラーのアナログスティックによる方向指示入力と等価な信号を生成するプログラムとして実装してもよい。いわゆるゲームのコントローラーのデバイスドライバのように実装してもよい。
方向指示入力に関して、スティックを横方向に倒したときの信号に相当する値を前記joy_y、縦方向に倒したときの信号に相当する信号を前記joy_xに応じて決定する。
【０１５７】
例えば、前記デバイスドライバが有効である間は、実行するコンピュータのシステムに方向指示入力信号を生成し、システムはその方向指示信号に応じた処理を行う。
例えば、アナログスティックに対応したソフトウェアを実行していれば、デバイスの傾きに応じたアナログスティックの操作を可能とする。
【０１５８】
また、タッチ入力に応じて、前記ゲームのコントローラーのボタンに応じて生成される信号と等価な信号を生成することによって、前記方向指示入力の場合と同様に、ボタンに対応したソフトウェアの操作を可能とする。前記バーチャルパットではアナログスティックによる方向指示信号を生成する。
【０１５９】
タッチボタンやバーチャルパットなどのタッチ入力のためのユーザーインターフェースを描画するときは、画面の最前面に描画する。さらに任意の透過処理を行ってもよい。
【０１６０】
また、本願によるタッチ入力の検出が、もともとのタッチ入力の検出と重なる場合は、本願によるタッチ入力に対する処理を優先して行い、もともとのタッチ入力の処理を無視するようにしてもよい。
【０１６１】
例えば、適用先のプログラムがタッチボタンUIを有しており、本願プログラムによって前記ボタンUIを覆うようにタッチジェスチャ領域(83)が設定されると、前記ボタンUIに対するタッチ入力は無視される。
【０１６２】
本願によるタッチ入力の検出が、もともとのタッチ入力の検出と重ならないようにしてもよい。
【０１６３】
上記の組み合わせによって、例えば、姿勢検出手段とタッチディスプレイを有するコンピュータにおいて、前記ゲームのコントローラーが無くとも、デバイスを傾ける操作とタッチ入力によってゲームのコントローラーに対応したソフトウェアを操作することを可能とする。
【０１６４】
図17に任意のプログラムに組み込むように実装した場合(図17左側)とデバイスドライバのように実装した場合(図17右側)のシステム構成の例を示す。これはあくまで一例であり、どのように実装するかは設計者が各々決めてよい。
【０１６５】
任意のプログラムに組み込むように実装した場合(図17左側)には、姿勢算出プログラムとキャラクター操作処理とタッチ入力の処理のみ記載したが、当然適用先のプログラムにはこれら以外の処理も含まれる。当然、姿勢算出プログラムのみを含むようにしてもよい。
【０１６６】
デバイスドライバのように実装した場合(図17右側)は、姿勢算出プログラムから得られる前記回転量に応じて、前記アナログスティック入力値を決定し、アナログスティック入力に対応した任意のプログラムが利用できるようにシステムに伝える。タッチ入力の処理についても同様に、前記ボタン入力信号をゲームコントローラのボタン入力に対応した任意のプログラムが利用できるようにシステムに伝える。
タッチ入力の処理に関しては必要に応じて実装するものとする。また、姿勢算出プログラムの部分とタッチ入力の処理の部分を一つにまとめてよい。
【０１６７】
ここまでで、仮想空間内のキャラクターの操作に関して説明したが、当然現実世界の移動体の操作にも適用してもよい。このとき前記キャラクターとは移動体に当たる。例えば、無線操縦可能な走行車両やロボットである。また、観測手段は前記移動体に備えられたカメラなどとなる。
【０１６８】
移動体の移動は、前記キャラクターの場合と同様にjoy_xとjoy_yの値に応じて行ってよい。
移動体の移動方法は、移動体に応じたものとする。例えば、向きを変えずとも全方向に移動可能な移動ロボットの場合は、前後左右方向の移動速度をjoy_xとjoy_yに応じて決定し、向きの変更は、前記タッチ入力に応じた左右方向の入力値に応じて行う。また、観測手段を有する場合は、観測手段の上下方向の観測方向の変更を前記タッチ入力に応じた上下方向の入力値に応じて行うものとしてよい。
【０１６９】
他の例は、移動体の前後方向の移動速度をjoy_xに応じて決定し、移動体の旋回速度をjoy_yの値に応じて決定してもよい。このとき、観測手段を有する場合は、観測方向の変更について、上下の観測方向を前記タッチ入力に応じた上下方向の入力値、観測方向の左右、回転方向の変更を前記タッチ入力に応じた上下方向の入力値に応じて行うものとしてよい。
【０１７０】
前記回転量を無効とし所定の値にする、もしくは無視する処理に関して、複数の回転量を扱うとき、それぞれの回転量を無効にする判断を他の回転軸での回転を考慮して行う。
【０１７１】
また、前記回転量を有効にするための条件と無効とするための条件とに差をつけることを可能とする。
【０１７２】
前記回転量を無効とし所定の値にする、もしくは無視する範囲に関して、第二の例について説明する。複数の前記回転軸での回転量からなるベクトルを考える。各回転量を無効とする前記ベクトルの任意の領域をそれぞれ定め、前記ベクトルが前記領域内のとき、対応する回転量を無効として扱う。さらに、前記領域外での回転量については前記領域に応じて回転量に補正を加えてもよい。
【０１７３】
補正とは、前記領域から出た時の所定の回転量が、最小もしくは0もしくは無効としたときの値と同じになるようにすることとする。前記補正の一例は、前記回転量に応じたベクトルと前記領域の境界との交点から前記回転量に応じたベクトルの終点へのベクトルに応じた回転量とする。
【０１７４】
一例を以下に示す。
説明のため、任意の2つの回転軸の回転量をそれぞれa,bで表し、前記ベクトルを(a,b)と表す。
前記無効とする領域を半径rの円とすると、点(a,b)が前記円の内部であれば、回転量a,bを無効として扱う。領域の形は円によらず、例えば楕円や多角形であってもよい。
【０１７５】
点(a,b)が前記領域境界上のときは、回転量が、最小もしくは0もしくは無効としたときの値とし、前記領域外の点(a,b)については、そこから回転量が変化するようにする。
【０１７６】
前記補正に関して説明する。
例えば、図18の例では、ベクトル(a,b)の大きさをrだけ減少させるような補正を行う。新たな回転量、回転量に応じた数値をそれぞれjoy_a,joy_bと表すとき、
joy_a=a-r*cos(theta),joy_b=b-r*sin(theta),cos(theta)=b/(sqrt(a*a+b*b)), sin(theta)=b/(sqrt(a*a+b*b))とする。
【０１７７】
前記回転量を無効とし所定の値にする、もしくは無視する範囲に関する、第三の例を説明する。
複数の回転軸における回転量に応じたベクトル関して、各回転量を無効とする前記ベクトルの任意の領域をそれぞれ設定する。さらに必要に応じて任意の領域Xを設定する。
【０１７８】
いずれかの回転量が有効の場合は、他の回転量が無効となっている場合でも無効として扱わずに、無効のときの所定の回転量となっているものとして扱ってよい。
各回転量に関して、回転量を無効とする領域外では、前記ベクトルの示す点に最も近い領域X内の点から、前記ベクトルの示す点からなるベクトルの対応する成分に応じた回転量とする。
【０１７９】
より具体的な説明を述べる。説明のため、任意の2つの回転軸の回転量をそれぞれa,bで表し、前記回転量に応じたベクトルを(a,b)と表す。
aとbの両方を無効とする任意の領域をAB、aまたはbのみを無効とする任意の領域をそれぞれA、Bとし、それら任意組み合わせからなる領域を設定する。さらに必要に応じて、任意の領域Xを設定する。
【０１８０】
いずれかの回転量が有効の場合は、他の回転量が無効となっている場合でも無効として扱わずに、無効のときの所定の回転量となっているものとして扱ってよい。
【０１８１】
図19をもとに動作例を説明してゆく。ここで領域AとBはそれぞれ幅がWa,Wbの無限遠の領域と考え、領域XはAとBの重なる領域とする。曲線部は、Xの角を中心とした半径rの円の4分の1とする。これはあくまで一例であり、例えば曲線部は楕円でも直線でもそれらの組み合わせであってもよい。
【０１８２】
回転量aを無効とする領域外では、aを点(a,b)と、点(a,b)と最も近い領域X内の点(図19のP(例1,例2))からなるベクトルのaに対応する成分に応じた値とする。回転量bに関しても同様に、回転量bを無効とする領域外では、bを点(a,b)と、点(a,b)と最も近い領域X内の点からなるベクトルのbに対応する成分に応じた値とする。
【０１８３】
前記回転量を無効とし所定の値にする、もしくは無視する範囲に関する、第四の例について説明する。前記第三の例での処理を基本とする。回転量のいずれかが有効となったときの前記領域X内の、回転量からなるベクトルの示す点に最も近い点Pと、前記回転量からなるベクトルの示す点からなるベクトルの各成分に応じて回転量を決定する。
【０１８４】
また、このとき点Pを基準とした任意の領域Yを定め、前記無効とする領域によらず、回転量からなるベクトルの示す点が前記領域Y内となるまで有効としてもよい。
【０１８５】
更に、各回転量について、無効とする領域をそれぞれ、有効である間、点Pを基準として新たに設定してもよい。この領域に関しても、前記回転量の補正を施すものとする。
【０１８６】
あるいは、前記回転量を無効とし所定の値にする、もしくは無視する範囲に関する、第二から第三の例いずれかの各領域を、すべての回転量、もしくは少なくとも一つの回転量が有効である間、再設定する。このとき、前記第二から第三の例のいずれかに準じた処理を行う。すべての回転量、もしくは任意の回転軸の回転量が無効となったとき元に戻す。
【０１８７】
より具体的な例を図19と図20の場合を例に説明する。任意の2つの回転軸の回転量aとbのいずれかが有効となったときの前記領域X内の点(a,b)に最も近い点をPと、点(a,b)からなるベクトルの各成分に応じて回転量を決定する。
【０１８８】
このとき、前記領域Yを、点Pを中心とする半径r2の円とする。
【０１８９】
または、図19の領域を、点Pが中心となるように設定しなおす。このとき、点(a,b)が再設定によって無効領域とならないように領域を変更する。
【０１９０】
具体的な再設定の例では、図20のように図19の領域AとBの幅を変更する。
このとき、中心が点Pに一致するように設定しなおす。
あるいは、点(a,b)が前記無効領域の境界上となり、点Pが前記領域Xの境界上となるように設定しなおす。このとき、前記領域は任意に変化させてもよく、例えば、前記幅を無くしてもよい(図20 (3))。
これらの変更は、前記有効となったときの点(a,b)に応じて変化させてもよい。一例では、点(a,b)が前記領域A,B内となる場合は、前記領域A,Bの幅を0とせず、それ以外の、本例では点Pが領域Xの角となるような点(a,b)では、前記幅を0として領域A,Bをなくすものとしてもよい。
【０１９１】
ここまでの回転量に関する処理では、当然最大値最小値を設定し、これらの範囲を超えないように制御してもよい。補正した回転量を回転量に応じて決定する数値として考えてもよい。
【０１９２】
また、前記補正によって、回転量が0以外の値から変化するようにしてもよい。例えば、前記無効とする領域から出たときの回転量の初期値を10として、そこからデバイスの回転に応じて連続的に変化するようにしてもよい。前記初期値は、デバイスの回転に応じて決定してもよい。
【０１９３】
以上の処理を行うことによって、前記第二の例では、前記回転量が有効になったときの回転量をより細かく決めることが可能となる。例えば、2つの回転量からベクトルを決定するようなとき、前記回転を有効としたときに斜め方向のベクトルをとることを容易とする。
前記第三と第四の例では、2つの回転量を扱うとき、上記に加えて、片方の回転量を0にするような入力を行うことを容易とする。
【０１９４】
また、前記領域の設定によっては、前記回転量を有効にするための条件と無効とするための条件とに差をつけることができるので、より快適な操作を提供することが可能となる。
【符号の説明】
【０１９５】
1            デバイスを保持する手
2            親指
3            デバイスを保持していない手
11          左手の親指
12          右手の親指
20          回転の基準値
21          入力を有効にするための閾値
22          入力を有効にするための閾値
23          回転の最大値
24          回転の最大値
25          回転量
60          タブレットデバイス
61          Dx軸
62          Dy軸
63          Dz軸
64          x軸
65          y軸
66          z軸
67          x0軸
68          y0軸
69          z0軸
70          移動方向を示す表示
80          基準姿勢リセットボタン
81          カメラ操作領域
82          ボタン
83          タッチジェスチャ領域
100       CPU
101       主記憶
102       補助記憶
103       入力部
104       傾き算出手段
105       タッチ入力手段
106       表示部
130       照準
131       照準移動領域
132       ディスプレイ
【図１】
2018163132.tif 000003
【図２】
2018163132.tif 000004
【図３】
2018163132.tif 000005
【図４】
2018163132.tif 000006
【図５】
2018163132.tif 000007
【図６】
2018163132.tif 000008
【図７】
2018163132.tif 000009
【図８】
2018163132.tif 000010
【図９】
2018163132.tif 000011
【図１０】
2018163132.tif 000012
【図１１】
2018163132.tif 000013
【図１２】
2018163132.tif 000014
【図１３】
2018163132.tif 000015
【図１４】
2018163132.tif 000016
【図１５】
2018163132.tif 000017
【図１６】
2018163132.tif 000018
【図１７】
2018163132.tif 000019
【図１８】
2018163132.tif 000020
【図１９】
2018163132.tif 000021
【図２０】
2018163132.tif 000022