ホーム » 「Unity」タグがついた投稿

タグアーカイブ: Unity

CorgiEngineを、2週間ぐらい使ってみての感想。

2Dアクションゲームのテンプレが、そのまま自分のものにできるのは美味しい。
誰かにオススメできるかどうか聞かれたら、人にもよるなぁという印象。
テンプレを改造してって形にするのが好きな人向け。
Unity標準の機能も知ってる必要もあるし、独自ルールを覚えなきゃいけない。
そこさえクリアできたら無双できるツール。と思った。

▲タイルマップとスプライトアニメーションはUnity標準の機能。
自分はその辺りの知識がなかったので、覚える必要があった。

CorgiEngineの情報があるところと覚書

2Dアクションゲームが作れるアセット。
2Dアクションの基本はだいたい網羅されてて、カスタマイズもできる。
いつもアセットストアの目立つところにあるので、きっと良いものに違いない。
気になって購入した。

今は、使い方を覚えようと情報集め中。
CorgiEngineの情報があるところメモしたよ。

◆公式ドキュメント

◆公式YouTube

◆CorgiEngine-1-とりあえず使ってみる/げんとめブログ

◆Corgi Engineを勉強中 Part.1〜最小のシーンを作る

◆Unity&CorgiEngineを使ったアクションゲーム作り ~アニメーションと当たり判定①~

◆Corgi EngineのNPCのAIを細かく砕く


とりあえずやってみたこと。

●MinimalLevelという最低限必要なものだけがあるシーンがあり、それをコピーする。
●キャラクターを追加するのは、任意のゲームオブジェクトに「Character」というコンポネートを追加。それをプレイヤーとして使いたい場合は、コンポネート内の「Autobuild Player Character」それ以外のAI(敵とかNPC)にしたい場合は、「Autobuild AI Character」を押す。
●色んな能力が追加されるので、いらないものを外したり、変更したりでオリジナルのキャラクターにしていく。
英語なのがネックなだけで、欲しい能力はチェックして、変更したい場合は数値をいじったり、いらないのは外すという素直な作りなので、理解しやすいと思う。

ジェットパックがいらないと思ったら「Character Jetpack」のチェックを外せばいけました。
デフォで2段ジャンプだったので1度でいいと思ったら、「Character Jump」の中の項目「Number Of Jumps」の数値を1に変更したらOKでした。
落下中ジャンプができてしまうのをできないようにしたいと思ったら、「Character Jump」の中の項目「Jump Restrictions」の選択タブを「Can Jamp On Ground」にしたらできた。


とりあえずやってみたのはここまで。
どんな機能があるのかは、学習中であります。

Unityリフト移動

Unityでつまずきやすいポイントのメモ。
移動するリフトに乗っても、プレイヤーは移動しない問題。
床だけが移動するリフトというのも面白いけど、一緒に動きたい場合は、
リフトに乗っている間だけ親子関係にするとよい。
子供のオブジェクトは、親の動きと同期する。

↓の記事が詳しく載っていました。
Unityで動く床を実装するときにハマる罠とその解決方法

これの応用で、接地している間だけ、リフトの形状を変えたり、動きを変えたりもできる。

タグの種類を増やしてって、リフトの種類も増やせる例を作ってみた。 コードは乗る側、タグはリフト側で設定。
void OnCollisionEnter(Collision col)
    {
        //接触した相手のタグが"LiftA"場合、その子供になる
        if (col.gameObject.tag == "LiftA")
        {
            transform.SetParent(col.transform);
        }

        //接触した相手のタグが"LiftB"場合、相手のサイズを変える
        if (col.gameObject.tag == "LiftB")
        {
            col.transform.localScale = new Vector3(20, 1, 5);
        }

     }

    void OnCollisionExit(Collision col)
    {
        //接触が終わったとき元に戻す
        if (col.gameObject.tag == "LiftA")
        {
            transform.SetParent(null);
        }

        if (col.gameObject.tag == "LiftB")
        {
            col.transform.localScale = new Vector3(5, 1, 5);
        }
    }
    

Unity覚書 二次配列のマップ

Unityで二次配列を使ってマップを作るやつ。よく忘れるのでメモ。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MAP : MonoBehaviour
{
    public GameObject kabe;
    public GameObject jimen;
    public GameObject st;


    int[,] map = new int[,] {

        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 
        { 1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1},
        { 1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1},
        { 1,0,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,1,0,1},
        { 1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1},
        { 1,0,1,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1},
        { 1,0,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1},
        { 1,0,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,1},
        { 1,0,1,1,1,1,1,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1},
        { 1,0,1,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1},
        { 1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,1,1,0,1,0,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1},
        { 1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1},
        { 1,0,0,0,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1},
        { 1,1,1,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1},
        { 1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1},
        { 1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1},
        { 1,0,0,0,0,1,0,0,0,0,0,0,1,1,2,1,1,1,1,1,0,0,0,1},
        { 1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1},
        { 1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1},
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},

    };


    // Start is called before the first frame update
    void Start()
    {
        
        for (int i= 0;i< 24; i++){
            for (int j = 0; j < 24; j++)
            {

                if (map[i,j] ==0) { Instantiate(jimen, new Vector3(i * 1, 0, j * 1), transform.rotation); }
                if (map[i,j] ==1) { Instantiate(kabe, new Vector3(i * 1, 1, j * 1), transform.rotation); }
                if (map[i, j]==2) { Instantiate(st, new Vector3(i * 1, 0, j * 1), transform.rotation); }
            }
        }
    }


    // Update is called once per frame
    void Update()
    {
        
    }
}

スチームチャレンジ77日目

「Third Person Controller Template」というアセットを購入しました。
近接戦闘のプリセットが色々と用意してくれてるやつです。
あんまりスクリプトをいじらずにインスペクター上で完結するように設計されてるので、プログラム苦手でデザインに注力したい自分には合ってると思いました。

少し前に購入した「Camera Controller 」は、きめの細かい動きはやってくれるものの、システム構築は各自で頑張ってねっていうスタイルだったので、とにかく楽をしたい自分には合わなかったかもしれない。とにかく楽したい。
「Camera Controller 」 のほうは違う機会に、やるかも。

Character Creator3で作成した、キャラクターも無事にセットアップできました。

スチームチャレンジ45日目

Spell Casting Motion Pack 」というアセットを購入した。
魔法を使うモーションと効果を、ノードベースで設定できる。

動画は、とりあえず「箱」を生み出す技のようなのを習作で作った。

こうれぐらいなら、自力で作れないこともないんだけれども、特筆すべき点は、モーション、エフェクト、効果音などの色んな要素を、すべてまとめて専用のエディッタで完結できることだ。

まあ・・・このアセットを使う前提として、 Motion Controller のアセットも事前に持っている必要があるし、 内容は、自力でできる範囲のことなので、オススメする程でもないかも。
買ってしまったものなので、有効活用したい。

制作期間、気が付いたらもう45日も経過しているな。
まだゲームらしい部分はできていないが、焦らないで頑張る。

スチームチャレンジ29日目

コインを配置して集めるということをやった。
どんなゲームにするにも、お金の概念はたいてい必要になってくるだろう。

キノコ君は、仮素材です。
キノコを主人公にゲームを作るわけではないです。
キノコを主人公にしないとも言ってない。
まだどうなるかわからない。

1月中は学習期間と割り切って、色々お勉強をしてました。
Unityの「ナビゲーションシステム」とか、 「 ProBuilder 」 とか。

今困ってるのは、人間の3Dモデルが調達できてないこと。
自分で作れたらいいんだけど、作らないで済むならそうしたい。


人間の3Dモデルを作成するツールは色々あって、色々試してはいる。
・makehuman
・MB-Lab
・VRoidStudio

どれも素晴らしいツールではあるんだけど、今回欲しいのは、フォトリアルで日本人っぽいのなので、ちょっと違う感じ。

Character Creator 3  というソフトが凄い良さそうではあるんだけど、
ちょっとお値段するから、検討中。悩む。

Camera Controllerドキュメント和訳

3人称視点、1人称視点、トランジションなどのゲームカメラを管理するために使用される Unityのアセット。35ドル。購入しました。
ドキュメントが英語PDFなので、日本語翻訳したものをメモ。覚書。

MotionControllerのドキュメント和訳はこちら
ActorControllerのドキュメント和訳はこちら


カスタムクイックスタート
このクイックスタートでは、プロジェクトがあり、Camera Controllerを使用してカメラを管理することを想定しています。
1. Unity 5プロジェクトを開きます。
2. Camera Controllerアセットをダウンロードしてインポートします。
3.シーンのルートに新しいGameObjectを追加します。
4.「Camera Controller」コンポーネントを新しいGameObjectに追加します。
[コンポーネント| ootii | カメラリグ| カメラコントローラーのメニューアイテム。
5.カメラのスタイルを選択します
6.カメラが追従するキャラクターを設定します。
7.必要に応じてオプションを設定します。
概要
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
モーター全体で、「アクションエイリアス」を使用して、入力が発生したかどうか、モーターを起動するタイミングかどうかを確認します。
アクションエイリアスは、キープレスまたは入力条件に付けられるわかりやすい名前であり、その仕組みを理解せずに問い合わせることができます。
例を見てみましょう…
3人称固定モーターには、デフォルト値が「Camera Rotate Character」であるアクションエイリアスプロパティがあります。
モーターはこの値を使用して、アンカーとともにアンカーを回転させる必要があるかどうかを確認します。

カメラ:
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.典型的な物理オブジェクトでは、キューブはカメラの球体コライダーをキャラクターまたはアンカーから非常に遠くに押し出すことができます。
典型的な物理的衝突を許可した場合、プレーヤーはカメラの制御を失います。
2.カメラとターゲットの間に物体が来た場合、実際に衝突が発生しない可能性があります。したがって、物理反応はありません。

最良の結果を得るには、キャラクターのコライダーがカメラの衝突半径よりも広いことを確認する必要があります。

この方法では、カメラテストが壁をスキミングし、距離全体にわたって無効な結果を返すような状況にはなりません。

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

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

1.「Graphics Manager」スクリプトをシーンの「Main Camera」に追加します。
2.デバッグアイコンの下の[Show Debug Info]チェックボックスをオンにします。
これを行うと、アンカー、オフセット、フォーカスポイントを視覚化できます。

カメラコントローラーのセットアップ/Camera Controller Setup
クイックセットアップの手順に従うと、カメラコントローラーが新しいGameObjectに追加されます。
カメラコントローラーをキャラクターの子として追加することは絶対にしないでください(一人称設定の場合でも)。
クイックセットアップの後、階層は次のようになります。
GameObjectを「Camera Rig」と名付けました。これは、メインカメラを動かすものだからです。 それがカメラコントローラーの追加対象です。
メインカメラの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ゲームで見られるものを模倣しています。
Is Colliding Enabled(衝突が有効)
衝突を有効または無効にします

Collision Layers(コリジョンレイヤー)
カメラが衝突するGameObjectレイヤー。

Radius(半径)
この半径は、衝突テスト領域のサイズを表します。
半径は、クリッププレーンの近くでカメラを覆うのに十分な大きさであることが重要です。 そうでない場合、近くのクリッププレーンが壁や他のオブジェクトを貫通する可能性があるため、クリッピングが発生する可能性があります。

Min Distance(最小距離)
カメラが取得できるアンカーまでの最小距離。 場合によっては、衝突があったとしても、カメラをアンカーに直接乗せたくない場合があります。 ここでその距離を設定できます。

Recovery Speed(リカバリー速度)
ビューが遮られると、カメラはアンカーに近づきます。 ビューが遮られなくなった場合、「ポップ」する必要はありません。 代わりに、この速度を使用して、カメラを通常の位置にゆっくりとスムーズに戻すことができます。


ズームプロパティ/Zoom Properties
カメラコントローラーは、ズームインに標準的な視野アプローチを使用します。
このアプローチは、望遠鏡がカメラをターゲットに近づけないため、望遠鏡がどのように機能するかに似ていますが、代わりにレンズが視野を変えて視野を拡大します。
このアプローチは、カメラを動かさない場合うまく機能します。
カメラを前方に移動すると、キャラクターとカメラの間に障害物が来る危険があります。
Is Zooming Enabled
ズームできるかどうかを決定します。

Zoom Action Alias
ズームインおよびズームアウトに使用する入力エイリアス。 デフォルトでは、「カメラズーム」はマウスホイールに関連付けられています。

Range
最小視野(最大ズーム)および最大視野を決定します。 通常、最大値はデフォルトの視野です。 値を0に設定すると、ゲームの読み込み時に自動的に設定されます。

Speed
ズームインとズームアウトの速度を決定します。


フェードプロパティ/Fade Properties
フェードプロパティを使用すると、カメラがキャラクターに近すぎると、キャラクターがフェードアウトして見えなくなります。

フェード速度が終了すると、レンダラーを無効にして、キャラクターメッシュがレンダリングされないようにすることができます。
メッシュは、透明なマテリアルが関連付けられている場合にのみ「優雅にフェードイン」することに注意してください。 マテリアルが不透明な場合、メッシュはフェードできません。 ただし、レンダラーを無効にすることはできます。
Is Fade Enabled
フェードが発生するかどうかを決定します。

Fade Distance
フェードが発生する距離です。

Fade Speed
アルファ値がフェードインおよびフェードアウトするまでの変化の速さを示す速度(秒単位)。

Disable Renderers
フェードアウトが完了したら、レンダラーを無効にするかどうかを決定します。


シェイクのプロパティ/Shake Properties
カメラの振動は、カメラコントローラーコンポーネントの関数を呼び出すことにより、コードを介して行われます。

Camera Controllerへの参照を取得することにより、次の呼び出しを行うことができます。
mCameraController.Shake(0.02f、1f、0.5f、1f);
「Shake」機能には次のシグネチャがあります。
・範囲–ランダムな動きが中心からどれだけ離れているか。
・強度X – X軸の動きの乗数(左/右)。
・強度Y – y軸の動きの乗数(上/下)。
・継続時間-シェイクする時間(秒単位)。

プロパティでは、おそらく振動強度曲線に気づいたでしょう。 この曲線を使用すると、揺れの持続時間にわたって適用される強度(または乗数)を指定できます。 曲線が設定されていない場合(フロート0を意味します)、それを基本曲線に変換します。

この方法で、強度は最初の0から中央の1に、最後に0に戻ります。 ランダム化されたシェイク値へのこの乗数は、シェイクへのスムーズなランプアップとランプダウンを作成します。
曲線を変更して、より急激な揺れを作成できます。
モーターとモーターのプロパティ
各モーターは、さまざまな方法でカメラを制御します。カメラに関連付けられたプロパティは、モーターの動作を定義するのに役立ちます。

とはいえ、ほとんどすべてのモーターに共通するプロパティがいくつかあります。

Name
カメラモーターに設定できる名前。
これは、コードでカメラモーターを検索する場合に便利です。

Enabled
モーターを起動できるかどうかを決定します。

Use Rig Anchor
通常、カメラコントローラーのアンカーとアンカーオフセットプロパティを使用します。これらはすべてのモーターに対してグローバルに設定されています。

ただし、このプロパティのチェックを外すと、このモーターのカスタムアンカーとアンカーオフセットを設定できます。

Offsets
「Anchor Offset(アンカーオフセット)」に加えて、このモーターに固有のオフセットを設定できます。


Offsets/オフセット
このカメラのモーターの高度な機能の1つは、アンカー+アンカーオフセットからのオフセット機能です。
これは、真のAAA 3人称カメラの動作を可能にするため重要です。
このグラフィックは、さまざまなアンカープロパティとオフセットプロパティを明確にするのに役立ちます。
AnchorOffset = {0、2、0}
Offset= {-1.0、0、0}

トゥームレイダーの例

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

このオフセットは、カメラがLaraを周回する方法に関係なく尊重されます。 したがって、前の説明を考えると、カメラのセットアップは次のように考えることができます。


衝突とフェージング/Collisions and Fading
前述のように、マスターコリジョンフラグとフェージングフラグはカメラコントローラーで設定されますが、各モーターには、特定のモーターで機能を有効にするかどうかを決定するフラグもあります。
すべてのレンダラーをフェードさせる(デフォルト)か、[Set Fade Renderers]チェックボックスをオンにして、特定のモーターによってどのレンダラーがフェードされるかを選択できます。

[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に追加することにより、パスを作成できます。
上の図では、3つのポイントがあります(2つしか表示されていない場合でも)。
これは、スプラインが「ループ」に設定されているためです。
したがって、最初のポイントと最後のポイントは同じ位置を共有します。

ポイントをクリックして選択し、必要に応じて移動できます。

ポイントを選択した状態で、「Insert Point」を押して、選択したものの前のポイント。

接線をクリックして移動すると、パスの形状を変更できます。

ActorControllerのドキュメント和訳

MotionController同様、公式ドキュメントが英語なので、日本語にしたものをメモ。
複雑なところは割愛。


概要
アクターコントローラーは、Unityの標準的なキャラクターコントローラーの代わりであり、高度な機能を提供します。
Unity 5ソリューションで単独で使用できますが、モーションコントローラーの基盤でもあります。

特徴
アクターコントローラーは次の機能をサポートしています。
・壁、天井などの上を歩く
・プラットフォームでの移動と回転
・超高速移動
・急な斜面を滑る
・キャラクターを地面の傾斜に合わせる
・カスタムボディ形状の作成
・外力に反応する
・Nav Meshエージェントをサポート
・ルートモーションをサポート
・あらゆる入力ソリューションをサポート
・ゼロガベージコレクション*
・コードを含む(C#)

アクターコントローラー/Actor Controller
環境と外力に応じて、全身のキャラクターの動きと回転を制御します。

アクタードライバー/Actor Driver
ユーザー入力、AIなどに基づいてアクターコントローラーがどのように動くかを決定します。含まれているアクタードライバーは 使用可能ですが、拡張することもできます。 実際、必要に応じて独自のドライバーを作成できます。
注:モーションコントローラーを所有している場合、モーションコントローラーがドライバーです。

入力ソース/Input Source
キーボード、マウス、ゲームパッドなどからのユーザー入力を収集するために使用されます。これを分割することにより、 基本的なUnity入力ソースが提供されるか、サードパーティの入力ソリューションを使用する入力ソースを作成します。

このアプローチを使用すると、任意の入力ソリューションを使用できます。
また、アクタードライバーがアクターコントローラーに指示する方法を変更することにより、アクターの動きを変更することができます(つまり、歩くか飛行するか)。
これは、同じシーン内の異なるキャラクターを異なる方法で、または異なるプレーヤーでさえ制御できることを意味します。
Unity入力ソース– Assets / ootii / Framework_v1 / Code / Input

これは、UnityのネイティブInput Managerソリューションを使用して入力を読み取るデフォルトの入力ソースです。 キーボード、マウス、Xboxコントローラーでの基本的な移動と表示をサポートしています。

Xboxコントローラーを有効にするには、チェックボックスをオンにします。

適切な値がUnityの入力マネージャーリストに追加されます(必要な場合)。
「Viewing Activator」プロパティを使用すると、回転/表示をアクティブにする方法を決定できます。 たとえば、「右マウスボタン」に設定すると、アクターは右マウスボタンが押されたときにのみ回転します。
クイックコーディング
たとえば、UnityInputSource.csファイルは、MCに付属する入力ソースであり、Unityのネイティブ入力ソリューションを利用するために使用されます。
次のフォルダーにあります。
Assets\ootii\Framework_v1\Code\Input
独自の入力ソースを作成するには、UnityInputSource.csをコピーし、
などの名前に変更して、クラス名を変更します。
これで、入力ソースの必要に応じて関数の内容を変更できます。
カスタムアクタードライバー
これらのドライバーは、基本的な動きのケースを処理し、さまざまな状況で機能します。
しかしながら、独自のドライバーを作成して、アクターを自由に制御することもできます。

最終的に、ドライバーは実際にアクターコントローラーの関数を呼び出しています。
ActorController.Move()
ActorController.RelativeMove()
ActorController.Rotate()

独自のドライバーを作成するときに使用できる他の機能がいくつかありますが、上記の機能は基本です。

力を適用するためのもう1つの便利な関数は次のとおりです。

ActorController.AddImpulse()

これはジャンプのようなものに力を加えることができます。ただし、ACは物理ベースのコントローラーではなく、入力ベースのコントローラーであるため、AddImpulse()を使用してキャラクターを通常に移動しないでください。

パッケージには、使用できるいくつかのアクタードライバーが含まれています。

Actor Driver –Assets/ootii/ActorController/Code/Actors/
これがデフォルトのドライバーです。 キーボード、マウス、およびXboxコントローラーからの入力を受け取り、それをキャラクターの順方向に相対的な動きと回転に変換します。 次に、Actor Controller関数を呼び出して、実際にアクターを移動します。
Animator Driver – Assets / ootii / ActorController / Code / Actors / CharacterControllers / Drivers Actor Driver
Actor Driverから継承しますが、ゲームオブジェクトにアタッチされているUnity Animatorを探します。 見つかった場合、ルートモーションデータを照会し、それを使用してキャラクターを移動および回転させます。 ルートモーションデータが見つからない場合は、入力を使用してキャラクターを制御します。
Mesh Driver – Assets / ootii / ActorController / Code / Actors / CharacterControllers / Drivers
Animator Driverから継承しますが、Nav Mesh Agentを使用してアクターを特定のターゲットに移動します。 Animatorが見つかった場合、Animatorはルートモーションデータを照会し、それを使用してキャラクターを移動および回転させます。ルートモーションデータが見つからない場合、速度はコンポーネントに設定されます。

Sphere Actor Driver – Assets / ootii / _Demos / ActorController / Code
アクタードライバーから継承します。 「内側の」球体が見つかると、これはアクターの体を使用し、それに基づいて回転します。
キャラクターが動いている方向。これは、球体が回転しているような印象を与えます。

Spider Actor Driver – Assets / ootii / _Demos / ActorController / Code
Animator Driverから継承します。他のドライバーと同様ですが、ジャンプを押すと(そしてアクターが壁に面している場合)、壁にジャンプして登ることができます。

Coding an Actor Driver
アクタードライバーのコーディングは、実際には入力を読み取り、アクターコントローラーに何をするかを伝えるだけです。
ACをコーディングするには、回転が2つの部分に分かれていることを理解する必要があります。ヨーとチルト。

通常、アクターコントローラーの次の機能を使用します。
Move(Vector3) ワールド空間に基づいてアクターを移動します。
RelativeMove(Vector3) ローカルスペースに基づいてアクタを移動します。
SetPosition(Vector3) 絶対位置の値を強制します。
Rotate(Quaternion) アクターを「上」軸を中心に回転します。 この回転は通常「ヨー」と呼ばれます。
Rotate(Quaternion、Quaternion) ヨーとチルトを回転します。
SetRotation(Quaternion) 絶対回転値を強制します。
Body Shapes and Colliders
ボディシェイプは、Actor Controllerによる衝突検出に使用されます。球体とカプセルを使用することにより、人間の形状や他の単純でないキャラクターを表現できます。また、キャラクターのポーズに合わせて、実行時にこれらの形状を変更する機能もあります。

デフォルトのセットアップには2つの形状があります。
ボディカプセル–このカプセルは、従来のキャラクターコントローラーに似ていますが、地面から持ち上げられます。これにより、アクターはステップの端まで到達できます。これは、足IKに最適です。

Foot Sphere-この球体は空中でのみアクティブです。これにより、オブジェクトを飛び越えるときに足が物に入らないようにします。ただし、棚やステップの近くに移動しても、ブロックされることはありません。

体の形はコライダーではないことに注意することが重要です。そのため、外部のレイキャストや剛体はそれらに反応しません。外部のレイキャストをキャラクターに当てたい場合は、通常の方法で従来のUnityコライダーをアクターに追加するか、「Unityコライダーを使用」チェックボックスをオンにします。

コライダーの代わりにボディシェイプを使用する理由は、通常のUnityカプセルコライダーはあまり柔軟性がないためです。任意に回転したり、異なる変換に結び付けることはできません。つまり、キャラクターがアニメーション化しても、その形状は自動的に変化しません。
例えばUnityカプセルコライダーが、頭部の変形に合わせて自動的にサイズ変更できないことに注意してください。
また、基本的な方向に固執しています。
ただし、ボディシェイプカプセルは、関連付けられている変換に合わせてサイズ変更および回転します。したがって、キャラクターの形状は自動的に変更されます。
Unity Colliders
Unityカプセルコライダーの制限を補うために、各ボディシェイプには、ボディシェイプを使用してUnityコライダーを作成および管理するオプションがあります。
[Use Unity Colliders]チェックボックスをオンにするだけで、実行時にコライダーがボディの形状に合わせて作成されます。
球は簡単です。 ただし、Unityカプセルコライダーは実際には使用できないため、代わりに球体が使用されます。
少し混乱していますが、複数の球体を使用して、カプセルの位置、サイズ、回転を近似する方法に注目してください。
キャラクターの頭が動くと、球体が動きカプセルの形状を保ちます。
Rigidbodyコンポーネントをキャラクターに追加しても問題ありません。 ただし、剛体はキャラクターを制御しようとします。 つまり、剛体とACが競合していることを意味します。 これを修正するには、リジッドボディの重力を無効にし、「Is Kinematic」チェックボックスをオンにします。 これにより、リジッドボディがキャラクターを制御しようとするのを防ぎます。
Collisions vs. Grounding/衝突対接地
「衝突」と「地面」は異なるものです。
衝突とは、衝突検出により、壁などの別の物体にぶつかったと判断されたことを意味します。
接地とは、アクターの直下で地面をテストし、その上に立つことができることを意味します。
そのため、衝突を完全に無効にすることができ、キャラクターは引き続き地面を歩いたり、斜面を上ったりできます。衝突を無効にすると、パフォーマンスが大幅に向上します。 これは、レール上にあるか、動きが制限されているNPCに最適です。
コライダー/Colliders
アクターコントローラーは、標準のユニティコライダーと衝突することができます。 最速のコライダーは、球、箱、および飛行機です。 ただし、メッシュコライダーに対する衝突も検出できます。
ただし、UnityのCharacter Controllerと同様に、メッシュコライダーと衝突するとパフォーマンスに影響があります。

Unity 5.3では、ACはUnityの非割り当て物理呼び出しを使用しています。 これは、衝突によってパフォーマンスが低下する可能性のあるガベージを作成しないため、モバイルに最適です。 ただし、これらの呼び出しは、プレーン(およびおそらく他の形状)の背面との衝突を引き起こします。
衝突レイヤー/Collision Layers
Actor Controllerは、標準Unityのレイヤーを使用して、衝突する対象を決定します。
コリジョンセクションでレイヤーを設定するだけで、同じレイヤーにあるオブジェクトやプロップと衝突します。 オブジェクトがコリジョンレイヤーに含まれていないレイヤー上にある場合、キャラクターは単にオブジェクトを通過します。
レイヤーで接地を有効にするには、「Use Grounding Layers」チェックボックスもオンにする必要があります。
メッシュコライダー/Mesh Colliders
影響を最小限に抑えるため、メッシュコライダーを解析し、将来の衝突に備えてその情報を保存します。 小さなメッシュの場合、これは最初の影響で実行できます。 ただし、大きなメッシュの場合、アクターコントローラーでメッシュコライダーを前処理する必要があります。

これを行うには、Moos Colliderオブジェクトを持つゲームオブジェクトにootii Mesh Partitionerコンポーネントを追加します。 次に、「開始時に解析」をチェックします。

残りのオプションはすべて、エディターでパーティションを視覚化するためのものであり、有効にしないでください。
アクターコントローラーの詳細設定
Grounding
Is Gravity Enable
重力を使用するかどうかを決定します。

Is Relative
重力が世界の向き(Vector3.up)または地面の法線に基づくかどうかを決定します。

壁を歩くには、このオプションを設定する必要があります。

Extrapolate Physics
アクターコントローラーは、すべての処理にLateUpdate()関数を使用します。ただし、物理レートベースの情報(重力やジャンプの力など)は、フレームレート間で一貫性を保つためにFixedUpdate()で処理されます。
これら2つの機能は常に同期しているわけではありません。

落下中にどもる場合、このオプションをチェックするとスムーズになります。
Gravity(重力)
重力の力と方向を決定します。値が設定されていない場合、Unityの重力値を使用します。
最終的な重力方向は、Is Relativeフラグによって決定されます。

Skin Width(スキン幅)
アクターのボディシェイプと、衝突または接地するオブジェクトとの間に許可されたわずかなスペース。

Mass(質量)
アクターの質量。外力を適用するときにこの値を使用します。 Unityの標準を使用します。これは約1単位= 1立方体=約35 kgです。

Grounding Start(接地開始)
接地のために光線を撮影する場合、これはキャラクターのルートからの高さであり、光線を下方に撮影し始めます。

Grounding Distance(接地距離)
接地線をキャラクターのどのくらい下に射撃するかを決定します。

Grounding Radius(接地半径)
光線に加えて、球体は隙間に落ちるのを防ぐために下向きにキャストされます。この値は、「足」の半径またはアクターの底でなければなりません。

Force Grounding(強制接地)
Force Distanceの範囲内にいるキャラクターを地面に押し下げるかどうかを決定します。

Force Distance(力の距離)
キャラクターが地面から離れることができる最大距離であり、Force Groundingがチェックされているときは、キャラクターを強制することもできます。


Collisions
Is Collision Enabled
衝突をテストするかどうかを決定します。

Stop Rotations
衝突によってキャラクターの回転が停止するかどうかを決定します。

Allow Pushbacks 
外部コライダーがアクターを移動させることを決定します。

アクターはただアイドル状態にあるが、コライダーがキャラクターに動いていると仮定します。このオブジェクトを使用すると、コライダーがキャラクターを押し戻して、キャラクターが貫通しないようにすることができます。
ただし、Unityキャラクターコントローラーのように、コライダーはキャラクターを別のコライダーにプッシュできます。そのため、これには注意が必要です。

このオプションを使用すると、パフォーマンスが低下します。控えめに使用してください。

Overlap Center
衝突検出を実行する場合、まずキャラクターの範囲内にオブジェクトがあるかどうかを確認します。これがその範囲の中心です。

Overlap Radius
衝突検出を実行する場合、まずキャラクターの範囲内にオブジェクトがあるかどうかを確認します。これは、使用する半径です。

エディターでは、衝突テストに使用されるオーバーラップ円を表す明るい灰色の球体が表示されます。 「Overlap」設定を使用して、キャラクターの大部分がカバーされるようにします。
Sliding
Is Sliding Enabled
角度が最小傾斜角よりも大きいスロープでは、アクターがスライドします。

Min Slope
アクターがスライドを開始する前に、(アクターの下の)スロープの最小角度。

Gravity
スライドするとき、スライドに適用される重力の割合。 これは、表面の摩擦を偽造するのに役立ちます。

Max Slope
アクターが上に移動できる最大傾斜。 傾斜がこれより大きい場合、キャラクターは移動を停止します。

Step
スロープが実際に開始する地点の終了点を見つけるために内部的に使用される小さな距離。 通常、この値を変更する必要はありません。

Orientation
これらの機能は、キャラクターが壁や天井を歩くつもりである場合に重要です。 これを行うには、キャラクターは歩いている表面の方向を向く必要があります。

Orient to Ground(地面に向ける)
アクターが立っているサーフェスの法線に一致するようにアクターが「アップ」ベクトルを変更するかどうかを決定します。

壁を歩くには、このオプションを設定する必要があります。

Keep Orientation(オリエンテーションを保つ)
アクターがジャンプ中に最後の方向を保持するかどうかを決定します。 チェックされていない場合、キャラクターはジャンプ中に自然な向き(Vector3.up)に戻ります。

Min Angle(最小角度)
方向の変更を引き起こす最小角度の変更。

Max Distance(最大距離)
アクターの向きが自然な地面(Vector3.up)に変わり始める前の地面からの最大値。

Freezing
これらのオプションを設定すると、指定した軸の動きと回転を制限できます。
Max Slope
Max Slopeを、バンプを登れるような大きな値に設定します。85度は極端です。 明らかに、これはキャラクターがその程度以下の傾斜を登ることを意味します。 あなたのゲームによっては、それは良い選択肢かもしれません。 Max Slopeを0に設定すると、内部的にデフォルトで70度になります。
Remove Colliders
小さな斜面からコライダーを取り外します。小さな傾斜がある場合、キャラクターがその上にぶつかることは本当に重要ですか? 2本の足を持つ人間の場合、通常は気付かないでしょう。
これは、地形を扱う場合に特に有効です。

誰かが私に1,000個の岩や小石が地面に散らばっているシーンを見せてもらいましたすべての岩と小石は、丘のコライダーの一部でした。コライダーは複雑で大規模なメッシュでした。
そのため、丘の全体的な傾斜は良好でしたが、小さな小石はそれぞれ急斜面になりすぎ、ACは丘を登ろうとしてたどたどしくなりました。

これは「現実の幻想」についての私のコメントに行きます。
すべての小石をコライダーの一部にすることは現実に近いかもしれませんが、それがあなたのゲームに与えるパフォーマンスの打撃は通常は価値がありません。

Slopes to Steps
コライダーを「スロープ(斜面)」から「ステップ(段差)」に変更します。
ACはステップとスロープを異なる方法で処理します。
ステップの場合、スムーズにポップアップします。したがって、斜面は斜面のように見えますが、コライダーは実際には90度の面を持つ立方体になります。
Slopes to Slopes
急斜面のコライダーをそれほど急ではないものに変更することで逃げることができるかもしれません。
FAQ: 階段と坂道をゆっくりと上昇するとき
ほとんどのキャラクターコントローラーには、「ポップアップ」ステップがあります。
それは機能しますが、キャラクターが1フレーム低く、次のフレームが高いため、少し耳障りになることもあります。これは、いくつかのステップがある場合に特に当てはまります。あなたはこのポップポップポップ体験を得ることができます。

典型的な解決策は、ステップのコライダーとしてランプを使用することです。これにより、階段を上るスムーズな方法が提供されますが、足のIKは個々のステップを認識しません。代わりに、階段で停止した場合、足IKは、自分が坂道に乗っており、足が傾いていると判断します。

スムーズなステッピング
そのため、ACには「smooth stepping」と呼ばれる機能が含まれています。基本的に、ポップアップするのではなく、時間をかけてステップアップします。
「Step Up Speed」は、より高いステップに移動する速度(単位/秒)を決定します。

「Step Down Speed」は、下のステップに移動する速度を決定します。

「Max Angle」は勾配に使用されます。地面の角度がこの値より急な場合、スムーズなステップを無効にします。
キャッチ
キャッチは、より長い階段やランプを扱うとき、キャラクターがあなたが前進するよりもゆっくりと上昇することです。 この場合、キャラクターは沈んでゆっくりと立ち上がっているように見えます。これを修正するには、いくつかのオプションがあります。

スムーズステッピングを無効にする
「Step Up Speed」および/または「Step Down Speed」を「0」に設定して、スムーズなステップを無効にします。 これにより、従来の方法でステップを上下させることができます。

速度を上げる
この「キャッチ」が通常発生する理由は、キャラクターが上下に移動するよりも速く前進するためです。 そのため、ゲームのプレイに合わせて速度を上げることができます。 ステッピングはより速くなり、前方への動きに追いつくはずです。

最大角度を下げる
斜面では、「Max Angle」を下げて、地形などのスムーズな踏み込みを無効にすることができます。 実際、「3」は地形に適した数値であることがわかりました。
FAQ:急斜面での沈没
キャラクターのコライダーがなぜ斜面に沈むのか、何人かの人に尋ねました。
ほとんどのキャラクターは完璧なカプセルや球体ではありません。ただし、カプセルと球体を使用して衝突領域を定義します。これらは衝突検出が高速であり、単純さを提供し、凹凸のある地面を移動するときに湾曲した底が役立つためです。ただし、急な傾斜が問題になる場合があります。

これは非常に簡単に視覚化できます。
最初の写真では、沈没は許可されていません。代わりに、コライダーを強制的に斜面で停止させます。この場合、キャラクターはもはや「接地」されておらず、実際には空中に浮いています。
これにより、キャラクターが浮かんでいるように見えるだけでなく、ACはキャラクターが浮かんでいるとみなし、動きを止めることができます。したがって、ドキュメントで前述したように、グラウンディングとコリジョンは異なる方法で発生します。
沈むもう1つの理由は、足IKです。コライダーの形状に厳密に従うと、足が地面に到達することはなく、環境に対してより自然な姿勢を強制することはできません。

とはいえ、これについてはある程度の制御が可能です。 「Enable on ramp」オプションを使用して、コライダーがランプを尊重するかどうかを決定します。
公正な警告:コライダーが傾斜路に沈むことを許可することもありますが、コードが重要だと感じた場合のみです。
FAQ:オリエンテーションの強制
向きは重力ではなく、地面に基づいていることに注意してください。 壁の上を歩くクモを取ります…世界の重力は変わりませんが、向きは変わりました。
ただし、重力セクションで「Is Relative」フラグを使用して、個人の重力を変更することでクモが壁にくっつくようにします。
これは向きの変化を引き起こさず、単に彼の重力が彼を地面の法線に引き寄せていることを確認します。 クモが壁にいる場合、壁に向かって押され、壁に「接地」されていることを意味します。

時々、キャラクターに特定の向きを持たせることができます。 実際、クモが壁にジャンプするときにACデモ(demo_Factor)でこれを行います。 クモの動きを担当するSpiderDriver.csファイルを確認してください。

これを行うには、ACのSetTargetGroundNormal()関数を使用します。この機能を使用すると、AC設定で「Orient To Ground」がオンになっている場合、俳優の向きを変更させる地面法線を強制できます。

SetTargetGroundNormalの設定に加えて、アクターがこの方向に向くのにかかる速度を変更することもできます。 OrientToGroundSpeedでそれを行うことができます。
繰り返しになりますが、SpiderDriver.csでこのすべてが発生しています。

・167行目:プレイヤーがジャンプを押し、壁が見つかりました。再配向の開始
・行175:ジャンプを押すプレーヤーに基づいてOrientToGroundSpeedを変更します
・179行目:方向を変えるとスパイダーが上に移動するようにインパルスを追加します
・行112:SetTargetGroundNormalが呼び出され、アクターが回転を開始します
・行105:アクターが新しい地上ターゲットに到達し、SetTargetGroundNormalがクリアされます

考えておくべきこと:アクターが自分の原点を中心に単純に回転すると、おそらく壁や床に埋め込まれてしまいます。そのため、それを防ぐために、衝動や動きを追加する必要があるかもしれません。私は179行目でそれをします

FAQ:ジャンプの追加
ジャンプは、いくつかの異なる方法で実装できます。 私は、キャラクターにリフトをかける力を使用してから、重力でキャラクターを引き下げます。
物理的な力によって動かされた根
このアプローチにはいくつかの利点があります。
1. ACは、キャラクターのルートを自分の足元に残しておくのが好きです。それがキャラクターの本当の位置です。そのため、ジャンプでルートを移動すると、オブジェクトの上に簡単にジャンプできます。
2.ゲームでは、ジャンプの力を変更するだけで、キャラクターのジャンプの高さを変更できます。
3.頭部の変形を使用するように体型を設定すると、体型はキャラクターのポーズに合わせて自動的にサイズ変更されます。ここの設定を参照してください。「ボトム変換」がどのように空であるかに注意してください。つまり、ルートに基づいています。 「トップトランスフォーム」は頭の骨に基づいています。
力を適用するには、次のようにACのAddImpulse関数を呼び出すだけです。
このような機能:
ActorController mActorController =
gameObject.GetComponent ();
mActorController.AddImpulse(transform.up * _JumpForce);
このアプローチを採用する場合は、通常、ジャンプアニメーションでキャラクターが立ち上がらないように設定します。代わりに、彼の足は根元にとどまります。生のアニメーションはそれ自体少し奇妙に見えますが、衝動を追加すると、見栄えが良くなります。
Animation Controlled Jump/アニメーション制御ジャンプ
AddImpulseアプローチを使用したくない場合は、ジャンプのアップムーブメントをアニメーションに含めることができます。 この場合、ルートモーションはないと仮定しています。 このアプローチの課題は、体が空中にある間、キャラクターの根がまだ地面にあることです。
ルートはアニメーションで移動しません

これを補うために、通常、コライダーを移動および/またはサイズ変更して、ジャンプの生涯にわたるキャラクターの位置を表します。
体の形でこれを行うには、次のようなコードを使用します。

 // Grab the first body shape as a capsule 
  BodyCapsule lCapsule = mActorController.BodyShapes[0] as   BodyCapsule; if (lCapsule != null)
   {
    // Changes the offset of the bottom part of the capsule
     lCapsule.Offset = Vector3.up * 0.25f;

    // Changes the offset of the top part of the capsule
     lCapsule.EndOffset = Vector3.zero;
  }
もちろん、ジャンプの発生時に設定を変更し、ジャンプが完了したら元に戻す必要があります。 考えるべきもう1つのことは、ルートがまだ地面にあるため、オブジェクトにジャンプすることは少し難しいことです。 その理由は、ルートが実際にジャンプしているボックスに入るからです。 例えば:
これらのすべての場合、ジャンプ、ルート位置、およびカプセル形状を補正するのはドライバー次第です。 ダブルジャンプ
ダブルジャンプを実装する場合、AddImpulse()を再度呼び出す前に、ACの「AccumulatedVelocity」プロパティをクリアする必要があります。その理由は物理学です…

ジャンプにAddImpluse()を使用する場合、重力を扱います。現実と同じように、上昇するにつれて速度が低下し(重力が初期ジャンプ速度に対抗するため)、頂点で速度が0になり、下降するにつれて速度が増加します(重力のため)。

速度の累積を「AccumulatedVelocity」変数に保存します。したがって、落下して重力が速度を上げると、フレームごとにキャプチャされます。

ダブルジャンプに対してAddImpulse()を再度実行すると速度が追加されるため、現在の累積速度に応じて異なる結果を得ることができます。あなたがジャンプの落下側にいて、多くの重力速度が蓄積している場合、ダブルジャンプでは再び上に移動するには不十分な場合があります。

AccumulatedVelocityをクリアすることにより、時間の経過とともに重力が増加し、蓄積が最初から始まる衝撃を取り除きます。それで、あなたはあなたの現在の位置からの新しい新鮮なジャンプをするでしょう。

AccumulatedVelocityをクリアするには、次のようなコードを実行します。

lActorController.AccumulatedVelocity = Vector3.zero;
よくある質問
アクターコントローラが互いに衝突するのを防ぐにはどうすればよいですか?
早い段階で覚えているなら、衝突と接地の違いについて話します。
2人のアクターが互いに衝突しないようにしたとしても、彼らがお互いを通過するときに奇妙な結果が得られる可能性があります。
それは、一方が他方の上に「接地」されることを望むためです。

たとえば、2人のアクターがいるとします。 1つはレイヤー#8に、もう1つはレイヤー#9にあります。

衝突を防ぐには、「Use Grounding Layers」を有効にし、「Ground Layers」に他のキャラクターレイヤーが含まれないようにします。 また、「Collision Layers」に他のキャラクターレイヤーも含まれないようにする必要があります

私の両方のアクターの「Grounding Layers」と「Collision Layers」にはこれらのレイヤーが含まれていないため、衝突しません。

MotionControllerのドキュメント和訳

「Motion Controller」のアセットについて解説ページがあるものの、 英語なので、グーグル和訳したものをメモ。覚書。

導入からセットアップまでは、ここのページを参照にしたら良さそう。

ActorControllerのドキュメント和訳はこちら
Camera Controllerドキュメント和訳はこちら


概要
モーションコントローラーは、任意のキャラクターおよびゲーム用のアニメーションフレームワークおよびキャラクターコントローラーです。
それはユーザー入力と応答性を物理学より上に置く「入力ベース」コントローラーです。

アセットストアにある他の第三者のヒューマノイドコントローラーとは異なり、モーションコントローラーは柔軟です。
人間から猫、エイリアンまで、あらゆるタイプのキャラクターをサポートできるコンポーネントベースのフレームワークです。
拡張可能なように一から構築されており、独自のモーションを作成し、独自のモーションを使用することができます。
アニメーション、さらにはモーションを他のユーザーと共有します。

すぐに使えるモーションコントローラーには、アクターコントローラーが含まれています。
高度なキャラクターコントローラー。 重力、移動プラットフォーム、カスタムキャラクターシェイプ、壁の上を歩くことができます。 また、いくつかが含まれていますヒューマノイドキャラクターに使用できるビルド済みのモーション。走ったり、ジャンプしたり、はしごを登ったり、スケール壁など。


特徴
モーションコントローラは次の機能をサポートしています。
・壁、天井などの上を歩く
・プラットフォームでの移動と回転
・超高速移動
・カスタムボディ形状の作成
・15秒未満でヒューマノイドをセットアップする
・Nav Meshエージェントをサポート
・ルートモーションをサポート
・あらゆる入力ソリューションをサポート
・コードを含む(C#)


前書き
モーションコントローラは、いくつかの異なる部分で構成されています。これらの部品がどのように組み合わされるかを理解するフレームワークの使用と拡張がはるかに簡単になります。


入力ベース/Input Based
キャラクターコントローラーには通常、入力ベースと物理ベースの2つのフレーバーがあります。
入力ベースのコントローラーは、ユーザーとコードからの入力を受け取り、それを正確な動きに変換します。 これらは、より正確で応答性の高いキャラクターコントローラーを作成します。 物理的な力に対する反応をシミュレートできますが、物理ベースのコントローラーほど正確ではありません。
物理学に基づいたコントローラーは物理学の力を使用してキャラクターを動かし、物理学に基づいたシミュレーション(プールのビリヤードボールなど)に適している傾向があります。 ただし、ユーザー入力に対する応答性が低下する傾向があり、動きはそれほど正確ではありません。
モーションコントローラー(およびアクターコントローラー)は、入力ベースのコントローラーです。


アクターコントローラー/Actor Controller
これは実際の「キャラクターコントローラー」であり、移動、移動するプラットフォームへの付着、衝突、重力、壁の上を歩くなど基本的に、アクターコントローラーはこれらのことを「どのように」行うかを知っていますが、いつ行うのか、なぜ行うのかはわかりません。
アクターコントローラーの詳細については、ユーザーガイドをご覧ください。
http://www.ootii.com/Unity/ActorController/


入力ソース/Input Sources
誰もが同じ入力ソリューションを使用した場合、これは必要ありません。
ただし、Unityのネイティブ入力ソリューションを使用する人、Easy Inputを好む人、Asset Storeにある他のアセットを使用する人もいます。
つまり、モーションを1回コーディングし、任意のソリューションからユーザー入力を取得できるように、入力を取得する一般的な方法が必要です。
それが入力ソースです。
入力を取得する一般的な方法。好みの入力ソリューションを「入力ソース」にラップすることにより、MCとモーション自体が入力ソースを使用して、選択した入力ソリューションを利用できます。
モーションコントローラーには、Unityのネイティブソリューションを使用してユーザー入力を取得する方法を知っている「Unity Input Source」が含まれています。
Easy Inputには「Easy Input Source」が含まれており、必要に応じて他の「Input Sources」を作成して、お気に入りのソリューションを操作できます。


アクションエイリアス/Action Aliases
モーション全体を通して、「アクションエイリアス」を使用して、入力が発生したかどうか、およびモーションをアクティブ化する時間かどうかを確認します。 アクションエイリアスは、キープレスまたは入力条件に付けられるわかりやすい名前であり、その仕組みを理解せずに問い合わせることができます。
ジャンプモーションには、アクションエイリアスプロパティがあります。
デフォルト値は「Jump」です。
動きが見えるように見えるときジャンプするときは、次のような呼び出しを行います。
bool lShouldActivate =InputSource.IsJustPressed(“ Jump”);
モーションは、「ジャンプ」がどの程度であったかをあまり気にしません 処理されました。値がtrueまたはfalseが戻ってきます。
これはまさにUnityが入力システムで行うことです。


動き/Motions
モーションはアニメーションの流れに関するものです。
Mecanim Animatorに代わるものではありませんが、それと連携してタイミングを制御します。
アニメーションは開始時、移行時、終了時に開始されます。そのため、モーションには通常3つのコンポーネントがあります。
アニメーション、コード、および設定。彼らは協力して完全な体験を作り出します。
登山について考えてください。クライミングアニメーションを作成できますが、どのように「何を」登ることができますか?
高さが固定されていないはしごを登る場合はどうでしょうか。停止するタイミングをどのように知っていますか?
動きがはしごを登るアニメーション、これらの質問に答えるコード、および開発者が 情報を設定します。


優先順位/Priorities
すべてのモーションに優先順位が与えられます。この優先順位を使用して、どのモーションが別のモーションをオーバーライドするかを決定します。
優先度が高いほど、モーションが重要になります。
したがって、2つのモーションを両方ともアクティブにできる場合、優先度が最も高いモーションが優先されます。
2つのモーションが両方ともアクティブになり、同じ優先度を持つ場合、リストで最も低いモーションが優先されます。


モーションレイヤー/Motion Layers
Mecanim Animatorレイヤーと同様に、モーションをレイヤーにグループ化できます。このようにして、複数のモーションを作成できます。
体のさまざまな部分に影響を与えるために一度に実行します。通常、私は1つまたは2つのレイヤーで作業しますが、コードを変更せずに最大10個作成できます。


メカニムアニメーター/Mecanim Animator
内部では、MCはMecanimのAnimatorおよびAnimator Parametersを使用してアニメーションを制御します。
適切なパラメーターを設定するだけで、Mecanimステートマシンが一般的なUnityの方法でアニメーションフローを制御できます。
これを行うには、アニメーターで次のパラメーターが必要です。

IsGrounded-キャラクターが地面にいるかどうかを決定します
Stance –キャラクターの状態を定義する開発者定義の整数
InputX / InputY –「動き」入力キー/ゲームパッドの値
InputMagnitude –運動入力の値
InputMagnitude –運動入力の平均値
InputAngleFromAvatar –入力とキャラクターの前方
InputAngleFromCamera –入力とカメラの前方の角度差
コントローラーのアニメーターレイヤーごとに、これらのパラメーターのセットが存在する必要があります。 「L0…」、「L1…」、「L2…」などのラベルが付けられます。
L MotionPhase –アニメーターの状態をアクティブにする一意のキー
L MotionParameter –アニメーターの状態フローを支援する追加情報
L MotionStateTime –現在の状態の正規化された時間。値は常に0〜1(包括的)です。状態がループすると、値は0に戻ります。


ヒューマノイドアニメーターコントローラー
MCには、デモ用およびコピー用のビルド済みのアニメーターコントローラーが含まれています。以下にあります。
Assets \ ootii \ MotionController \ Content \ Animations \ Humanoid \ Humanoid.controller
アニメーターコントローラーをカスタマイズするときは、このコントローラーをコピーしてキャラクターで使用することをお勧めします。
この方法で、更新中に上書きしません。

初期設定
AnimatorのControllerプロパティは、MCの「Humanoid」コントローラーを参照する必要があります。
これは、歩行、ランニング、ジャンプ、登山などのアニメーションを含むMecanimコントローラーです。
[詳細設定/Advanced]タブには、多数のモーションを含む「移動/Locomotion」レイヤーが存在します。 これらの動きは、キャラクターが走ったり、ジャンプしたり、登ったりする原因となります。
後でリストにモーションを追加して、新しい機能を有効にしたり、独自のモーションを作成したりできることを学習します。

カスタム入力ソース

私が含めた入力ソースはオプションです。 入力ソースを作成することにより、任意の入力ソリューションを使用できます。
入力ソースは、IInputSourceインターフェイスを実装する単なるクラスです。
インターフェイスを実装することにより、クラスは「IsPressed」や「MovementX」などの特定の機能を実装することを約束します。
これらの機能とプロパティは、モーションコントローラーとモーションが入力ソリューションを活用するために使用します。
このビデオでは、入力ソースについて詳しく説明します。


クイックコーディング
たとえば、UnityInputSource.csファイルはMCに付属する入力ソースであり、Unityのネイティブ入力ソリューションを利用するために使用されます。
次のフォルダーにあります。
Assets \ ootii \ Framework_v1 \ Code \ Input
そのクラス内には、次のような関数があります。
 public virtual bool IsJustPressed(KeyCode rKey) 
 {  
      if (!_IsEnabled) { return false; } 
      return UnityEngine.Input.GetKeyDown(rKey); // <-------------
  } 

独自の入力ソースを作成するには、UnityInputSource.csをコピーし、YourAwesomeInputSource.csなどの名前に変更して、クラス名を変更します。
これで、入力ソースの必要に応じて関数の内容を変更できます。
前のコードでは、Unityの「UnityEngine.Input.GetKeyDown」関数を使用しています。
入力ソースでは、入力ソリューションを使用して関数の内容をコーディングします。

public virtual bool IsJustPressed(KeyCode rKey)
 {
     if (!_IsEnabled) { return false; }
      return YourAwesomeInputSolution.IsKeyPressedThisFrame(rKey); // <-------------
 }
ご想像のとおり、Asset Storeにはさまざまな入力ソリューションがあります。
そのため、すべてを購入して実装することはできません。
ビデオとこのセクションが、必要な入力ソースの作成に役立つことを願っています。 共有したい場合は、Vaultに追加します。


衝突とトリガー/Collisions & Triggers
モーションコントローラーは、基になるキャラクターコントローラーとしてアクターコントローラーを使用します。つまり、衝突を処理するのはアクターコントローラです。
詳細については、アクターコントローラーのガイドをご覧ください。


トリガー/Triggers
AC(およびMCの順番)は、Unityの物理エンジン(PhysX)を使用します。
ただし、デフォルトではUnityコライダーはありません。
代わりに、「ボディシェイプ/Body Shapes」を使用して、さまざまなサイズのキャラクターや基本的なカプセルではないキャラクターをサポートします。
つまり、MCはそれ自体でトリガーイベントを発生させません。
キャラクターにトリガーイベントを発生させるには、通常どおりにUnityコライダーをキャラクターに追加する必要があります。
これは、Unityの標準手順に従っています。


トリガーボリュームとの衝突
MC(およびAC)はUnityレイキャストを使用して衝突を管理します。ただし、Unityのレイキャストはトリガーボリュームと衝突します。つまり、コライダーの[トリガー]がオンになっていても、キャラクターはコライダーと衝突します。

キャラクターがトリガーボリュームと衝突しないようにするには、レイヤーをUnityの「レイキャストを無視」レイヤーに設定するだけです。

ユーザーインターフェイス/User Interface
ユーザーインターフェースを2つのセクションに分けました。
基本セクションと詳細セクションです。
ヒューマノイドキャラクターの場合、基本ビューは必要なもののほとんどを提供します。
ただし、独自のモーションを作成する場合、値を微調整する場合、または非ヒューマノイドのモーションを使用する場合は、詳細ビューを使用します。


基本ビュー/Basic View
移動スタイルボタンのいずれかをクリックするだけで、ほとんどのセットアッププロセスをショートカットできます。
そうすることで、モーションコントローラは入力ソースを作成し、カメラをセットアップし、必要に応じてモーションを追加します。

運動スタイル/Movement Styles
さまざまな第三者のスタイルのゲームプレイをサポートするために、私は 模倣するさまざまな「ウォークラン」モーションが含まれています。
・MMOスタイル
・アドベンチャースタイル
・シューティングスタイル

オプション/Options
[Options]セクションでは、組み込み済みのモーションを簡単に追加できます。
必要なモーションをチェックするだけで、デフォルトの設定で追加されます。
いくつかのモーションでは、どのUnityレイヤーが操作可能なオブジェクトを識別するかを指定する必要があります。


詳細ビュー/Advanced View
このビューを使用して、モーションプロパティをカスタマイズしたり、作成したモーションを有効にしたり、シンプルモーション機能でアニメーションを使用したりします。
モーションレイヤー/Motion Layers
必要に応じて、レイヤーを追加、削除、および名前付けします。追加する各レイヤーには、モーションのコレクションを保持できます。
レイヤーの数は、Mecanim Animatorで使用するレイヤーの数と一致する必要があります。

モーション/Motions
モーションレイヤーを選択すると、モーションレイヤーに含まれるモーションのリストが表示されます。
リストには次が表示されます。
・モーションタイプ
・モーション名(テキストフィールド)
・モーション優先度(数値フィールド)
・有効化フラグ(チェックボックス)
行の左側にあるアイコンを使用して、順序を並べ替えることもできます。
これは、モーションの優先度値が同じ場合に役立ちます。最も低いものが優先されます。

モーション詳細
モーションを選択すると、リストの下に詳細セクションが開きます。

上部(説明がある部分)は一般的なものです。
ここで、フレンドリ名(検索も可能)を追加し、優先度を変更できます。
再アクティブ化遅延は、モーションが再びアクティブになるまで待機する必要がある秒数です。 0は遅延がないことを意味します。

下の部分(線の下)は、モーション固有のプロパティです。それらのすべてに役立つツールチップがあります。プロパティ名にカーソルを合わせると、プロパティの機能が説明されます。

モーションコントローラーイベント/Motion Controller Events
コードとの統合をサポートするために、Motion Controllerは次の3つのイベントを公開します。
MotionActivated
この関数は、モーションの「アクティブ化」関数が呼び出されると起動します。
モーションが存在するレイヤー、モーション自体、および非アクティブ化される古いモーションが含まれます。
MotionUpdated
この関数は、モーションの「更新」関数が呼び出された後に起動します。
モーションはそれ自体を非アクティブ化できるため、MotionDeactivatedイベントが呼び出された後に呼び出されるのを確認できます。
これは、更新イベントが非アクティブ化されて終了したためです。
MotionDeactivated
このイベントは、モーションの「非アクティブ化」関数が呼び出されたときに発生します。
モーションが存在するレイヤーとモーション自体が含まれます。
MotionDeactivatedイベントは、現在のモーションが非アクティブ化される方法に基づいて、MotionActivatedイベントの前または後に起動できます。



以下は、イベントを利用する方法の簡単な例です。
using UnityEngine;
using com.ootii.Actors.AnimationControllers;
public class dev_Simple_Code : MonoBehaviour
{
 public MotionController mMotionController = null;
 void Start()
 {
 mMotionController = gameObject.GetComponent<MotionController>();
 mMotionController.MotionActivated += MotionActivated;
 mMotionController.MotionUpdated += MotionUpdated;
 mMotionController.MotionDeactivated += MotionDeactivated;
 }
 protected void MotionActivated(int rLayer, MotionControllerMotion rNewMotion, MotionControllerMotion rOldMotion)
 {
 Debug.Log(string.Format("Activated m-new:{0} l:{1}", rNewMotion.GetType().Name, rLayer));
 }
 protected void MotionUpdated(float rDeltaTime, int rUpdateCount, int rLayer, MotionControllerMotion rMotion)
 {
 Debug.Log(string.Format("Updated m:{0} l:{1} dt:{2:f2}", rMotion.GetType().Name, rLayer, rDeltaTime));
 }
 protected void MotionDeactivated(int rLayer, MotionControllerMotion rMotion)
 {
 Debug.Log(string.Format("Deactivated m:{0} l:{1}", rMotion.GetType().Name, rLayer));
 }
}

ドキュメントの和訳はここで半分ぐらいだけど、後半は複雑なので割愛。

管理人

ハンドルネーム:タケハタ
本名:波田野剛望(はたのたけみ)

お絵描きとゲームが好きなオス。
2020年の目標は、スチームでゲームをリリースすること。