Note that bCanCacheResult is stored in the condition inside world condition definition, and is the same for all instances of the world condition query state. Sometimes the caching status also relies on the input data, say, a condition may operate with a component or interface of a given actor, one of which may not have invalidation callbacks. In such case we can use some data in the condition state to decide the caching status of the result when returning it from IsTrue(): FWorldConditionResult FWorldConditionFoo::IsTrue(const FWorldConditionContext& Context) const { FStateType& State = Context.GetState(*this);