Я не знаю ни одного языка программирования, обеспечивающего такую же функциональность, как "состояния" в UnrealScript. Состояния в UnrealScript не похожи на обычные конечные автоматы. Они больше похожи на слои, которые вы можете поместить поверх объектов. Слои, которые перехватывают вызовы методов и имеют доступ к внутреннему состоянию объекта.
Начиная с UnrealEngine3, вы также можете складывать состояния, таким образом, иметь более одного активного слоя.
Например:
function bar()
{
// print quux
}
state S1
{
function foo()
{
// print foo
}
}
state S2
{
function foo()
{
// print bar
}
function bar()
{
// print bar
}
}
Теперь, когда вы перейдете в состояние S2 и вызовете foo () и bar (), вы увидите «bar bar»
Когда вы перейдете в состояние S1 (из начального состояния или из S2) и вызовете те же методы, вы увидите «foo quux».
Однако, когда вы находитесь в S2 и нажимаете S1 в стеке состояний, вы увидите «foo bar» при вызове foo () bar () вместо «foo quux».
В любом случае, вернитесь к первоначальному вопросу. Один из способов получить те же функциональные возможности состояния, которые предусмотрены в UnrealScript, - это использование языка AOP, который обеспечивает динамический способ включения / отключения аспектов во время выполнения.