Как передать класс в качестве аргумента функции в UnrealScript?

Я хочу делать

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

но я хочу заменить переменную для class'QuadForcePawn' часть. Я не смог понять, как это сделать.

Это так, я могу иметь функцию, которая вызывает TraceActorsи эта функция принимает аргумент, сообщающий ему, какие виды Actors искать.

1 ответ

Решение

Технически, 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);
    }
}
Другие вопросы по тегам