Как передать класс в качестве аргумента функции в 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);
}
}