3人称視点、1人称視点、トランジションなどのゲームカメラを管理するために使用される Unityのアセット。35ドル。購入しました。
ドキュメントが英語PDFなので、日本語翻訳したものをメモ。覚書。
・MotionControllerのドキュメント和訳はこちら
・ActorControllerのドキュメント和訳はこちら
カスタムクイックスタート
このクイックスタートでは、プロジェクトがあり、Camera Controllerを使用してカメラを管理することを想定しています。
1. Unity 5プロジェクトを開きます。
2. Camera Controllerアセットをダウンロードしてインポートします。
3.シーンのルートに新しいGameObjectを追加します。
4.「Camera Controller」コンポーネントを新しいGameObjectに追加します。
[コンポーネント| ootii | カメラリグ| カメラコントローラーのメニューアイテム。
5.カメラのスタイルを選択します


概要
Camera Controllerは、Adventure Cameraが実行したことすべてを実行します。
AAA品質の3人称カメラであることに加えて、カメラコントローラーは1人称カメラ、MOBAカメラ、カットシーンカメラなどでもあります。
カスタマイズ可能な「モーター」を使用して、カメラコントローラーはシーンカメラを駆動して、プレイヤーにスムーズで機能豊富なエクスペリエンスを作成します。
モーターを有効または無効にすることで、Camera Controllerは3Dゲームに適合します。
私の他の資産と同様に、Camera Controllerは拡張できるように構築されています。
すぐに使用できるモーターの使用に加えて、カメラの位置と回転を管理するための独自のモーターを作成できます。
次に、トランジションモーターを使用して、異なるカメラモーターをブレンドできます。
前書き
カメラコントローラーは、いくつかの異なる部分で構成されています。
これらの部品がどのように組み合わされるかを理解することで、アセットの使用と拡張がはるかに簡単になります。
Camera Controller
これは、カメラモーターのメインコンポーネントおよびマネージャーです。
カメラコントローラーはエディターGUIを処理しませんが、モーターが想定どおりに動作することも確認します。
衝突検出や視野ズームなどのコア機能は、モーターではなくカメラコントローラーで実行されます。
Camera Controllerには、BasicとAdvancedの2つのビューがあります。
基本ビューは、デフォルト値を使用したクイックセットアップに使用されます。
基本的なビューでは、ボンネットの下にカメラモーターが追加されます。
次に、これらのモーターにデフォルト値を設定して、選択した動作を作成します。
詳細表示では、カメラのモーターに直接アクセスできます。
ここで、値を変更したり、モーターを追加したりできます。
Input Sources
全員が同じ入力ソリューションを使用した場合、これは必要ありません。
ただし、Unityのネイティブ入力ソリューションを使用する人、Easy Inputを好む人、Asset Storeにある他のアセットを使用する人もいます。
つまり、入力を取得する一般的な方法が必要であるため、モーションを1回コーディングして、任意のソリューションからユーザー入力を取得できます。 それが入力ソースです。入力を取得する一般的な方法。好みの入力ソリューションを「input source」にラップすることにより、MCとモーション自体が入力ソースを使用して、選択された入力ソリューション。
カメラコントローラーには、Unityのネイティブソリューションを使用してユーザー入力を取得する方法を知っている「Unity Input Source」が含まれています。
Easy Inputには「Easy Input Source」が含まれており、必要に応じて他の「Input Sources」を作成して、お気に入りのソリューションを操作できます。

アクションエイリアス/Action Aliases
モーター全体で、「アクションエイリアス」を使用して、入力が発生したかどうか、モーターを起動するタイミングかどうかを確認します。
アクションエイリアスは、キープレスまたは入力条件に付けられるわかりやすい名前であり、その仕組みを理解せずに問い合わせることができます。
例を見てみましょう…

モーターはこの値を使用して、アンカーとともにアンカーを回転させる必要があるかどうかを確認します。
カメラ:
bool lShouldRotate = InputSource.IsJustPressed(“Camera Rotate Character”);
モーターは、入力がどのように処理されたかをあまり気にしません。
trueまたはfalseの値が返されることに注意してください。
これは、Unityが入力システムで行うこととまったく同じです(上記を参照)。
Camera Motors/カメラモーター
カメラモーターは、入力または環境に基づいてカメラを移動および回転させます。
カメラコントローラーには、7つのモーターが組み込まれています。
1st Person View(一人称視点)
モーターは一人称視点のゲームに使用され、プレイヤーの目を表します。3rd Person Fixed(3人称固定)
3人称ゲームで使用すると、モーターはポールでプレイヤーに取り付けられているように動きます。このモーターは、3人称シューティングゲームに最適です。
3rd Person Follow –(3人称フォロー)
3人称ゲームで使用され、ロープで取り付けられているようにプレーヤーの後ろにドラッグします。このモーターは、現代の3人称アドベンチャーゲームを模倣しています。Fixed Motor(固定モーター)
このモーターの位置と回転は固定されています。Spline Motor(スプラインモーター)
経路を設定でき、モーターは経路をたどります。これはカットシーンに最適ですが、動きを終えたり、ゲーム内で視覚的な手がかりを提供したりします。Top Down View(トップダウンビュー)
最新のMOBAや戦略ゲームで見られるようなカメラの動きを提供します。 このモーターはトップダウンエクスペリエンスを提供し、ディアブロスタイルのゲームにも使用できます。Transition Motor(移行モーター)
このモーターを使用すると、あるモーターから別のモーターにブレンドできます。 ユーザー入力、カットシーンなどに基づいてさまざまなビューを作成するのに最適です。衝突
カメラコントローラーは、衝突処理に「視線」の障害を使用します。
つまり、衝突は物理オブジェクトのようには処理されません。
これにはいくつかの理由があります。
1.典型的な物理オブジェクトでは、キューブはカメラの球体コライダーをキャラクターまたはアンカーから非常に遠くに押し出すことができます。
典型的な物理的衝突を許可した場合、プレーヤーはカメラの制御を失います。



カメラは安全な場所がない状況に対処するために最善を尽くしますが、奇妙な状況を防ぐことが最善です。

デバッグ
カメラコントローラーは、ランタイム中にアンカーとオフセットが画像にどのように適合するかを示すデバッグモードをサポートしています。
オフセットを理解することが重要であり、モーターとモーターのプロパティで詳細を確認できます。ただし、デバッグを有効にするには、次の手順を実行します。
1.「Graphics Manager」スクリプトをシーンの「Main Camera」に追加します。



カメラコントローラーのセットアップ/Camera Controller Setup
クイックセットアップの手順に従うと、カメラコントローラーが新しいGameObjectに追加されます。
カメラコントローラーをキャラクターの子として追加することは絶対にしないでください(一人称設定の場合でも)。
クイックセットアップの後、階層は次のようになります。

メインカメラのGameObjectをレンズと考えてください。 その変換は次のように見える必要があります。

次に、必要に応じて入力ソースとアンカーのプロパティを設定します。
入力ソースは、カメラコントローラーがキーを押す、マウスを動かすなどのユーザー入力を取得する方法です。
アンカーは、カメラが追従しているオブジェクトです。 通常、これはあなたのキャラクターです。
Force Update
通常、このプロパティはユーザーが直接設定するものではありません。
このプロパティは、カメラが独自の更新サイクルを実行するか、ootiiキャラクターコントローラーからの更新サイクルを使用するかを決定します。
ootiiキャラクターコントローラーを使用している場合、このチェックボックスはオフになります。そうでない場合は、確認する必要があります。
この区別の理由は、カメラをキャラクターコントローラーの後に走らせたいからです。
ootiiキャラクターコントローラーを使用する場合、それを保証する別の更新サイクルを実行します。
Key Properties
Camera Controllerには、設定が必要ないくつかの重要なプロパティがあります。

Input Source
これは、マウス、キーボード、またはコントローラーから入力を取得する方法です。カメラが回転、ズームなどのタイミングを決定するために使用する入力ソースを設定します。
Force Update
通常、このプロパティはユーザーが直接設定するものではありません。このプロパティは、カメラが独自の更新サイクルを実行するか、ootiiキャラクターコントローラーからの更新サイクルを使用するかを決定します。
ootiiキャラクターコントローラーを使用している場合、このチェックボックスはオフになります。
そうでない場合は、確認する必要があります。
この区別の理由は、カメラをキャラクターコントローラーの後に走らせたいからです。 ootiiキャラクターコントローラーを使用する場合、それを保証する別の更新サイクルを実行します。
Anchor(アンカー)
これはカメラがフォローしているキャラクターです。 常にアンカーが必要なわけではありませんが、通常は必要です。Anchor Offset(アンカーオフセット)
通常、キャラクターのルートは足元にあります。 ほとんどのカメラは頭を追いかけたいと思っています。 したがって、このオフセットを使用して、カメラが追従する最終アンカーポイントを表すことができます。一部のモーターは異なるオフセットを使用する場合があることに注意してください。 これらの場合、モーター固有のプロパティがあります。 ただし、これらのオフセットでさえ、ここで設定したアンカー+アンカーオフセットに基づきます。
Invert Pitch(反転ピッチ)
このオプションは、入力からヨーおよびピッチするすべてのモーターの反転を設定するグローバルな方法を提供します。Camera Styles/カメラスタイル
[基本]ビューの[カメラスタイル]セクションは、クイックセットアップを支援するためのものです。
必要なモーターを追加し、プロパティを設定し、開始を支援します。
スタイルが設定されたら、モーターのプロパティを微調整して、カメラを希望どおりに動作させることができます。
一人称スタイルは、標準の一人称カメラの動作を設定します。
3人称スタイルは、標準的な3人称カメラの動作を設定します。
MOB Styleは、標準のトップダウンカメラの動作を設定します。
Options/オプション
基本的なカメラスタイルを選択すると、スタイル固有のオプションが表示されます。
繰り返しますが、これらは簡単なセットアップのためだけであり、最終的にはモーターのプロパティを直接変更します。
基本ビューを使用してカメラをセットアップするか、直接詳細ビューに移動できます。
Camera Motors/カメラモーター カメラモーターリストは、ほとんどのプロパティを管理する場所です。
ここでは、必要に応じてモーターを追加および削除します。
モータータイプが異なるプロパティで複数回追加される場合があります。
これにより、すべてのスタイルのゲームプレイをセットアップできます。
衝突特性/Collision Properties
衝突プロパティは、個々のモーターではなく、カメラコントローラー自体によって管理されます。そのため、これらのプロパティはモーターリストの外にあります。 このカメラは、視線を遮るアプローチを採用しています。このように、オブジェクトがカメラとアンカーの間に来た場合、ビューがブロックされないように、カメラはアンカーの近くに移動します。これは、カメラの周りに球体を置くだけの従来の衝突検出とは少し異なります。このアプローチは、AAAゲームで見られるものを模倣しています。

衝突を有効または無効にします
Collision Layers(コリジョンレイヤー)
カメラが衝突するGameObjectレイヤー。
Radius(半径)
この半径は、衝突テスト領域のサイズを表します。
半径は、クリッププレーンの近くでカメラを覆うのに十分な大きさであることが重要です。 そうでない場合、近くのクリッププレーンが壁や他のオブジェクトを貫通する可能性があるため、クリッピングが発生する可能性があります。
Min Distance(最小距離)
カメラが取得できるアンカーまでの最小距離。 場合によっては、衝突があったとしても、カメラをアンカーに直接乗せたくない場合があります。 ここでその距離を設定できます。
Recovery Speed(リカバリー速度)
ビューが遮られると、カメラはアンカーに近づきます。 ビューが遮られなくなった場合、「ポップ」する必要はありません。 代わりに、この速度を使用して、カメラを通常の位置にゆっくりとスムーズに戻すことができます。
ズームプロパティ/Zoom Properties
カメラコントローラーは、ズームインに標準的な視野アプローチを使用します。
このアプローチは、望遠鏡がカメラをターゲットに近づけないため、望遠鏡がどのように機能するかに似ていますが、代わりにレンズが視野を変えて視野を拡大します。
このアプローチは、カメラを動かさない場合うまく機能します。
カメラを前方に移動すると、キャラクターとカメラの間に障害物が来る危険があります。

ズームできるかどうかを決定します。
Zoom Action Alias
ズームインおよびズームアウトに使用する入力エイリアス。 デフォルトでは、「カメラズーム」はマウスホイールに関連付けられています。
Range
最小視野(最大ズーム)および最大視野を決定します。 通常、最大値はデフォルトの視野です。 値を0に設定すると、ゲームの読み込み時に自動的に設定されます。
Speed
ズームインとズームアウトの速度を決定します。
フェードプロパティ/Fade Properties
フェードプロパティを使用すると、カメラがキャラクターに近すぎると、キャラクターがフェードアウトして見えなくなります。
フェード速度が終了すると、レンダラーを無効にして、キャラクターメッシュがレンダリングされないようにすることができます。
メッシュは、透明なマテリアルが関連付けられている場合にのみ「優雅にフェードイン」することに注意してください。 マテリアルが不透明な場合、メッシュはフェードできません。 ただし、レンダラーを無効にすることはできます。

フェードが発生するかどうかを決定します。
Fade Distance
フェードが発生する距離です。
Fade Speed
アルファ値がフェードインおよびフェードアウトするまでの変化の速さを示す速度(秒単位)。
Disable Renderers
フェードアウトが完了したら、レンダラーを無効にするかどうかを決定します。
シェイクのプロパティ/Shake Properties
カメラの振動は、カメラコントローラーコンポーネントの関数を呼び出すことにより、コードを介して行われます。
Camera Controllerへの参照を取得することにより、次の呼び出しを行うことができます。
mCameraController.Shake(0.02f、1f、0.5f、1f);
「Shake」機能には次のシグネチャがあります。
・範囲–ランダムな動きが中心からどれだけ離れているか。
・強度X – X軸の動きの乗数(左/右)。
・強度Y – y軸の動きの乗数(上/下)。
・継続時間-シェイクする時間(秒単位)。
プロパティでは、おそらく振動強度曲線に気づいたでしょう。 この曲線を使用すると、揺れの持続時間にわたって適用される強度(または乗数)を指定できます。 曲線が設定されていない場合(フロート0を意味します)、それを基本曲線に変換します。

曲線を変更して、より急激な揺れを作成できます。
モーターとモーターのプロパティ
各モーターは、さまざまな方法でカメラを制御します。カメラに関連付けられたプロパティは、モーターの動作を定義するのに役立ちます。
とはいえ、ほとんどすべてのモーターに共通するプロパティがいくつかあります。

カメラモーターに設定できる名前。
これは、コードでカメラモーターを検索する場合に便利です。
Enabled
モーターを起動できるかどうかを決定します。
Use Rig Anchor
通常、カメラコントローラーのアンカーとアンカーオフセットプロパティを使用します。これらはすべてのモーターに対してグローバルに設定されています。
ただし、このプロパティのチェックを外すと、このモーターのカスタムアンカーとアンカーオフセットを設定できます。
Offsets
「Anchor Offset(アンカーオフセット)」に加えて、このモーターに固有のオフセットを設定できます。
Offsets/オフセット
このカメラのモーターの高度な機能の1つは、アンカー+アンカーオフセットからのオフセット機能です。
これは、真のAAA 3人称カメラの動作を可能にするため重要です。
このグラフィックは、さまざまなアンカープロパティとオフセットプロパティを明確にするのに役立ちます。

Offset= {-1.0、0、0}
トゥームレイダーの例
下の画像は同じシーンのララを示していますが、カメラは彼女の周りを回っています。 白い線は画面の中心です。 カメラがララのすぐ後ろにないことが簡単にわかります。 代わりに、オフセットがあります。


衝突とフェージング/Collisions and Fading
前述のように、マスターコリジョンフラグとフェージングフラグはカメラコントローラーで設定されますが、各モーターには、特定のモーターで機能を有効にするかどうかを決定するフラグもあります。

[Set Fade Renderers]チェックボックスをオンにすると、レンダラーリストが表示されます。
ここで、どのトランスフォームのレンダラーがフェードインおよびフェードアウトするかを正確に指定できます。
カメラごとにフェードする特定のレンダラーを指定すると便利です。
ただし、3人称カメラと1人称カメラを混在させようとしている場合は、キャラクターに特定の2つのモデルが必要になる可能性があります。
一人称視点モーター/1st Person View Motor
一人称モーターは、従来の一人称ゲームを模倣しています。
キャラクターの(アンカー)の目であるかのようにカメラを回転させることができます。
Yaw は、キャラクターの上軸を中心とした回転です。
Pitch は、カメラの右軸を中心とした回転です。
Speed カメラが軸を中心に回転する速度を決定します。
Range カメラが各軸を周回できる距離の制限を設定します。ヨーの場合、-180および180を使用すると、制限がなくなります。
ピッチについては、カメラが上下逆さまにならないように常に制限があります。
Invert ピッチの反応が異なるように、垂直入力値を反転します。
Smoothing より滑らかな回転を作成するために、軌道に速度ベースのスムージングを提供します。適切な値は0〜0.3です。
Anchor Rotates キャラクターコントローラーがキャラクター(アンカー)を回転させるかどうかを決定するために使用されます。その場合、同期を保つために後処理を行う必要があります。
Rotate Anchor ヨーに合わせてアンカーを回転させるかどうかを決定します。
Rotate Anchor Alias アンカーの回転が発生するかどうかを決定する入力エイリアス。
この方法では、右マウスボタンのようなものが押された場合にのみ回転します。
通常、この値を空白のままにしておくと、Rainbow Sixのようなゲームを模倣するので、常にカメラでキャラクターを回転させることができます。
モーションコントローラーを使用している場合…
このモーターでウォークランストラフェモーションを使用します。
3人称フォローモーター/3rd Person Follow Motor
3人目は、Tomb RaiderやShadows of MordorなどのAAAアドベンチャーゲームのカメラに似たカメラの動作を追跡します。
カメラは、ロープで固定されているかのように、キャラクター(アンカー)の後ろにドラッグします。
これは、キャラクターがカメラの周りを回転できることを意味します。
Yawは、キャラクターの上軸を中心とした回転です。
Pitch は、カメラの右軸を中心とした回転です。
Speedカメラが軸を中心に回転する速度を決定します。
Range カメラが各軸を周回できる距離の制限を設定します。
ヨーの場合、-180および180を使用すると、制限がなくなります。
ピッチについては、カメラが上下逆さまにならないように常に制限があります。
Invertピッチの反応が異なるように、垂直入力値を反転します。
Smoothing より滑らかな回転を作成するために、軌道に速度ベースのスムージングを提供します。 適切な値は0〜0.3です。
Distanceカメラの焦点からの望ましい距離。
サードパーソン固定モーター/3rd Person Fixed Motor
サードパーソンフォローと同様に、このカメラは、サードパーソンシューティングゲームやホルダーアドベンチャーゲームで見られるようなAAAエクスペリエンスを提供します。
このモーターを使用すると、カメラはキャラクター(アンカー)の後ろに移動します。
まるで金属製のポールに取り付けられているかのようです。
これは、キャラクターが左または右をストラフするときに、カメラが回転する代わりにストラフすることを意味します。
Yawは、キャラクターの上軸を中心とした回転です。
Pitchは、カメラの右軸を中心とした回転です。
Speedカメラが軸を中心に回転する速度を決定します。
Range カメラが各軸を周回できる距離の制限を設定します。
ヨーの場合、-180および180を使用すると、制限がなくなります。
ピッチについては、カメラが上下逆さまにならないように常に制限があります。
Invertピッチの反応が異なるように、垂直入力値を反転します。
Smoothingより滑らかな回転を作成するために、軌道に速度ベースのスムージングを提供します。適切な値は0〜0.3です。
Distanceカメラの焦点からの望ましい距離。
Rotate Anchorヨーに合わせてアンカーを回転させるかどうかを決定します。
Rotate Anchor Alias アンカーの回転が発生するかどうかを決定する入力エイリアス。この方法では、右マウスボタンのようなものが押された場合にのみ回転します。
固定モーター/Fixed Motor
このモーターは、最も単純なモーターの1つです。 カメラの固定位置と回転を提供するだけです。
Position Offset アンカーおよびアンカーオフセットからのオフセット。
Rotation Offset アンカーの回転からのオフセット。
スプラインモーター/Spline Motor
スプラインモーターは、パスをたどるカメラを作成するために使用されます。 有効にすると、カメラは指定された経路に沿って移動し、別のモーターに移行するか、単にループを継続します。
Path パスであるSplineオブジェクトを含むGameObject。
Auto Start モーターが作動するとすぐにカメラがパス上で動き始めるかどうかを決定します。
Speed カメラが移動する1秒あたりの単位。
Look To Anchor 移動するときに常にアンカーに面するようにカメラを回転させるかどうかを決定します。
Look To Path カメラが常に移動方向に向くように回転するかどうかを決定します。
Loop 完了後にカメラがパスを再開するかどうかを決定します。
Activate End Motor パスが完了したときに新しいモーターをアクティブにするかどうかを決定します。
Index Activate End Motorがチェックされているときにアクティブにするモーターのインデックス。
トップダウンビューモーター/Top-Down View Motor
このモーターは、MOBAs、戦略ゲーム、およびディアブロのようなトップダウンアクションゲームに使用されます。 「世界観」を提供し、さまざまな方法でパンできます。
Min Bounds-カメラが移動できる最小の世界境界。
Max Bounds-カメラが移動できる最大の世界境界。
アンカーフォロー/Anchor Following
Follow Anchor-カメラがアンカーにロックするかどうかを決定します。
Action Alias-設定すると、カメラがキャラクター(アンカー)にロックされるかどうかを決定する入力エイリアス。
V. Distance(アンカー)からカメラがとどまる垂直距離。
Use View Direction –-カメラがアンカーに焦点を合わせるためにカメラの角度を使用するか、カメラの位置がアンカーの位置と一致するかを決定します。
Allow Disconnecting-別の形式のパンを使用するときに、アンカーの追跡を無効にするかどうかを決定します。
Grip Panning
グリップパンは、地形をクリックしてドラッグすると発生します。実際には、地形が引っ張られているように見えても、カメラは動いています。
Action Alias–パンが発生するかどうかを決定するために使用される入力エイリアス。通常、これはマウスの左ボタンに関連付けられています。
Speed-グリップをパンするときにカメラが移動する1秒あたりの単位。
Edge Panning
マウスカーソルが画面の端に移動すると、エッジパンが発生します。端に近づくと、カメラはその方向に移動します。
Border –パンを開始するためにマウスが必要とするエッジからのピクセル数。
Speed –エッジパン時にカメラが移動する1秒あたりの単位。
Input Panning
これは、特定のキーが押されたときに発生します。 通常、これはWASDまたは矢印キーです。
Forward, Back, Left, Right Alias -方向のパンが発生するかどうかを決定する入力エイリアス。
Speed-入力パンニング時にカメラが移動する1秒あたりの単位。
トランジションモーター/Transition Motor
移行モーターは、あるモーターから別のモーターにカメラをスムーズに移動するために使用されます。
これは、プレイヤーがキャラクターを制御したり、ゲームの途中でカメラスタイルを変更したりすることで終わるカットシーンを持つのに最適です。
このモーターは、最初の2、3のプロパティが与えられると、自己作動する唯一のモーターです。
Action Alias –アクティブ化をトリガーする入力エイリアス。
Input Type–キーダウンまたはキーアップでアクティベーションを行うかどうかを決定します。
Only In Start –「Start」モーターがアクティブなモーターである場合にのみ、起動のモーターテストを行うかどうかを決定します。
Start Index–移行用の「開始」モーターのインデックス。
End Index –遷移の「終了」モーターのインデックス。
Transition Time-移行にかかる秒数。
他のすべてのモーターと同様に、一度に複数の移行モーターをセットアップできます。 これにより、さまざまなカメラのセットアップがあり、異なる時間にそれらに移行できます。
スプライン/Splines
スプラインは、点と接線を使用して作成される単なるパスです。
Bezier SplineコンポーネントをGameObjectに追加することにより、パスを作成できます。

これは、スプラインが「ループ」に設定されているためです。
したがって、最初のポイントと最後のポイントは同じ位置を共有します。
ポイントをクリックして選択し、必要に応じて移動できます。
ポイントを選択した状態で、「Insert Point」を押して、選択したものの前のポイント。
接線をクリックして移動すると、パスの形状を変更できます。