0

私はやってみたいです

result = TraceActors(class'QuadForcePawn', HitEnemy, hitLocation, HitNorm, weaponStart, m_oldWeaponStartLocation[iHand], vExtent);

class'QuadForcePawn'しかし、私はその部分を変数に置き換えたいと思っています。私はこれを行う方法を理解することができませんでした。

これは、 を呼び出す関数を持つことができるようにするためです。その関数は、どの種類のを探すTraceActorsかを伝える引数を取ります。Actors

4

1 に答える 1

3

技術的には、TraceActors は実際にはイテレーター関数であり、キーワードと共に使用することを意図しているforeachため、実際に結果を変数に代入することはありません。

あなたの質問に答えるために、使用したいのはクラス参照変数です。関数の例は次のようになります (TraceActors には実際にはさらに多くのパラメーターが必要ですが、簡潔にするために省略しています)。

function TraceFor (class<Actor> traceClass)
{
    local Actor A;

    foreach TraceActors(traceClass, A)
    {
        // do work here
    }
}

クラス参照変数はclassキーワードで宣言され、オプションで<>構文を使用して、それに割り当てることができるクラスを制限できます。class<Actor>Actor または Actor のサブクラスのみを割り当てることができるクラス参照変数を宣言します。上記の関数の例では、 への呼び出しは正常に機能しますTraceFor(class'Pawn')が、 への呼び出しはTraceFor(class'Object')コンパイルに失敗します。

TraceActors 呼び出しの結果を返したい場合は、結果の配列を作成して返す方法があります。

// Returns an array of Actors of the passed in type.
function TraceFor (class<Actor> traceClass, out array<Actor> results)
{
    local Actor A;

    foreach TraceActors(traceClass, A)
    {
        results.AddItem(A);
    }
}
于 2013-02-07T20:16:22.450 に答える