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 回答