{"id":431259,"date":"2024-09-04T21:00:15","date_gmt":"2024-09-04T21:00:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=431259"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=431259","title":{"rendered":"<span>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 Unreal Engine 5<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u041f\u0440\u0438\u0432\u0435\u0442!<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u0445 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f C++ \u043a\u043e\u0434\u0430. \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 C++ \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 &#171;Blueprint \u0441\u0445\u0435\u043c&#187;.<\/p>\n<h2>FFrame<\/h2>\n<p>FFrame &#8212; \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c UFunction <strong>(1*)<\/strong>), \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Locals), &#171;\u0431\u0430\u0439\u0442\u043a\u043e\u0434&#187; \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0439\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code), \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 FFrame \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u044e), \u0438 \u043f\u0440.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 FFrame \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 UFunction) (\u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 FFrame \u0445\u0440\u0430\u043d\u0438\u0442 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 (\u043a\u0430\u043a \u0438 Locals)).<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 FFrame:<\/p>\n<pre><code class=\"cpp\">struct FFrame : public FOutputDevice { public: \/\/ Variables. UFunction* Node; - \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f UObject* Object; - \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Node uint8* Code; - \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 uint8* Locals; - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438  FProperty* MostRecentProperty; uint8* MostRecentPropertyAddress; uint8* MostRecentPropertyContainer;  \/** The execution flow stack for compiled Kismet code *\/ FlowStackType FlowStack;  \/** Previous frame on the stack *\/ FFrame* PreviousFrame;  \/** contains information on any out parameters *\/ FOutParmRec* OutParms;  \/** If a class is compiled in then this is set to the property chain for compiled-in functions. In that case, we follow the links to setup the args instead of executing by code. *\/ FField* PropertyChainForCompiledIn;  \/** Currently executed native function *\/ UFunction* CurrentNativeFunction;  #if UE_USE_VIRTUAL_STACK_ALLOCATOR_FOR_SCRIPT_VM FVirtualStackAllocator* CachedThreadVirtualStackAllocator; #endif  \/** Previous tracking frame *\/ FFrame* PreviousTrackingFrame;  bool bArrayContextFailed;  \/** If this flag gets set (usually from throwing a EBlueprintExceptionType::AbortExecution exception), execution shall immediately stop and return *\/ bool bAbortingExecution;  #if PER_FUNCTION_SCRIPT_STATS \/** Increment for each PreviousFrame on the stack (Max 255) *\/ uint8 DepthCounter; #endif public:  \/\/ Constructors. FFrame( UObject* InObject, UFunction* InNode, void* InLocals, FFrame* InPreviousFrame = NULL, FField* InPropertyChainForCompiledIn = NULL );  virtual ~FFrame() { #if DO_BLUEPRINT_GUARD FBlueprintContextTracker&amp; BlueprintExceptionTracker = FBlueprintContextTracker::Get(); if (BlueprintExceptionTracker.ScriptStack.Num()) { BlueprintExceptionTracker.ScriptStack.Pop(EAllowShrinking::No); }  \/\/ ensure that GTopTrackingStackFrame is accurate if (BlueprintExceptionTracker.ScriptStack.Num() == 0) { ensure(PreviousTrackingFrame == nullptr); } else { ensure(BlueprintExceptionTracker.ScriptStack.Last() == PreviousTrackingFrame); } #endif PopThreadLocalTopStackFrame(PreviousTrackingFrame);  if (PreviousTrackingFrame) { \/\/ we propagate bAbortingExecution to frames below to avoid losing abort state \/\/ across heterogeneous frames (eg. bpvm -&gt; c++ -&gt; bpvm) PreviousTrackingFrame-&gt;bAbortingExecution |= bAbortingExecution; } }  \/\/ Functions. COREUOBJECT_API void Step(UObject* Context, RESULT_DECL);  \/** Convenience function that calls Step, but also returns true if both MostRecentProperty and MostRecentPropertyAddress are non-null. *\/ FORCEINLINE_DEBUGGABLE bool StepAndCheckMostRecentProperty(UObject* Context, RESULT_DECL);  \/** Replacement for Step that uses an explicitly specified property to unpack arguments **\/ COREUOBJECT_API void StepExplicitProperty(void*const Result, FProperty* Property);  \/** Replacement for Step that checks the for byte code, and if none exists, then PropertyChainForCompiledIn is used. Also, makes an effort to verify that the params are in the correct order and the types are compatible. **\/ template&lt;class TProperty&gt; FORCEINLINE_DEBUGGABLE void StepCompiledIn(void* Result); FORCEINLINE_DEBUGGABLE void StepCompiledIn(void* Result, const FFieldClass* ExpectedPropertyType);  \/** Replacement for Step that checks the for byte code, and if none exists, then PropertyChainForCompiledIn is used. Also, makes an effort to verify that the params are in the correct order and the types are compatible. **\/ template&lt;class TProperty, typename TNativeType&gt; FORCEINLINE_DEBUGGABLE TNativeType&amp; StepCompiledInRef(void*const TemporaryBuffer);  COREUOBJECT_API virtual void Serialize( const TCHAR* V, ELogVerbosity::Type Verbosity, const class FName&amp; Category ) override;  COREUOBJECT_API static void KismetExecutionMessage(const TCHAR* Message, ELogVerbosity::Type Verbosity, FName WarningId = FName());  \/** Returns the current script op code *\/ const uint8 PeekCode() const { return *Code; }  \/** Skips over the number of op codes specified by NumOps *\/ void SkipCode(const int32 NumOps) { Code += NumOps; }  template&lt;typename T&gt; T Read(); template&lt;typename TNumericType&gt; TNumericType ReadInt(); float ReadFloat(); double ReadDouble(); ScriptPointerType ReadPointer(); FName ReadName(); UObject* ReadObject(); int32 ReadWord(); FProperty* ReadProperty();  \/** May return null *\/ FProperty* ReadPropertyUnchecked();  \/**  * Reads a value from the bytestream, which represents the number of bytes to advance  * the code pointer for certain expressions.  *  * @paramExpressionFieldreceives a pointer to the field representing the expression; used by various execs  *to drive VM logic  *\/ CodeSkipSizeType ReadCodeSkipCount();  \/**  * Reads a value from the bytestream which represents the number of bytes that should be zero'd out if a NULL context  * is encountered  *  * @paramExpressionFieldreceives a pointer to the field representing the expression; used by various execs  *to drive VM logic  *\/ VariableSizeType ReadVariableSize(FProperty** ExpressionField);  \/**   * This will return the StackTrace of the current callstack from the last native entry point  **\/ COREUOBJECT_API FString GetStackTrace() const;  \/**  * This will return the StackTrace of the current callstack from the last native entry point  *   * @param StringBuilder to populate  **\/ COREUOBJECT_API void GetStackTrace(FStringBuilderBase&amp; StringBuilder) const;  \/** * This will return the StackTrace of the all script frames currently active *  * @parambReturnEmpty if true, returns empty string when no script callstack found * @parambTopOfStackOnly if true only returns the top of the callstack **\/ COREUOBJECT_API static FString GetScriptCallstack(bool bReturnEmpty = false, bool bTopOfStackOnly = false);  \/** * This will return the StackTrace of the all script frames currently active * * @paramStringBuilder to populate * @parambReturnEmpty if true, returns empty string when no script callstack found * @parambTopOfStackOnly if true only returns the top of the callstack **\/ COREUOBJECT_API static void GetScriptCallstack(FStringBuilderBase&amp; StringBuilder, bool bReturnEmpty = false, bool bTopOfStackOnly = false);  \/**   * This will return a string of the form \"ScopeName.FunctionName\" associated with this stack frame:  *\/ UE_DEPRECATED(5.1, \"Please use GetStackDescription(FStringBuilderBase&amp;).\") COREUOBJECT_API FString GetStackDescription() const;  \/** * This will append a string of the form \"ScopeName.FunctionName\" associated with this stack frame * * @paramStringBuilder to populate **\/ COREUOBJECT_API void GetStackDescription(FStringBuilderBase&amp; StringBuilder) const;  #if DO_BLUEPRINT_GUARD static void InitPrintScriptCallstack(); #endif  COREUOBJECT_API static FFrame* PushThreadLocalTopStackFrame(FFrame* NewTopStackFrame); COREUOBJECT_API static void PopThreadLocalTopStackFrame(FFrame* NewTopStackFrame); COREUOBJECT_API static FFrame* GetThreadLocalTopStackFrame(); };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>(1*)<\/strong> <u>UFunction \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/u>:<\/p>\n<p>UFunction &#8212; \u043a\u043b\u0430\u0441\u0441, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0432\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u043c\u044b \u0443 \u0441\u0435\u0431\u044f \u0432 \u0430\u043a\u0442\u043e\u0440\u0435 (\u0438\u043b\u0438 \u0433\u0434\u0435 \u043b\u0438\u0431\u043e \u0435\u0449\u0435) \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c UFUNCTION, \u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 Unreal Header Tool) \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 UFunction \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u0442 \u0432 \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d (Unreal Header Tool) \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b). <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u0430\u043a\u0440\u043e\u0441 UFUNCTION \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Unreal Header Tool \u0444\u0443\u043d\u043a\u0446\u0438\u044e execName (Name &#8212; \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 Blueprint. \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e execName \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 UFunction.<\/p>\n<p><u>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e UFunction \u0432 Blueprint:<\/u><\/p>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0447\u0438\u0441\u0442\u043e Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0434\u043b\u044f \u043d\u0435\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 UFunction, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 Code \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 UFunction.<\/p>\n<h2>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b FFrame<\/h2>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043b\u0430\u0441\u0441\u0430 FFrame \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442:<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 Blueprint \u0432 Unreal Engine \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443: \u0431\u0430\u0439\u0442\u043a\u043e\u0434 (\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <strong>(2*)<\/strong>) \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 FFrame, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0436\u0435 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c Step.<\/p>\n<p><strong>(2*) <\/strong>\u0412\u0441\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 enum EExprToken \u0432 \u0444\u0430\u0439\u043b\u0435 Script.h:<\/p>\n<pre><code class=\"cpp\">enum EExprToken : uint8 { \/\/ Variable references. EX_LocalVariable= 0x00,\/\/ A local variable. EX_InstanceVariable= 0x01,\/\/ An object variable. EX_DefaultVariable= 0x02, \/\/ Default variable for a class context. \/\/= 0x03, EX_Return= 0x04,\/\/ Return from function. \/\/= 0x05, EX_Jump= 0x06,\/\/ Goto a local address in code. EX_JumpIfNot= 0x07,\/\/ Goto if not expression. \/\/= 0x08, EX_Assert= 0x09,\/\/ Assertion. \/\/= 0x0A, EX_Nothing= 0x0B,\/\/ No operation. EX_NothingInt32= 0x0C, \/\/ No operation with an int32 argument (useful for debugging script disassembly) \/\/= 0x0D, \/\/= 0x0E, EX_Let= 0x0F,\/\/ Assign an arbitrary size value to a variable. \/\/= 0x10, EX_BitFieldConst= 0x11, \/\/ assign to a single bit, defined by an FProperty EX_ClassContext= 0x12,\/\/ Class default object context. EX_MetaCast             = 0x13, \/\/ Metaclass cast. EX_LetBool= 0x14, \/\/ Let boolean variable. EX_EndParmValue= 0x15,\/\/ end of default value for optional function parameter EX_EndFunctionParms= 0x16,\/\/ End of function call parameters. EX_Self= 0x17,\/\/ Self object. EX_Skip= 0x18,\/\/ Skippable expression. EX_Context= 0x19,\/\/ Call a function through an object context. EX_Context_FailSilent= 0x1A, \/\/ Call a function through an object context (can fail silently if the context is NULL; only generated for functions that don't have output or return values). EX_VirtualFunction= 0x1B,\/\/ A function call with parameters. EX_FinalFunction= 0x1C,\/\/ A prebound function call with parameters. EX_IntConst= 0x1D,\/\/ Int constant. EX_FloatConst= 0x1E,\/\/ Floating point constant. EX_StringConst= 0x1F,\/\/ String constant. EX_ObjectConst    = 0x20,\/\/ An object constant. EX_NameConst= 0x21,\/\/ A name constant. EX_RotationConst= 0x22,\/\/ A rotation constant. EX_VectorConst= 0x23,\/\/ A vector constant. EX_ByteConst= 0x24,\/\/ A byte constant. EX_IntZero= 0x25,\/\/ Zero. EX_IntOne= 0x26,\/\/ One. EX_True= 0x27,\/\/ Bool True. EX_False= 0x28,\/\/ Bool False. EX_TextConst= 0x29, \/\/ FText constant EX_NoObject= 0x2A,\/\/ NoObject. EX_TransformConst= 0x2B, \/\/ A transform constant EX_IntConstByte= 0x2C,\/\/ Int constant that requires 1 byte. EX_NoInterface= 0x2D, \/\/ A null interface (similar to EX_NoObject, but for interfaces) EX_DynamicCast= 0x2E,\/\/ Safe dynamic class casting. EX_StructConst= 0x2F, \/\/ An arbitrary UStruct constant EX_EndStructConst= 0x30, \/\/ End of UStruct constant EX_SetArray= 0x31, \/\/ Set the value of arbitrary array EX_EndArray= 0x32, EX_PropertyConst= 0x33, \/\/ FProperty constant. EX_UnicodeStringConst   = 0x34, \/\/ Unicode string constant. EX_Int64Const= 0x35,\/\/ 64-bit integer constant. EX_UInt64Const= 0x36,\/\/ 64-bit unsigned integer constant. EX_DoubleConst= 0x37, \/\/ Double constant. EX_Cast= 0x38,\/\/ A casting operator which reads the type as the subsequent byte EX_SetSet= 0x39, EX_EndSet= 0x3A, EX_SetMap= 0x3B, EX_EndMap= 0x3C, EX_SetConst= 0x3D, EX_EndSetConst= 0x3E, EX_MapConst= 0x3F, EX_EndMapConst= 0x40, EX_Vector3fConst= 0x41,\/\/ A float vector constant. EX_StructMemberContext= 0x42, \/\/ Context expression to address a property within a struct EX_LetMulticastDelegate= 0x43, \/\/ Assignment to a multi-cast delegate EX_LetDelegate= 0x44, \/\/ Assignment to a delegate EX_LocalVirtualFunction= 0x45, \/\/ Special instructions to quickly call a virtual function that we know is going to run only locally EX_LocalFinalFunction= 0x46, \/\/ Special instructions to quickly call a final function that we know is going to run only locally \/\/= 0x47, \/\/ CST_ObjectToBool EX_LocalOutVariable= 0x48, \/\/ local out (pass by reference) function parameter \/\/= 0x49, \/\/ CST_InterfaceToBool EX_DeprecatedOp4A= 0x4A, EX_InstanceDelegate= 0x4B,\/\/ const reference to a delegate or normal function object EX_PushExecutionFlow= 0x4C, \/\/ push an address on to the execution flow stack for future execution when a EX_PopExecutionFlow is executed.   Execution continues on normally and doesn't change to the pushed address. EX_PopExecutionFlow= 0x4D, \/\/ continue execution at the last address previously pushed onto the execution flow stack. EX_ComputedJump= 0x4E,\/\/ Goto a local address in code, specified by an integer value. EX_PopExecutionFlowIfNot = 0x4F, \/\/ continue execution at the last address previously pushed onto the execution flow stack, if the condition is not true. EX_Breakpoint= 0x50, \/\/ Breakpoint.  Only observed in the editor, otherwise it behaves like EX_Nothing. EX_InterfaceContext= 0x51,\/\/ Call a function through a native interface variable EX_ObjToInterfaceCast   = 0x52,\/\/ Converting an object reference to native interface variable EX_EndOfScript= 0x53, \/\/ Last byte in script code EX_CrossInterfaceCast= 0x54, \/\/ Converting an interface variable reference to native interface variable EX_InterfaceToObjCast   = 0x55, \/\/ Converting an interface variable reference to an object \/\/= 0x56, \/\/= 0x57, \/\/= 0x58, \/\/= 0x59, EX_WireTracepoint= 0x5A, \/\/ Trace point.  Only observed in the editor, otherwise it behaves like EX_Nothing. EX_SkipOffsetConst= 0x5B, \/\/ A CodeSizeSkipOffset constant EX_AddMulticastDelegate = 0x5C, \/\/ Adds a delegate to a multicast delegate's targets EX_ClearMulticastDelegate = 0x5D, \/\/ Clears all delegates in a multicast target EX_Tracepoint= 0x5E, \/\/ Trace point.  Only observed in the editor, otherwise it behaves like EX_Nothing. EX_LetObj= 0x5F,\/\/ assign to any object ref pointer EX_LetWeakObjPtr= 0x60, \/\/ assign to a weak object pointer EX_BindDelegate= 0x61, \/\/ bind object and name to delegate EX_RemoveMulticastDelegate = 0x62, \/\/ Remove a delegate from a multicast delegate's targets EX_CallMulticastDelegate = 0x63, \/\/ Call multicast delegate EX_LetValueOnPersistentFrame = 0x64, EX_ArrayConst= 0x65, EX_EndArrayConst= 0x66, EX_SoftObjectConst= 0x67, EX_CallMath= 0x68, \/\/ static pure function from on local call space EX_SwitchValue= 0x69, EX_InstrumentationEvent= 0x6A, \/\/ Instrumentation event EX_ArrayGetByRef= 0x6B, EX_ClassSparseDataVariable = 0x6C, \/\/ Sparse data variable EX_FieldPathConst= 0x6D, \/\/= 0x6E, \/\/= 0x6F, EX_AutoRtfmTransact     = 0x70, \/\/ AutoRTFM: run following code in a transaction EX_AutoRtfmStopTransact = 0x71, \/\/ AutoRTFM: if in a transaction, abort or break, otherwise no operation EX_AutoRtfmAbortIfNot   = 0x72, \/\/ AutoRTFM: evaluate bool condition, abort transaction on false EX_Max= 0xFF, };<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0430\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 FFrame \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>\n<h2>Code<\/h2>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f Code (\u0431\u0430\u0439\u0442\u043a\u043e\u0434) \u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>&#8230; EX_Assert [\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f EX_Assert] EX_DefaultVariable [\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f EX_DefaultVariable] &#8230;<\/p>\n<p>\u0412\u0435\u0441\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043d\u0438\u0445.<\/p>\n<p>\u0421\u0430\u043c\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u0442\u0430\u043a \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c UObject \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041e\u0431 \u044d\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0430\u043c\u043e\u0433\u043e FFrame:<\/p>\n<pre><code class=\"cpp\">template&lt;typename TNumericType&gt; TNumericType ReadInt(); - \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code, \u043a\u0430\u043a int float ReadFloat(); - \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code, \u043a\u0430\u043a float FName ReadName(); - \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code, \u043a\u0430\u043a FName UObject* ReadObject(); - \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code, \u043a\u0430\u043a UObject int32 ReadWord();<\/code><\/pre>\n<h2>Step<\/h2>\n<p>\u0421\u043c\u044b\u0441\u043b \u043c\u0435\u0442\u043e\u0434\u0430 Step \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435 (Code).<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 Step:<\/p>\n<pre><code class=\"cpp\">void FFrame::Step(UObject* Context, RESULT_DECL) \/\/ (3*) { int32 B = *Code++; - \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f Code \u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. (GNatives[B])(Context,*this,RESULT_PARAM); - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 B (\u0432\u044b\u0437\u043e\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 GNatives \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443 B). }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c 255.<\/p>\n<\/div>\n<\/details>\n<p><strong>(3*) <\/strong>\u041c\u0430\u043a\u0440\u043e\u0441 RESULT_DECL \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"cpp\">#define RESULT_PARAM Z_Param__Result #define RESULT_DECL void*const RESULT_PARAM<\/code><\/pre>\n<h2>GNatives<\/h2>\n<p>\u041a\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 Step \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 GNatives \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 B.<\/p>\n<p>\u0421\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432 GNatives \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"cpp\">FNativeFuncPtr GNatives[EX_Max];<\/code><\/pre>\n<p>\u0413\u0434\u0435 FNativeFuncPtr \u044d\u0442\u043e<\/p>\n<pre><code class=\"cpp\">typedef void (*FNativeFuncPtr)(UObject* Context, FFrame&amp; TheStack, RESULT_DECL);<\/code><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0442\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u0440\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 (\u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e), \u043e\u0431\u044a\u0435\u043a\u0442 FFrame \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/p>\n<h2>IMPLEMENT_VM_FUNCTION<\/h2>\n<p>IMPLEMENT_VM_FUNCTION &#8212; \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 GNatives.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 IMPLEMENT_VM_FUNCTION:<\/p>\n<pre><code class=\"cpp\">#define IMPLEMENT_VM_FUNCTION(BytecodeIndex, func) \\ - \/ * \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u044b * \/ STORE_INSTRUCTION_NAME(BytecodeIndex) \\ IMPLEMENT_FUNCTION(func) \\ static uint8 UObject##func##BytecodeTemp = GRegisterNative( BytecodeIndex, &amp;UObject::func ); - \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 func \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 GNatives.<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<pre><code class=\"cpp\">DEFINE_FUNCTION(UObject::execVirtualFunction) - \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 void UObject::execVirtualFunction( UObject* Context, FFrame&amp; Stack, RESULT_DECL ) { \/\/ Call the virtual function. P_THIS-&gt;CallFunction( Stack, RESULT_PARAM, P_THIS-&gt;FindFunctionChecked(Stack.ReadName()) ); - \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 (4*) } IMPLEMENT_VM_FUNCTION( EX_VirtualFunction, execVirtualFunction ); - \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435) \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 GNatives.<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0432 Step \u044d\u0442\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0441\u044f \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435, \u0442\u043e FFrame \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0438\u0434\u0443\u0449\u0443\u044e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 EX_VirtualFunction \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f execVirtualFunction, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0436\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430).<\/p>\n<p><strong>(4*)<\/strong> \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 P_THIS:<\/p>\n<pre><code class=\"cpp\">#define P_THIS_OBJECT(Context) #define P_THIS_CAST(ClassType)((ClassType*)P_THIS_OBJECT) #define P_THISP_THIS_CAST(ThisClass)<\/code><\/pre>\n<p>ThisClass &#8212; \u044d\u0442\u043e typedef, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 DECLARE_CLASS (\u0432\u044b\u0437\u043e\u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 DECLARE_CLASS \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 UCLASS).<\/p>\n<p>ThisClass \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f \u043a\u043b\u0430\u0441\u0441\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 UCLASS.<\/p>\n<h2>execVirtualFunction<\/h2>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0442\u0435\u043f\u0435\u0440\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 execVirtualFunction.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f ReadName \u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u043e, \u043d\u0430 \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 EX_VirtualFunction \u0441\u0440\u0430\u0437\u0443 \u0438\u0434\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f FindFunctionChecked \u0438\u0449\u0435\u0442 \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 (\u043e\u0431\u044a\u0435\u043a\u0442\u0435 UObject \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f).<\/p>\n<h2>CallFunction<\/h2>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f CallFunction \u043b\u0438\u0431\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 Invoke (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u0438), \u043b\u0438\u0431\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e FFrame (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0438\u0441\u0442\u043e Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<\/p>\n<p><strong>1) \u0427\u0435\u0440\u0435\u0437 Invoke:<\/strong><\/p>\n<pre><code class=\"cpp\">Function-&gt;Invoke(this, Stack, RESULT_PARAM);<\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f Invoke \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">(*Func)(Obj, Stack, RESULT_PARAM)<\/code><\/pre>\n<p>\u0413\u0434\u0435 Func &#8212; \u044d\u0442\u043e \u043f\u043e\u043b\u0435 UFunction \u0442\u0438\u043f\u0430 FNativeFuncPtr.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 Unreal Header Tool (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e execName), \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0435 Func. \u041d\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 C++ \u0438 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c UFUNCTION. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0436\u0435 \u0447\u0438\u0441\u0442\u043e Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u0435\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 UFunction \u043f\u043e\u043b\u0435 Func \u043f\u0443\u0441\u0442\u043e. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (Script.GetData(), \u0433\u0434\u0435 Script \u044d\u0442\u043e \u043f\u043e\u043b\u0435 UFunction).<\/p>\n<p><strong>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0432\u0438\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 execName:<\/strong><\/p>\n<p>\u041f\u0443\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c \u0430\u043a\u0442\u043e\u0440\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">UFUNCTION() void SetColor();<\/code><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f execSetColor \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0438\u0434:<\/p>\n<pre><code class=\"cpp\">DEFINE_FUNCTION(ABaseActor::execSetColor) - \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f \u0432 void ABaseActor::execSetColor( UObject* Context, FFrame&amp; Stack, RESULT_DECL ) { P_FINISH; P_NATIVE_BEGIN; P_THIS-&gt;SetColor(); P_NATIVE_END; }<\/code><\/pre>\n<p><strong>P_FINISH<\/strong> &#8212; \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u043b\u044f Code \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 Stack (\u0435\u0441\u043b\u0438 Code != nullptr) (\u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u0447\u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c. \u0421\u0430\u043c\u0430 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 P_FINISH \u043e\u0431 \u044d\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442: PARAMS_FINISH). \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435 \u0438\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 1 \u0431\u0430\u0439\u0442 (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e EX_Nothing \u0438\u043b\u0438 \u0447\u0442\u043e \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e EX_EndFunctionParms).<\/p>\n<p><strong>P_NATIVE_BEGIN<\/strong> &#8212; \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e ScopedNativeCallTimer \u0442\u0438\u043f\u0430 FScopedNativeTimer (\u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u0442\u0430\u0439\u043c\u0435\u0440 \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<\/p>\n<p><strong>P_THIS-&gt;SetColor()<\/strong> &#8212; \u043a\u0430\u0441\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 Context \u043a ThisClass, \u0438 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SetColor \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 Context (\u0435\u0441\u043b\u0438 \u0436\u0435 \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 RESULT_DECL \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0435\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435).<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 bool (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440), \u0442\u043e \u043f\u0435\u0440\u0435\u0434 P_FINISH \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0431\u044b \u043c\u0430\u043a\u0440\u043e\u0441 P_GET_UBOOL(Z_Param_tt); \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Stack.Code (\u0431\u0430\u0439\u0442\u043a\u043e\u0434) \u043d\u0430\u0448\u0435\u0433\u043e FFrame \u043a\u0430\u043a bool, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e Z_Param_tt.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f Z_Param_tt \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e SetColor.<\/p>\n<\/div>\n<\/details>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432 \u0441\u0442\u0435\u043a\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 EX_VirtualFunction \u0438\u0434\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0437\u0430\u0442\u0435\u043c \u0435\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u0442\u0435\u043a\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043d\u0446\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u0442\u0435\u043a\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f EX_EndFunctionParms).<\/p>\n<p><strong>2) \u0427\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e FFrame:<\/strong><\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0436\u0435 \u0447\u0438\u0441\u0442\u043e Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 CallFunction \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 ProcessScriptFunction:<\/p>\n<pre><code class=\"cpp\">ProcessScriptFunction(this, Function, Stack, RESULT_PARAM, ProcessInternal);<\/code><\/pre>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ProcessScriptFunction \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 FFrame, \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Locals \u043d\u043e\u0432\u043e\u0433\u043e FFrame. \u0410 \u0437\u0430\u0442\u0435\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ProcessScriptFunction \u0443\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f ProcessInternal, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 FFrame.<\/p>\n<p><strong>ProcessInternal:<\/strong><\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">DEFINE_FUNCTION(UObject::ProcessInternal)<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e ProcessLocalScriptFunction, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 UFunction \u0443\u0436\u0435 \u0432 \u043d\u043e\u0432\u043e\u043c FFrame, \u0433\u0434\u0435 \u0443 \u043d\u043e\u0432\u043e\u0433\u043e FFrame \u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435 Locals \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043b\u0430\u0434\u0443\u0442\u0441\u044f \u0432 Locals \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ProcessScriptFunction).<\/p>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043d\u043e\u0432\u043e\u043c FFrame \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0443\u0442\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 Step).<\/p>\n<p>\u041f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e EX_Return), \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0435\u0441\u0442\u044c) \u043a\u043b\u0430\u0434\u0435\u0442\u0441\u044f \u0432 RESULT_PARAM (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u044f\u043d\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 EX_VirtualFunction), \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ProcessLocalScriptFunction =&gt; \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 EX_VirtualFunction \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430.<\/p>\n<h2>\u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u0440\u0438\u043c\u0435\u0440\u0430<\/h2>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e &#171;Blueprint \u0441\u0445\u0435\u043c\u0443&#187;:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b7b\/a06\/357\/b7ba06357c4518e06715b03fd5f18d66.PNG\" width=\"646\" height=\"350\"\/><\/figure>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 FFrame \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f Event Tick. \u0415\u0433\u043e \u0431\u0430\u0439\u0442\u043a\u043e\u0434 (Code) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/255\/69b\/ead\/25569bead9efa8cf784e8bc5c20d7394.PNG\" width=\"723\" height=\"171\"\/><\/figure>\n<p>\u0413\u0434\u0435 EX_VT &#8212; \u044d\u0442\u043e EX_VirtualFunction,<\/p>\n<p>EX_PE &#8212; EX_ParamsEnd,<\/p>\n<p>VL &#8212; Vector Lenght,<\/p>\n<p>GV &#8212; Get Velocity.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Print String \u0438\u0434\u0435\u0442 \u0435\u0435 \u0432\u044b\u0437\u043e\u0432 (\u0447\u0435\u0440\u0435\u0437 Invoke, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e FFrame). \u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u0430 Print String \u0438\u0434\u0435\u0442 \u043b\u0438\u0431\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u0431\u0430\u0439\u0442 (P_FINISH &#8212; \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u0438), \u043b\u0438\u0431\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f EX_RETURN (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438). <\/p>\n<p>\u041f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u0437\u043e\u0432\u0430 Event Tick, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f EX_RETURN.<\/p>\n<h2>\u0418\u0442\u043e\u0433\u0438<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432 \u0431\u043b\u044e\u043f\u0440\u0438\u043d\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e \u043f\u043e\u0434 \u043d\u0438\u0445 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u0432\u043e\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b UFunction, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 FFrame (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 UFunction \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438) (\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 UFunction \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c C++ \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f \u0447\u0438\u0441\u0442\u044b\u0445 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0439). \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0433\u0440\u0443, \u0442\u043e Unreal Engine \u0438\u0434\u0435\u0442 \u043f\u043e \u044d\u0442\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0432 \u0431\u043b\u044e\u043f\u0440\u0438\u043d\u0442\u0430\u0445, \u0438 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u043b\u0438\u0431\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 FFrame (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0438\u0441\u0442\u043e\u0439 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438), \u043b\u0438\u0431\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e execName, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 Unreal Header Tool \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u043a\u0440\u043e\u0441 DECLARE_FUNCTION (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/840936\/\"> https:\/\/habr.com\/ru\/articles\/840936\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u041f\u0440\u0438\u0432\u0435\u0442!<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u0445 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f C++ \u043a\u043e\u0434\u0430. \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 C++ \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 &#171;Blueprint \u0441\u0445\u0435\u043c&#187;.<\/p>\n<h2>FFrame<\/h2>\n<p>FFrame &#8212; \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c UFunction <strong>(1*)<\/strong>), \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Locals), &#171;\u0431\u0430\u0439\u0442\u043a\u043e\u0434&#187; \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0439\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code), \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 FFrame \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u044e), \u0438 \u043f\u0440.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 FFrame \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 UFunction) (\u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 FFrame \u0445\u0440\u0430\u043d\u0438\u0442 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Code \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 (\u043a\u0430\u043a \u0438 Locals)).<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 FFrame:<\/p>\n<pre><code class=\"cpp\">struct FFrame : public FOutputDevice { public: \/\/ Variables. UFunction* Node; - \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f UObject* Object; - \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Node uint8* Code; - \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 uint8* Locals; - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438  FProperty* MostRecentProperty; uint8* MostRecentPropertyAddress; uint8* MostRecentPropertyContainer;  \/** The execution flow stack for compiled Kismet code *\/ FlowStackType FlowStack;  \/** Previous frame on the stack *\/ FFrame* PreviousFrame;  \/** contains information on any out parameters *\/ FOutParmRec* OutParms;  \/** If a class is compiled in then this is set to the property chain for compiled-in functions. In that case, we follow the links to setup the args instead of executing by code. *\/ FField* PropertyChainForCompiledIn;  \/** Currently executed native function *\/ UFunction* CurrentNativeFunction;  #if UE_USE_VIRTUAL_STACK_ALLOCATOR_FOR_SCRIPT_VM FVirtualStackAllocator* CachedThreadVirtualStackAllocator; #endif  \/** Previous tracking frame *\/ FFrame* PreviousTrackingFrame;  bool bArrayContextFailed;  \/** If this flag gets set (usually from throwing a EBlueprintExceptionType::AbortExecution exception), execution shall immediately stop and return *\/ bool bAbortingExecution;  #if PER_FUNCTION_SCRIPT_STATS \/** Increment for each PreviousFrame on the stack (Max 255) *\/ uint8 DepthCounter; #endif public:  \/\/ Constructors. FFrame( UObject* InObject, UFunction* InNode, void* InLocals, FFrame* InPreviousFrame = NULL, FField* InPropertyChainForCompiledIn = NULL );  virtual ~FFrame() { #if DO_BLUEPRINT_GUARD FBlueprintContextTracker&amp; BlueprintExceptionTracker = FBlueprintContextTracker::Get(); if (BlueprintExceptionTracker.ScriptStack.Num()) { BlueprintExceptionTracker.ScriptStack.Pop(EAllowShrinking::No); }  \/\/ ensure that GTopTrackingStackFrame is accurate if (BlueprintExceptionTracker.ScriptStack.Num() == 0) { ensure(PreviousTrackingFrame == nullptr); } else { ensure(BlueprintExceptionTracker.ScriptStack.Last() == PreviousTrackingFrame); } #endif PopThreadLocalTopStackFrame(PreviousTrackingFrame);  if (PreviousTrackingFrame) { \/\/ we propagate bAbortingExecution to frames below to avoid losing abort state \/\/ across heterogeneous frames (eg. bpvm -&gt; c++ -&gt; bpvm) PreviousTrackingFrame-&gt;bAbortingExecution |= bAbortingExecution; } }  \/\/ Functions. COREUOBJECT_API void Step(UObject* Context, RESULT_DECL);  \/** Convenience function that calls Step, but also returns true if both MostRecentProperty and MostRecentPropertyAddress are non-null. *\/ FORCEINLINE_DEBUGGABLE bool StepAndCheckMostRecentProperty(UObject* Context, RESULT_DECL);  \/** Replacement for Step that uses an explicitly specified property to unpack arguments **\/ COREUOBJECT_API void StepExplicitProperty(void*const Result, FProperty* Property);  \/** Replacement for Step that checks the for byte code, and if none exists, then PropertyChainForCompiledIn is used. Also, makes an effort to verify that the params are in the correct order and the types are compatible. **\/ template&lt;class TProperty&gt; FORCEINLINE_DEBUGGABLE void StepCompiledIn(void* Result); FORCEINLINE_DEBUGGABLE void StepCompiledIn(void* Result, const FFieldClass* ExpectedPropertyType);  \/** Replacement for Step that checks the for byte code, and if none exists, then PropertyChainForCompiledIn is used. Also, makes an effort to verify that the params are in the correct order and the types are compatible. **\/ template&lt;class TProperty, typename TNativeType&gt; FORCEINLINE_DEBUGGABLE TNativeType&amp; StepCompiledInRef(void*const TemporaryBuffer);  COREUOBJECT_API virtual void Serialize( const TCHAR* V, ELogVerbosity::Type Verbosity, const class FName&amp; Category ) override;  COREUOBJECT_API static void KismetExecutionMessage(const TCHAR* Message, ELogVerbosity::Type Verbosity, FName WarningId = FName());  \/** Returns the current script op code *\/ const uint8 PeekCode() const { return *Code; }  \/** Skips over the number of op codes specified by NumOps *\/ void SkipCode(const int32 NumOps) { Code += NumOps; }  template&lt;typename T&gt; T Read(); template&lt;typename TNumericType&gt; TNumericType ReadInt(); float ReadFloat(); double ReadDouble(); ScriptPointerType ReadPointer(); FName ReadName(); UObject* ReadObject(); int32 ReadWord(); FProperty* ReadProperty();  \/** May return null *\/ FProperty* ReadPropertyUnchecked();  \/**  * Reads a value from the bytestream, which represents the number of bytes to advance  * the code pointer for certain expressions.  *  * @paramExpressionFieldreceives a pointer to the field representing the expression; used by various execs  *to drive VM logic  *\/ CodeSkipSizeType ReadCodeSkipCount();  \/**  * Reads a value from the bytestream which represents the number of bytes that should be zero'd out if a NULL context  * is encountered  *  * @paramExpressionFieldreceives a pointer to the field representing the expression; used by various execs  *to drive VM logic  *\/ VariableSizeType ReadVariableSize(FProperty** ExpressionField);  \/**   * This will return the StackTrace of the current callstack from the last native entry point  **\/ COREUOBJECT_API FString GetStackTrace() const;  \/**  * This will return the StackTrace of the current callstack from the last native entry point  *   * @param StringBuilder to populate  **\/ COREUOBJECT_API void GetStackTrace(FStringBuilderBase&amp; StringBuilder) const;  \/** * This will return the StackTrace of the all script frames currently active *  * @parambReturnEmpty if true, returns empty string when no script callstack found * @parambTopOfStackOnly if true only returns the top of the callstack **\/ COREUOBJECT_API static FString GetScriptCallstack(bool bReturnEmpty = false, bool bTopOfStackOnly = false);  \/** * This will return the StackTrace of the all script frames currently active * * @paramStringBuilder to populate * @parambReturnEmpty if true, returns empty string when no script callstack found * @parambTopOfStackOnly if true only returns the top of the callstack **\/ COREUOBJECT_API static void GetScriptCallstack(FStringBuilderBase&amp; StringBuilder, bool bReturnEmpty = false, bool bTopOfStackOnly = false);  \/**   * This will return a string of the form \"ScopeName.FunctionName\" associated with this stack frame:  *\/ UE_DEPRECATED(5.1, \"Please use GetStackDescription(FStringBuilderBase&amp;).\") COREUOBJECT_API FString GetStackDescription() const;  \/** * This will append a string of the form \"ScopeName.FunctionName\" associated with this stack frame * * @paramStringBuilder to populate **\/ COREUOBJECT_API void GetStackDescription(FStringBuilderBase&amp; StringBuilder) const;  #if DO_BLUEPRINT_GUARD static void InitPrintScriptCallstack(); #endif  COREUOBJECT_API static FFrame* PushThreadLocalTopStackFrame(FFrame* NewTopStackFrame); COREUOBJECT_API static void PopThreadLocalTopStackFrame(FFrame* NewTopStackFrame); COREUOBJECT_API static FFrame* GetThreadLocalTopStackFrame(); };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><strong>(1*)<\/strong> <u>UFunction \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 C++ \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/u>:<\/p>\n<p>UFunction &#8212; \u043a\u043b\u0430\u0441\u0441, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0432\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u043c\u044b \u0443 \u0441\u0435\u0431\u044f \u0432 \u0430\u043a\u0442\u043e\u0440\u0435 (\u0438\u043b\u0438 \u0433\u0434\u0435 \u043b\u0438\u0431\u043e \u0435\u0449\u0435) \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c UFUNCTION, \u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 Unreal Header Tool) \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 UFunction \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u0442 \u0432 \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d (Unreal Header Tool) \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b). <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u0430\u043a\u0440\u043e\u0441 UFUNCTION \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Unreal Header Tool \u0444\u0443\u043d\u043a\u0446\u0438\u044e execName (Name &#8212; \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 Blueprint. \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e execName \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 UFunction.<\/p>\n<p><u>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e UFunction \u0432 Blueprint:<\/u><\/p>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0447\u0438\u0441\u0442\u043e Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0434\u043b\u044f \u043d\u0435\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 UFunction, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 Code \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 UFunction.<\/p>\n<h2>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b FFrame<\/h2>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043b\u0430\u0441\u0441\u0430 FFrame \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442:<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 Blueprint \u0432 Unreal Engine \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443: \u0431\u0430\u0439\u0442\u043a\u043e\u0434 (\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <strong>(2*)<\/strong>) \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 Blueprint \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 FFrame, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0436\u0435 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c Step.<\/p>\n<p><strong>(2*) <\/strong>\u0412\u0441\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 enum EExprToken \u0432 \u0444\u0430\u0439\u043b\u0435 Script.h:<\/p>\n<pre><code class=\"cpp\">enum EExprToken : uint8 { \/\/ Variable references. EX_LocalVariable= 0x00,\/\/ A local variable. EX_InstanceVariable= 0x01,\/\/ An object variable. EX_DefaultVariable= 0x02, \/\/ Default variable for a class context. \/\/= 0x03, EX_Return= 0x04,\/\/ Return from function. \/\/= 0x05, EX_Jump= 0x06,\/\/ Goto a local address in code. EX_JumpIfNot= 0x07,\/\/ Goto if not expression. \/\/= 0x08, EX_Assert= 0x09,\/\/ Assertion. \/\/= 0x0A, EX_Nothing= 0x0B,\/\/ No operation. EX_NothingInt32= 0x0C, \/\/ No operation with an int32 argument (useful for debugging script disassembly) \/\/= 0x0D, \/\/= 0x0E, EX_Let= 0x0F,\/\/ Assign an arbitrary size value to a variable. \/\/= 0x10, EX_BitFieldConst= 0x11, \/\/ assign to a single bit, defined by an FProperty EX_ClassContext= 0x12,\/\/ Class default object context. EX_MetaCast             = 0x13, \/\/ Metaclass cast. EX_LetBool= 0x14, \/\/ Let boolean variable. EX_EndParmValue= 0x15,\/\/ end of default value for optional function parameter EX_EndFunctionParms= 0x16,\/\/ End of function call parameters. EX_Self= 0x17,\/\/ Self object. EX_Skip= 0x18,\/\/ Skippable expression. EX_Context= 0x19,\/\/ Call a function through<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-431259","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/431259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=431259"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/431259\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=431259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=431259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=431259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}