ゲームコントロール
ゲームコントロールを使うと、オブジェクトを、見る人が操作できるキャラクターにできます。歩く、飛ぶ、見下ろし型のマップを動き回る、といった動きに対応します。このページでは、設定の手順と各設定の役割を説明します。
必要なもの
- キャラクター:Game controls トリガーを持つオブジェクト。
- 上に立てる固い足場:リジッドボディとコライダーを持つ床。
- カメラ(なくてもかまいません):選ばない場合は、組み込みのカメラが使われます。
ゲームコントロールを追加する
ゲームコントロールは、ステップではなくトリガーです。コントローラーの設定はすべてトリガーの中にあります。
- キャラクターにしたいオブジェクトを選択します。
- インスペクターで + new component をクリックし、Events を選びます。
- + add event をクリックします。
- トリガーを Game controls に設定します。
- 下で説明する設定を調整します。
- 必要に応じて、On idle、On move、On run、On jump の各ブランチにステップを追加し、キャラクターの動作に反応させます。例えば、アニメーションを再生できます。
コントローラーは、そのオブジェクトがオンの間だけ存在します。オブジェクトをオフにするとコントローラーはなくなり、もう一度オンにすると戻ってきます。
移動
| 設定 | 制御する内容 |
|---|---|
| Movement | Walk、Fly、Top down のいずれか |
| Towards | 「前」の基準。Camera が向いている方向か、シーン自体の Axis か |
| Pos. Speed · Run Factor | 秒速何メートルで動くか。また、Shift を押している間に走るとどれだけ速くなるか |
| Pos. Delay | 最高速度に達するまでと、止まるまでにかかる時間 |
| Auto-orient · Rot. Speed | 進む方向にキャラクターが向きを変えるかどうかと、その速さ |
| Keys | WASD、矢印キー、またはその両方 |
| Jump | ジャンプの高さ(メートル)。0 にするとジャンプしません |
| Air Control | ジャンプ中に、見る人がどれだけ向きを操作できるか |
| Rst Y-offset | キャラクターが開始位置からこの距離だけ下に落ちると、元の位置に戻されます |
| Click to move | 見る人がタップした地点まで歩きます |
| Rotate By | 視点をマウス、キー、またはその両方で回します |
例えば 0.5 秒に設定したとします。キャラクターは 0.5 秒で最高速度に達します。坂、段差、質量はどれも動きを遅くするので、動きに物理的な手ごたえが出ます。
0 は「できるだけ速く」という意味です。ほぼ一瞬ですが、キャラクターには質量があるので、完全に一瞬ではありません。
ボディ
コントローラーは、オブジェクトにカプセル形状を持たせます。そのため、キャラクターはワールドをすり抜けず、ものにぶつかります。
| 設定 | 制御する内容 |
|---|---|
| Collider | Capsule または Sphere |
| Size | 半径と高さ(メートル) |
| Position | オブジェクトを基準に、カプセルの位置をずらします |
| Mass | キャラクターが押す力の強さと、押されたときの動きにくさ |
| Helper | エディターでカプセルを表示します |
オブジェクトにすでにリジッドボディがある場合、コントローラーはそれをそのまま使い、その質量で操作します。ない場合は、コントローラーが自動で作ります。
床や壁がキャラクターを止めるのは、リジッドボディとコライダーを持っている場合だけです。それ以外のジオメトリは見た目だけのもので、キャラクターは通り抜けてしまいます。 → 物理
重力はスペースの設定で決まり、ジャンプの高さはその重力を基準に計算されます。ゲームコントロールのあるシーンでは、スペースで物理がオフになっていても、物理がオンになります。物理がなければ、何も動かないからです。
追従カメラ
| 設定 | 制御する内容 |
|---|---|
| Camera | キャラクターを追うカメラ。空のままにすると組み込みのカメラを使います |
| Orient To | 常にキャラクターを見る At target か、決まった角度を保つ Angle か |
| Pos. Delay · Rot. Delay | カメラがどれだけ遅れて追いかけるか(秒) |
| Up / Down · Left / Right | その方向に視点を回せるかどうか。Yes、No、Limit のいずれか |
| Limit | 視点を回せる範囲(度) |
最初のフレームで、カメラはキャラクターとの距離と角度を記憶し、それを保ちます。距離や高さを数値で入力する必要はありません。ビューポートで見た目がよい位置にカメラを置けば、その位置関係が保たれます。
カメラは次のように動きます。
- 動く前に、まずキャラクターのほうを向きます。キャラクターが少し横にずれても、カメラは回転するだけです。キャラクターがその範囲の端まで来てはじめて、カメラが移動します。キャラクターにぴったり固定したカメラよりも自然に感じられます。
- 遅れで変わるのは構図で、距離は変わりません。キャラクターが速く動いても、カメラが後ろに下がることはありません。下がると意図しないズームのように見え、酔いの原因にもなるからです。
- カメラはキャラクターの背後に回り込みます。キャラクターが動いていて、見る人が視点を回していないときです。Left / Right をロックするか、Top down を選ぶと、この動きはオフになります。
- 視界がさえぎられることはありません。カメラとキャラクターの間に何かが入ると、カメラは近づき、そのあとゆっくり元の距離に戻ります。0.5 メートルより近づくことはありません。
- マウスホイールでズームできます。設定した距離のおよそ 3 分の 1 から 2.5 倍まで変えられます。
コントローラーがカメラを動かしている間、そのカメラ自体の操作(オービット、フライ)は無視されます。そうしないと、毎フレーム両者が打ち消し合ってしまいます。
タッチ操作とゲームパッド
画面上のコントロールはタッチスクリーンでしか表示されないので、オンのままでかまいません。
| 設定 | 制御する内容 |
|---|---|
| Touch controls → Enable | スティックとジャンプボタンを表示します |
| Rotate By | シーン上を Drag して視点を回すか、2 本目の Joystick で回すか |
| Movement stick · Jump button | それぞれの位置を 3×3 のグリッドで指定します |
| Offset · Button Size | 画面の端からの距離と、大きさ(ピクセル) |
| Visibility | Hide でコントロールを隠します。スワイプで視点を回す操作はそのまま使えます |
ゲームパッドは設定なしで使えます。
- 左スティックで移動します。
- 右スティックで周りを見回します。
- A でジャンプします。
- バンパーとトリガーボタンで走ります。
キャラクターの動きに反応する
On idle、On move、On run、On jump の各ブランチは、キャラクターの動作が変わったときに実行されます。スクリプトとパッチも、同じ変化を同じタイミングで受け取ります。
- スクリプトでは、その変化を待ち受けられます。
- パッチでは、
on_game_controlノードにpulseとstateの出力があります。
そのため、足音はスクリプトで鳴らし、アニメーションはブランチで扱う、という分担をしても、両者はずれずに動きます。
コントローラーなしで追いかけさせる
プレイヤーを追いかける敵、ペット、カメラのターゲットなど、もっと単純なものには、Follow object、Look at object、Stop following ステップを使います。
これらのステップは、オブジェクトを直接動かします。そのため、すでに物理で動いているオブジェクトには使えません。その場合は、スクリプトからインパルスを加えて押してください。
次へ: UI カード — ボタン、メニュー、スコア表示を作ります。