1

Unity3Dで迷路をデザインしています。迷路にはいくつかの分岐点があり、プレイヤーは各分岐点の前で停止し、単に左または右を選択します。次に、自動アニメーションにより、プレイヤーは迷路の終わりまで(または行き止まりまで)次の分岐点を移動します。

UnityプロジェクトでAniMateとC#を使用しているプレーヤーをアニメーション化するため。AniMateを使用して、分岐ごとにポイントツーポイントのアニメーションを作成しています(例:下のメイジ:開始/赤い矢印からポイント5まで)UnityのAniMateによる迷路とアニメーション

私の問題は、物理学が尊重されていない(プレイヤーが壁を通り抜ける)ため、アニメーションスクリプト(「FirstPersonController」に関連付けられている)が正しく機能していないことです。同じプロジェクトでUnityの標準のキャラクターコントロールを有効にすると、壁などの物理的な制約を使って迷路の中を移動できます(つまり、コライダーがあります)。

これは、左を押して開始点、トラフポイント1からポイント2にパスするときに使用しているコードの例です。

        void FixedUpdate () {
if (Input.GetKey(KeyCode.LeftArrow)) {
//To point 1
    Hashtable props = new Hashtable();
    props.Add("position", new Vector3(756f,112f,1124f));
    props.Add("physics", true);
    Ani.Mate.To(transform, 2, props);

//To point 2            
    Hashtable props2 = new Hashtable();
    props2.Add("position", new Vector3(731f,112f,1124f));
    props2.Add("physics", true);
    Ani.Mate.To(transform, 2, props2);
}
}

左矢印ボタンを押すと実際に起こることは、プレイヤーが壁を通る直線を使用してポイント2に直接移動することです。AniMateに「Physics=true」を渡そうとしましたが、役に立たないようです。

この問題を解決する方法について何かアイデアはありますか?

または...より最適化されたコードを作成し、一連のvector3座標(各ポイントに1つ)を使用して、新しいHashtable()を宣言せずに必要な単純なアニメーションを取得する方法に関するヒント。など...毎回?私がAniMateを選んだ理由は、1。Unityの初心者です2.複雑なアニメーションは必要ありません(たとえば、iTweenを使用する必要はありません)。直線に沿ってアニメーションを修正するだけで、本当にシンプルで迅速なものが必要です。スクリプトで実装します。しかし、誰かが同じように単純な解決策を持っているなら、それは歓迎されます。

よろしくお願いします

4

1 に答える 1

1

AniMateのようなトゥイーンエンジンを使用すると、発生する可能性のある物理的な衝突を無視して、常にオブジェクトの位置を直接アニメーション化できます。オブジェクトを適切に衝突させたり、ジョイントで操作したりする場合は、力を使用してオブジェクトを移動する必要があり、オブジェクトの位置を直接変更することはできません。

物理に影響を与えるオブジェクトをトゥイーンできますが、トゥイーンされたオブジェクトは他の物理オブジェクトの影響を受けません。また、トゥイーンするリジッドボディをキネマティックにする必要があります。

AniMateの物理オプションは、オブジェクトが物理を介して他のオブジェクトの影響を受けることを意味するのではなく、トゥイーンオブジェクトが他の物理オブジェクトに適切に影響するように(UpdateではなくFixedUpdateで)トゥイーンの適用方法を変更するだけです。

この例では、2つのトゥイーンが同時に開始され、2番目のトゥイーンが最初のトゥイーンを上書きします(これが、オブジェクトが2番目のポイントに直接移動する理由です)。最初のトゥイーンが完了するのを待ってから、2番目のトゥイーンを開始する必要があります。

これを行う最も簡単な方法は、コルーチンを使用することです。

void FixedUpdate () {
    if (Input.GetKey(KeyCode.LeftArrow)) {
        StartCoroutine(TweenCoroutine());
    }
}

IEnumerator TweenCoroutine() {
    // To point 1
    Hashtable props = new Hashtable();
    props.Add("position", new Vector3(756f,112f,1124f));
    props.Add("physics", true);
    // Start first tween and wait for it to finish
    yield return Ani.Mate.To(transform, 2, props);  

    // To point 2
    Hashtable props2 = new Hashtable();
    props2.Add("position", new Vector3(731f,112f,1124f));
    props2.Add("physics", true);
    // Start second tween and wait for it to finish
    yield return Ani.Mate.To(transform, 2, props2);

    // etc...
}

AniMateはモーションパスをサポートしていません。HOTweenは、トゥイーンオブジェクトが通過するポイントのリストを渡します。

また、C#での使用がはるかに優れた流動的なインターフェイスを備えた新しいバージョンのAniMate(現在はAnimate)が利用可能です。

于 2012-10-22T10:57:28.047 に答える