Yarn Spinner 3 is now available!
Buy Now
LogoLogo
HomepageDiscordItchPatreonAsset Store
Yarn Spinner 3.0
Yarn Spinner 3.0
  • ⭐Start Here
    • Yarn Spinner 3
  • Beginner's Guide
  • About Yarn Spinner
  • Crediting Yarn Spinner
  • FAQ
  • Writing Yarn Scripts
    • ⭐First Steps with Scripting
    • Yarn Spinner Editor
      • Writing Yarn in VS Code
      • Previewing Your Dialogue
      • Writing Together
    • Scripting Fundamentals
      • Nodes and Lines
      • Options
      • Jump Command
      • Detour Command
      • Variables
      • Flow Control
      • Once
      • Smart Variables
      • Enums
      • Commands
      • Functions
      • Line Groups
    • Advanced Scripting
      • Node Groups
      • Storylets and Saliency Primer
      • Saliency
      • Tags and Metadata
      • Markup
      • Shadow Lines
  • Yarn Spinner for Unity
    • ⭐First Steps with Unity
    • Installation for Unity
      • Unity Quick Start
    • Yarn Spinner in Unity Scenes
      • Unity Projects + Yarn Spinner
    • Your First Yarn Spinner Game
    • Commands and Functions
    • Localisation and Assets
      • In-built Localisation
      • Unity Localisation
    • Samples
      • Welcome
      • Feature Tour
      • Theming Default Presenters
      • Create a Phone Chat View
      • Make Options Timeout
      • Voice Over and Localisation
      • Background Chatter
      • Inline Events
      • Replacement Markup
      • Storylets and Saliency
        • Basic Storylets and Saliency
        • Advanced Saliency
        • Custom Saliency Strategies
    • Unity Add-Ons
      • Speech Bubbles
        • Installing Speech Bubbles
        • Using Speech Bubbles
        • Speech Bubble Examples
      • Dialogue Wheel
        • Installing Dialogue Wheel
        • Using Six-Segment Wheel
        • Using Auto-Layout Wheel
        • Dialogue Wheel Examples
  • Components
    • Dialogue Runners and Systems
    • Dialogue Presenters
      • Line Presenter
      • Options Presenter
      • Line Advancer
      • Custom Dialogue Presenters
    • Variable Storage
      • In-Memory Variable Storage
      • Variable Storage
      • Custom Variable Storage Components
    • Line Provider
      • Built-in Localised Line Provider
      • Unity Localised Line Provider
    • Asynchronous Programming
  • Changelog
    • Upgrading from Yarn Spinner 2
  • Yarn Spinner for Other Engines
    • Godot
      • Overview
      • 📦Installation for Godot
      • 📥Importing Yarn Files
        • Yarn Projects
        • Yarn Scripts
      • 🧱Components
        • Dialogue Runner
        • Dialogue Presenters
          • Line Presenter
          • Options Presenter
          • Creating Custom Dialogue Views
        • Variable Storage
          • In-Memory Variable Storage
          • Custom Variable Storage Components
        • Line Provider
          • Text Line Provider
        • Markup Palette
      • 🤖Commands and Functions
      • 🗺️Localization
      • Advanced Guides
        • Implementing Custom Variable Storage
    • Unreal
      • 🧑🏼‍🏫Unreal Beta Quickstart
    • Bevy
      • ⚡Bevy Quick Start
      • 📥Compiling Yarn Files into Yarn Projects
      • 🧱Components
        • Dialogue Runner and a High Level Overview
        • Dialogue Views
        • Variable Storage
        • Assets
      • 🤖Custom Commands and Functions
        • Commands
        • Functions
      • 🗺️Localisations
      • 💡Frequently Asked Questions / "How Do I...?"
      • 🎁Bevy Samples
  • API
    • C#
      • Yarn.Utility Namespace
        • CRC32
          • GetChecksum(byte[])
          • GetChecksum(string)
          • GetChecksumString(string)
      • Yarn Namespace
        • Command
          • Text
        • CommandHandler
        • ConstantTypeProperty
          • Description
          • Type
          • Value
        • Dialogue
          • DefaultStartNodeName
          • Dialogue(Yarn.IVariableStorage)
          • Continue()
          • GetHeaders(string)
          • GetHeaderValue(string,string)
          • GetSaliencyOptionsForNodeGroup(string)
          • GetStringIDForNode(string)
          • GetTagsForNode(string)
          • HasSalientContent(string)
          • IsNodeGroup(string)
          • NodeExists(string)
          • SetNode(string)
          • SetProgram(Program)
          • SetSelectedOption(int)
          • Stop()
          • TryGetSmartVariable<T>(string,T)
          • UnloadAll()
          • CommandHandler
          • ContentSaliencyStrategy
          • CurrentNode
          • DialogueCompleteHandler
          • IsActive
          • Library
          • LineHandler
          • LogDebugMessage
          • LogErrorMessage
          • NodeCompleteHandler
          • NodeNames
          • NodeStartHandler
          • OptionsHandler
          • PrepareForLinesHandler
          • VariableStorage
        • DialogueCompleteHandler
        • DialogueException
        • EnumBase
          • EnumBase()
          • Description
          • Name
          • Parent
        • EnumType
          • EnumType(string,string,TypeBase)
          • Description
          • EnumCases
          • Name
          • Parent
          • RawType
        • FunctionType
          • FunctionType(IType,IType[])
          • Equals(IType)
          • GetParameterAt(int)
          • ToString()
          • Description
          • Name
          • Parameters
          • Parent
          • ReturnType
          • TypeMembers
          • VariadicParameterType
        • Header
          • KeyFieldNumber
          • ValueFieldNumber
          • Header()
          • Header(Header)
          • CalculateSize()
          • Clone()
          • Equals(object)
          • Equals(Header)
          • GetHashCode()
          • MergeFrom(pb::CodedInputStream)
          • MergeFrom(Header)
          • ToString()
          • WriteTo(pb::CodedOutputStream)
          • Descriptor
          • Key
          • Parser
          • Value
        • IMarkupParser
          • ParseMarkup(string,string)
        • ISmartVariableEvaluator
          • TryGetSmartVariable<T>(string,T)
        • IType
          • Description
          • Name
          • Parent
          • TypeMembers
        • ITypeMember
          • Type
        • IVariableAccess
          • GetVariableKind(string)
          • TryGetValue<T>(string,T?)
          • Program
          • SmartVariableEvaluator
        • IVariableStorage
          • Clear()
          • SetValue(string,bool)
          • SetValue(string,float)
          • SetValue(string,string)
        • IYarnValue
          • ConvertTo<T>()
        • Library
          • DeregisterFunction(string)
          • FunctionExists(string)
          • GenerateUniqueVisitedVariableForNode(string)
          • GetFunction(string)
          • ImportLibrary(Library)
          • RegisterFunction(string,Delegate)
          • RegisterFunction<TResult>(string,Func<TResult>)
          • RegisterFunction<T1, TResult>(string,Func<T1, TResult>)
          • RegisterFunction<T1, T2, TResult>(string,Func<T1, T2, TResult>)
          • RegisterFunction<T1, T2, T3, TResult>(string,Func<T1, T2, T3, TResult>)
          • RegisterFunction<T1, T2, T3, T4, TResult>(string,Func<T1, T2, T3, T4, TResult>)
          • RegisterFunction<T1, T2, T3, T4, T5, TResult>(string,Func<T1, T2, T3, T4, T5, TResult>)
        • Line
          • Line(string,string[])
          • ID
          • Substitutions
        • LineHandler
        • Logger
        • MemoryVariableStore
          • Clear()
          • GetVariableKind(string)
          • SetValue(string,bool)
          • SetValue(string,float)
          • SetValue(string,string)
          • TryGetValue<T>(string,T?)
          • Program
          • SmartVariableEvaluator
        • Node
          • NodeGroupHeader
          • ToString()
          • ContentSaliencyConditionComplexityScore
          • ContentSaliencyConditionVariables
          • Headers
          • Instructions
          • IsNodeGroupHub
          • Name
          • NodeGroup
          • Tags
          • TrackingVariableName
        • NodeCompleteHandler
        • NodeStartHandler
        • OptionSet
          • Options
          • Option
            • ID
            • IsAvailable
            • Line
        • OptionsHandler
        • PrepareForLinesHandler
        • Program
          • GetVariableKind(string)
          • LineIDsForNode(string)
          • ToString()
          • TryGetInitialValue<T>(string,T)
          • InitialValues
          • Name
          • Nodes
        • TypeBase
          • Equals(object)
          • Equals(TypeBase)
          • GetHashCode()
          • IsAncestorOf(TypeBase)
          • IsConvertibleTo(TypeBase)
          • ToString()
          • ConvertibleToTypes
          • Description
          • Methods
          • Name
          • Parent
          • TypeMembers
        • Types
          • Any
          • Boolean
          • Number
          • String
          • TypeMappings
        • VariableKind
          • Smart
          • Stored
          • Unknown
      • Yarn.Saliency Namespace
        • BestLeastRecentlyViewedSaliencyStrategy
          • BestLeastRecentlyViewedSaliencyStrategy(IVariableStorage)
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
        • BestSaliencyStrategy
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
        • ContentSaliencyContentType
          • Line
          • Node
        • ContentSaliencyOption
          • ContentSaliencyOption(string)
          • ComplexityScore
          • ContentID
          • ContentType
          • FailingConditionValueCount
          • PassingConditionValueCount
          • ViewCountKey
        • EnumerableRandomExtension
          • RandomElement<T>(IEnumerable<T>)
        • FirstSaliencyStrategy
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
        • IContentSaliencyStrategy
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
        • RandomBestLeastRecentlyViewedSaliencyStrategy
          • RandomBestLeastRecentlyViewedSaliencyStrategy(IVariableStorage)
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
      • Yarn.Markup Namespace
        • BuiltInMarkupReplacer
          • ProcessReplacementMarker(MarkupAttribute,StringBuilder,List<MarkupAttribute>,string)
        • IAttributeMarkerProcessor
          • ProcessReplacementMarker(MarkupAttribute,System.Text.StringBuilder,List<MarkupAttribute>,string)
        • LineParser
          • CharacterAttribute
          • CharacterAttributeNameProperty
          • NoMarkupAttribute
          • ReplacementMarkerContents
          • TrimWhitespaceProperty
          • DeregisterMarkerProcessor(string)
          • Dispose()
          • ExpandSubstitutions(string,IList<string>)
          • ParseString(string,string,bool)
          • RegisterMarkerProcessor(string,IAttributeMarkerProcessor)
          • MarkupDiagnostic
            • MarkupDiagnostic(string,int)
            • Equals(object)
            • Equals(MarkupDiagnostic)
            • GetHashCode()
            • M:Yarn.Markup.LineParser.MarkupDiagnostic.op_Equality(Yarn.Markup.LineParser.MarkupDiagnostic,Yarn.Markup.LineParser.MarkupDiagnostic)
            • M:Yarn.Markup.LineParser.MarkupDiagnostic.op_Inequality(Yarn.Markup.LineParser.MarkupDiagnostic,Yarn.Markup.LineParser.MarkupDiagnostic)
            • Column
            • Message
        • MarkupAttribute
          • Shift(int)
          • ToString()
          • TryGetProperty(string,bool)
          • TryGetProperty(string,int)
          • TryGetProperty(string,float)
          • TryGetProperty(string,string?)
          • TryGetProperty(string,MarkupValue)
          • Length
          • Name
          • Position
          • Properties
        • MarkupParseException
        • MarkupParseResult
          • MarkupParseResult(string,List<MarkupAttribute>)
          • DeleteRange(MarkupAttribute)
          • TextForAttribute(MarkupAttribute)
          • TryGetAttributeWithName(string,MarkupAttribute)
          • Attributes
          • Text
        • MarkupProperty
          • Name
          • Value
        • MarkupValue
          • ToString()
          • ToString(IFormatProvider)
          • BoolValue
          • FloatValue
          • IntegerValue
          • StringValue
          • Type
        • MarkupValueType
          • Bool
          • Float
          • Integer
          • String
        • TagType
          • Close
          • CloseAll
          • Open
          • SelfClosing
      • Yarn.Compiler Namespace
        • CompilationJob
          • CompilationType
          • Declarations
          • Files
          • Library
          • CreateFromFiles(IEnumerable<string>,Library?)
          • CreateFromFiles(string[])
          • CreateFromString(string,string,Library?,int)
          • CancellationToken
          • LanguageVersion
          • TypeDeclarations
          • VariableDeclarations
          • File
            • FileName
            • Source
          • Type
            • DeclarationsOnly
            • FullCompilation
            • StringsOnly
            • TypeCheck
        • CompilationResult
          • GetDescriptionForVariable(string)
          • GetLabelsForNode(string)
          • GetStringForKey(string)
          • ContainsErrors
          • ContainsImplicitStringTags
          • DebugInfo
          • Declarations
          • Diagnostics
          • FileTags
          • Program
          • ProjectDebugInfo
          • StringTable
          • UserDefinedTypes
        • Compiler
          • Compile(CompilationJob)
          • FlattenParseTree(IParseTree)
          • GetDocumentComments(CommonTokenStream,ParserRuleContext,bool)
          • GetLineIDForNodeName(string)
        • Declaration
          • ExternalDeclaration
          • CreateVariable(string,IType,IConvertible,string?)
          • ToString()
          • DefaultValue
          • Dependencies
          • Dependents
          • Description
          • InitialValueParserContext
          • IsImplicit
          • IsInlineExpansion
          • IsVariable
          • Name
          • Range
          • SourceFileLine
          • SourceFileName
          • SourceNodeName
          • Type
        • DeclarationBuilder
          • WithDefaultValue(System.IConvertible)
          • WithDescription(string?)
          • WithImplicit(bool)
          • WithName(string)
          • WithRange(Yarn.Compiler.Range)
          • WithSourceFileName(string)
          • WithSourceNodeName(string)
          • WithType(IType)
          • Declaration
        • Diagnostic
          • Diagnostic(string,IToken,string,DiagnosticSeverity)
          • Diagnostic(string,ParserRuleContext?,string,DiagnosticSeverity)
          • Diagnostic(string,string,DiagnosticSeverity)
          • Diagnostic(string,DiagnosticSeverity)
          • Diagnostic(string,Range,string,DiagnosticSeverity)
          • Equals(object)
          • GetHashCode()
          • ToString()
          • Column
          • Context
          • FileName
          • Line
          • Message
          • Range
          • Severity
          • DiagnosticSeverity
            • Error
            • Info
            • Warning
        • EnumTypeBuilder
          • FromEnum<TEnum>(string?)
        • FileParseResult
          • FileParseResult(string,IParseTree,CommonTokenStream)
          • Equals(object)
          • GetHashCode()
          • Name
          • Tokens
          • Tree
        • FunctionTypeBuilder
          • FromFunctionType(System.Type)
          • WithParameter(IType)
          • WithReturnType(IType)
          • WithVariadicParameterType(IType?)
          • FunctionType
        • IndentAwareLexer
          • IndentAwareLexer(ICharStream,TextWriter,TextWriter)
          • IsInWhenClause()
          • NextToken()
          • SetInWhenClause(bool)
          • Warnings
          • LexerWarning
            • Message
            • Token
        • NodeDebugInfo
          • NodeDebugInfo(string?,string)
          • GetLineInfo(int)
          • FileName
          • IsImplicit
          • NodeName
          • Range
          • LineInfo
            • FileName
            • NodeName
            • Position
        • Position
          • Equals(object)
          • GetHashCode()
          • M:Yarn.Compiler.Position.op_GreaterThanOrEqual(Yarn.Compiler.Position,Yarn.Compiler.Position)
          • M:Yarn.Compiler.Position.op_LessThanOrEqual(Yarn.Compiler.Position,Yarn.Compiler.Position)
          • ToString()
          • Character
          • IsValid
          • Line
        • Project
          • CurrentProjectFileVersion
          • WorkspaceRootPlaceholder
          • YarnSpinnerProjectVersion2
          • YarnSpinnerProjectVersion3
          • Project()
          • Project(string,string?)
          • GetJson()
          • IsMatchingPath(string)
          • IsValidVersionNumber(int)
          • LoadFromFile(string,string?)
          • SaveToFile(string)
          • AllowLanguagePreviewFeatures
          • BaseLanguage
          • CompilerOptions
          • Definitions
          • DefinitionsFiles
          • DefinitionsPath
          • ExcludeFilePatterns
          • ExtensionData
          • FileVersion
          • Localisation
          • Path
          • SourceFilePatterns
          • SourceFiles
          • WorkspaceRootPath
          • LocalizationInfo
            • Assets
            • Strings
        • ProjectDebugInfo
          • GetNodeDebugInfo(string)
          • Nodes
        • Range
          • Range()
          • Range(int,int,int,int)
          • Equals(object)
          • GetHashCode()
          • ToString()
          • End
          • IsValid
          • Start
        • StringInfo
          • fileName
          • isImplicitTag
          • lineNumber
          • metadata
          • nodeName
          • shadowLineID
          • text
          • ToString()
        • Utility
          • AddTagsToLines(string,ICollection<string>?)
          • DetermineNodeConnections(string[])
          • ExtractStringBlocks(IEnumerable<Node>,ProjectDebugInfo)
          • GenerateYarnFileWithDeclarations(IEnumerable<Yarn.Compiler.Declaration>,string,IEnumerable<string>?,IDictionary<string, string>?)
          • GetCompiledCodeAsString(Program,Library?,CompilationResult?)
          • GetYarnValue(IConvertible)
          • ParseSource(string)
          • TagLines(string,ICollection<string>?)
          • TryGetNodeTitle(string?,YarnSpinnerParser.NodeContext,string?,string?,string?,string?)
      • Yarn.Compiler.Upgrader Namespace
        • LanguageUpgrader
          • Upgrade(UpgradeJob)
        • TextReplacement
          • Comment
          • OriginalText
          • ReplacementText
          • Start
          • StartLine
          • OriginalLength
          • ReplacementLength
        • UpgradeJob
          • Files
          • UpgradeType
          • UpgradeJob(UpgradeType,IEnumerable<CompilationJob.File>)
        • UpgradeResult
          • Files
          • Diagnostics
          • OutputFile
            • Diagnostics
            • IsNewFile
            • OriginalSource
            • Path
            • Replacements
            • UpgradedSource
        • UpgradeType
          • Version1to2
      • Yarn.Unity Namespace
        • ActionMarkupHandler
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
        • ActionRegistrationExtension
          • AddCommandHandler(IActionRegistration,string,System.Action)
          • AddCommandHandler(IActionRegistration,string,System.Func<IEnumerator>)
          • AddCommandHandler(IActionRegistration,string,System.Func<Coroutine>)
          • AddCommandHandler(IActionRegistration,string,System.Func<YarnTask>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Action<T1>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Func<T1, IEnumerator>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Func<T1, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Func<T1, Coroutine>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Func<T1, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, YarnTask>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Action<T1, T2>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Func<T1, T2, IEnumerator>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Func<T1, T2, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Func<T1, T2, Coroutine>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Func<T1, T2, YarnTask>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Action<T1, T2, T3>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Func<T1, T2, T3, IEnumerator>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Func<T1, T2, T3, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Func<T1, T2, T3, Coroutine>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Func<T1, T2, T3, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Action<T1, T2, T3, T4>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Func<T1, T2, T3, T4, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Func<T1, T2, T3, T4, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Func<T1, T2, T3, T4, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Func<T1, T2, T3, T4, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6, T7>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6, T7, T8>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, YarnTask>)
          • AddFunction<TResult>(IActionRegistration,string,System.Func<TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>)
          • AddFunction<T1, TResult>(IActionRegistration,string,System.Func<T1, TResult>)
          • AddFunction<T1, T2, TResult>(IActionRegistration,string,System.Func<T1, T2, TResult>)
          • AddFunction<T1, T2, T3, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, TResult>)
          • AddFunction<T1, T2, T3, T4, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, T7, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult>)
        • Actions
          • Actions(IActionRegistration,Library)
          • AddCommandHandler(string,Delegate)
          • AddCommandHandler(string,Func<object>)
          • AddCommandHandler(string,MethodInfo)
          • AddFunction(string,Delegate)
          • AddRegistrationMethod(ActionRegistrationMethod)
          • RegisterActions()
          • RegisterFunctionDeclaration(string,Type,Type[])
          • RemoveCommandHandler(string)
          • RemoveFunction(string)
          • SetupForProject(YarnProject)
          • ActionRegistrar
          • Commands
          • Library
        • BuiltinLocalisedLineProvider
          • DeregisterMarkerProcessor(string)
          • GetLocalizedLineAsync(Line,CancellationToken)
          • PrepareForLinesAsync(IEnumerable<string>,CancellationToken)
          • RegisterMarkerProcessor(string,Markup.IAttributeMarkerProcessor)
          • AssetLocaleCode
          • LocaleCode
        • Culture
          • DisplayName
          • IsNeutralCulture
          • Name
          • NativeName
          • Culture(System.Globalization.CultureInfo)
        • Cultures
          • GetCulture(string)
          • GetCultures()
          • HasCulture(string)
          • TryGetCulture(string,Culture)
          • CurrentNeutralCulture
        • DialogueOption
          • DialogueOptionID
          • IsAvailable
          • Line
          • TextID
        • DialoguePresenterBase
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
        • DialogueReference
          • nodeName
          • project
          • DialogueReference()
          • DialogueReference(YarnProject,string)
          • IsValid
        • DialogueRunner
          • autoStart
          • onDialogueComplete
          • onDialogueStart
          • onNodeComplete
          • onNodeStart
          • onUnhandledCommand
          • runSelectedOptionAsLine
          • startNode
          • AddCommandHandler(string,Delegate)
          • AddCommandHandler(string,MethodInfo)
          • AddFunction(string,Delegate)
          • GetPauseDurationsInsideLine(Markup.MarkupParseResult)
          • LoadStateFromPersistentStorage(string)
          • RegisterFunctionDeclaration(string,Type,Type[])
          • RemoveCommandHandler(string)
          • RemoveFunction(string)
          • RequestHurryUpLine()
          • RequestNextLine()
          • SaveStateToPersistentStorage(string)
          • SetProject(YarnProject)
          • SplitCommandText(string)
          • StartDialogue(string)
          • Stop()
          • Dialogue
          • DialoguePresenters
          • DialogueTask
          • DialogueViews
          • IsDialogueRunning
          • IsInPlaymode
          • LineProvider
          • NoOptionSelected
          • VariableStorage
          • YarnProject
        • Effects
          • FadeAlpha(CanvasGroup,float,float,float,CancellationToken)
          • FadeAlpha(CanvasGroup,float,float,float,CoroutineInterruptToken?)
          • FadeAlphaAsync(CanvasGroup,float,float,float,CancellationToken)
          • PausableTypewriter(TextMeshProUGUI,float,Action?,Action?,Action?,Stack<(int position, float duration)>?,CoroutineInterruptToken?)
          • Typewriter(TextMeshProUGUI,float,Action,CoroutineInterruptToken?)
          • CoroutineInterruptToken
            • Complete()
            • Interrupt()
            • Start()
            • CanInterrupt
            • WasInterrupted
        • GeneratedVariableStorageExtensions
          • GetEnumValueOrDefault<T>(IGeneratedVariableStorage,string)
          • GetValueOrDefault<T>(IGeneratedVariableStorage,string)
          • SetValue<T>(IGeneratedVariableStorage,string,T)
        • IActionMarkupHandler
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
        • IActionRegistration
          • AddCommandHandler(string,Delegate)
          • AddCommandHandler(string,MethodInfo)
          • AddFunction(string,Delegate)
          • RegisterFunctionDeclaration(string,Type,Type[])
          • RemoveCommandHandler(string)
          • RemoveFunction(string)
        • IAssetProvider
          • GetAssetsOfType<T>()
          • TryGetAsset<T>(T?)
        • ICommand
          • Name
        • IGeneratedVariableStorage
        • ILineProvider
          • DeregisterMarkerProcessor(string)
          • GetLocalizedLineAsync(Line,CancellationToken)
          • PrepareForLinesAsync(IEnumerable<string>,CancellationToken)
          • RegisterMarkerProcessor(string,Yarn.Markup.IAttributeMarkerProcessor)
          • LocaleCode
          • YarnProject
        • InMemoryVariableStorage
          • showDebug
          • Clear()
          • Contains(string)
          • GetAllVariables()
          • GetDebugList()
          • SetAllVariables(Dictionary<string, float>,Dictionary<string, string>,Dictionary<string, bool>,bool)
          • SetValue(string,bool)
          • SetValue(string,float)
          • SetValue(string,string)
          • TryGetValue<T>(string,T)
        • IYarnTask
          • Forget()
          • IsCompleted()
          • IsCompletedSuccessfully()
        • LineAdvancer
          • advanceRequestsBeforeCancellingLine
          • multiAdvanceIsCancel
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
          • RequestDialogueCancellation()
          • RequestLineHurryUp()
          • RequestNextLine()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
          • InputMode
            • InputActions
            • KeyCodes
            • LegacyInputAxes
            • None
        • LineCancellationToken
          • HurryUpToken
          • NextLineToken
          • IsHurryUpRequested
          • IsNextLineRequested
        • LineMetadata
          • LineMetadata()
          • AddMetadata(string,IEnumerable<string>)
          • GetLineIDs()
          • GetMetadata(string)
          • GetShadowLineSource(string)
        • LinePresenter
          • autoAdvance
          • autoAdvanceDelay
          • canvasGroup
          • characterNameContainer
          • characterNameText
          • fadeDownDuration
          • fadeUpDuration
          • lineText
          • showCharacterNameInLineView
          • temporalProcessors
          • typewriterEffectSpeed
          • useFadeEffect
          • useTypewriterEffect
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
        • LinePresenterButtonHandler
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
        • LineProviderBehaviour
          • DeregisterMarkerProcessor(string)
          • GetLocalizedLineAsync(Line,CancellationToken)
          • PrepareForLinesAsync(IEnumerable<string>,CancellationToken)
          • RegisterMarkerProcessor(string,IAttributeMarkerProcessor)
          • Start()
          • LocaleCode
          • YarnProject
        • Localization
          • AddLocalizedString(string,string)
          • AddLocalizedStrings(IEnumerable<KeyValuePair<string, string>>)
          • AddLocalizedStrings(IEnumerable<StringTableEntry>)
          • Clear()
          • ContainsLocalizedObject<T>(string)
          • ContainsLocalizedString(string)
          • GetLineIDs()
          • GetLocalizedObjectAsync<T>(string)
          • GetLocalizedString(string)
          • UsesAddressableAssets
          • LocalizationTableEntry
            • localizedAsset
            • localizedAssetReference
            • localizedString
        • LocalizationType
          • Unity
          • YarnInternal
        • LocalizedLine
          • Asset
          • InvalidLine
          • Metadata
          • RawText
          • Substitutions
          • TextID
          • CharacterName
          • Text
          • TextWithoutCharacterName
        • MarkupPalette
          • BasicMarkers
          • CustomMarkers
          • ColorForMarker(string,Color)
          • PaletteForMarker(string,CustomMarker)
          • BasicMarker
            • Boldened
            • Color
            • CustomColor
            • Italicised
            • Marker
            • Strikedthrough
            • Underlined
          • CustomMarker
            • End
            • Marker
            • MarkerOffset
            • Start
        • OptionItem
          • completionToken
          • OnOptionSelected
          • InvokeOptionSelected()
          • OnDeselect(BaseEventData)
          • OnPointerClick(PointerEventData)
          • OnPointerEnter(PointerEventData)
          • OnSelect(BaseEventData)
          • OnSubmit(BaseEventData)
          • IsHighlighted
          • Option
        • OptionsPresenter
          • fadeDownDuration
          • fadeUpDuration
          • showUnavailableOptions
          • useFadeEffect
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
        • PauseEventProcessor
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
        • RegistrationType
          • Compilation
          • Runtime
        • ReplacementMarkupHandler
          • NoDiagnostics
          • ProcessReplacementMarker(MarkupAttribute,StringBuilder,List<MarkupAttribute>,string)
        • SerializableDictionary
          • Storage<T>
            • data
        • SerializableDictionary<TKey, TValue>
          • SerializableDictionary()
          • SerializableDictionary(IDictionary<TKey, TValue>)
        • SerializableDictionary<TKey, TValue, TValueStorage>
          • SerializableDictionary()
          • SerializableDictionary(IDictionary<TKey, TValue>)
        • SerializableDictionaryBase
          • Storage
        • SerializableDictionaryBase<TKey, TValue, TValueStorage>
          • SerializableDictionaryBase()
          • SerializableDictionaryBase(IDictionary<TKey, TValue>)
          • Add(TKey,TValue)
          • Add(KeyValuePair<TKey, TValue>)
          • Add(object,object)
          • Clear()
          • Contains(KeyValuePair<TKey, TValue>)
          • Contains(object)
          • ContainsKey(TKey)
          • CopyFrom(IDictionary<TKey, TValue>)
          • CopyTo(Array,int)
          • CopyTo(KeyValuePair<TKey, TValue>[],int)
          • GetEnumerator()
          • GetObjectData(SerializationInfo,StreamingContext)
          • OnAfterDeserialize()
          • OnBeforeSerialize()
          • OnDeserialization(object)
          • Remove(TKey)
          • Remove(KeyValuePair<TKey, TValue>)
          • Remove(object)
          • TryGetValue(TKey,TValue)
          • Count
          • IsFixedSize
          • IsReadOnly
          • IsSynchronized
          • this[TKey key]
          • this[object key]
          • Keys
          • SyncRoot
          • Values
        • StringTableEntry
          • Comment
          • File
          • ID
          • Language
          • LineNumber
          • Lock
          • Node
          • Text
          • StringTableEntry(StringTableEntry)
          • CreateCSV(IEnumerable<StringTableEntry>)
          • Equals(object)
          • GetHashCode()
          • ParseFromCSV(string)
          • ToString()
        • StyleMarkerProcessor
          • lineProvider
          • ProcessReplacementMarker(MarkupAttribute,StringBuilder,List<MarkupAttribute>,string)
        • UnityEventString
        • VariableStorageBehaviour
          • AddChangeListener<T>(string,Action<T>)
          • Clear()
          • Contains(string)
          • GetAllVariables()
          • GetVariableKind(string)
          • SetAllVariables(FloatDictionary,StringDictionary,BoolDictionary,bool)
          • SetValue(string,bool)
          • SetValue(string,float)
          • SetValue(string,string)
          • TryGetValue<T>(string,T?)
          • Program
          • SmartVariableEvaluator
        • VoiceOverPresenter
          • audioSource
          • dialogueRunner
          • endLineWhenVoiceoverComplete
          • fadeOutTimeOnLineFinish
          • waitTimeAfterLineComplete
          • waitTimeBeforeLineStart
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
        • YarnActionAttribute
          • Name
        • YarnCommandAttribute
        • YarnFunctionAttribute
        • YarnProject
          • baseLocalization
          • compiledYarnProgram
          • lineMetadata
          • localizations
          • localizationType
          • GetHeaders(string)
          • GetLineIDsForNodes(IEnumerable<string>)
          • GetLocalization(string)
          • InitialValues
          • NodeNames
          • Program
          • ShadowTableDictionary
          • ShadowTableEntry
            • shadowMetadata
            • sourceLineID
        • YarnTask
          • Delay(int,CancellationToken)
          • Delay(TimeSpan,CancellationToken)
          • Forget()
          • FromResult<T>(T)
          • GetAwaiter()
          • IsCompleted()
          • IsCompletedSuccessfully()
          • SuppressCancellationThrow()
          • ToCoroutine(Func<YarnTask>)
          • WaitForAsyncOperation(AsyncOperationHandle,CancellationToken)
          • WaitForAsyncOperation<T>(AsyncOperationHandle<T>,CancellationToken)
          • WaitUntil(System.Func<bool>,System.Threading.CancellationToken)
          • WaitUntilCanceled(System.Threading.CancellationToken)
          • WhenAll(IEnumerable<YarnTask>)
          • WhenAll(YarnTask[])
          • WhenAll<T>(IEnumerable<YarnTask<T>>)
          • WhenAll<T>(YarnTask<T>[])
          • Yield()
          • CompletedTask
        • YarnTask<T>
          • Forget()
          • FromResult(T)
          • GetAwaiter()
          • IsCompleted()
          • IsCompletedSuccessfully()
        • YarnTaskCompletionSource
          • TrySetCanceled()
          • TrySetException(System.Exception)
          • TrySetResult()
          • Task
        • YarnTaskCompletionSource<T>
          • TrySetCanceled()
          • TrySetException(System.Exception)
          • TrySetResult(T)
          • Task
        • YarnTaskExtensions
          • WaitForCoroutine(MonoBehaviour,IEnumerator)
          • WaitForCoroutine(MonoBehaviour,Coroutine)
      • Yarn.Unity.Legacy Namespace
        • DialogueAdvanceInput
          • continueAction
          • continueActionButtonName
          • continueActionKeyCode
          • continueActionOnButtonRelease
          • continueActionReference
          • continueActionType
          • dialogueView
          • enableActionOnStart
          • Action
          • ContinueActionType
            • InputSystemAction
            • InputSystemActionFromAsset
            • KeyCode
            • None
            • VirtualButton
          • ContinueButtonActionType
            • Down
            • Up
        • DialogueViewBase
          • requestInterrupt
          • DialogueComplete()
          • DialogueStarted()
          • DismissLine(Action)
          • InterruptLine(LocalizedLine,Action)
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLine(LocalizedLine,Action)
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptions(DialogueOption[],Action<int>)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
          • UserRequestedViewAdvancement()
        • LineView
          • autoAdvance
          • canvasGroup
          • characterNameContainer
          • characterNameText
          • continueButton
          • fadeInTime
          • fadeOutTime
          • holdTime
          • lineText
          • onCharacterTyped
          • onPauseEnded
          • onPauseStarted
          • palette
          • showCharacterNameInLineView
          • typewriterEffectSpeed
          • useFadeEffect
          • useTypewriterEffect
          • AddLineBreaks(Markup.MarkupParseResult)
          • DialogueComplete()
          • DismissLine(Action)
          • InterruptLine(LocalizedLine,Action)
          • OnContinueClicked()
          • PaletteMarkedUpText(Markup.MarkupParseResult,MarkupPalette,bool)
          • RunLine(LocalizedLine,Action)
          • UserRequestedViewAdvancement()
        • OptionsListView
          • DialogueComplete()
          • OnEnable()
          • Reset()
          • RunLine(LocalizedLine,Action)
          • RunOptions(DialogueOption[],Action<int>)
          • Start()
        • OptionView
          • OnOptionSelected
          • palette
          • InvokeOptionSelected()
          • OnPointerClick(PointerEventData)
          • OnPointerEnter(PointerEventData)
          • OnSubmit(BaseEventData)
          • Option
      • Yarn.Unity.Samples Namespace
        • SampleRenderDetector
      • Yarn.Unity.UnityLocalization Namespace
        • LineMetadata
          • nodeName
          • tags
          • ShadowLineSource
        • UnityLocalisedLineProvider
          • DeregisterMarkerProcessor(string)
          • GetLocalizedLineAsync(Line,CancellationToken)
          • PrepareForLinesAsync(IEnumerable<string>,CancellationToken)
          • RegisterMarkerProcessor(string,IAttributeMarkerProcessor)
          • LocaleCode
    • Rust
      • bevy_yarnspinner
      • bevy_yarnspinner_example_dialogue_view
      • yarnspinner
Powered by GitBook
LogoLogo

Community

  • Discord
  • Bluesky
  • Mastodon

Support Our Work

  • Itch
  • Unity Asset Store
  • Patreon

Yarn Spinner® and Secret Lab® are trade marks of Secret Lab Pty. Ltd., and are used by Yarn Spinner Pty. Ltd. under license.

On this page
  • YarnCommand and YarnFunction Attributes
  • New flow for Interrupting Dialogue
  • DialogueViewBase is now DialoguePresenter
  • Converting a Dialogue View to a Dialogue Presenter
  • 1. Change the Subclass
  • 2. Convert to the New Methods
  • 3. Delete Unnecessary Methods
  • 4. Remove the Interrupt Action
  • Final Steps
  • Upgrading Yarn Projects

Was this helpful?

Edit on GitHub
Export as PDF
  1. Changelog

Upgrading from Yarn Spinner 2

Learn about updating a Unity project to use Yarn Spinner 3 when it's already using Yarn Spinner 2.

PreviousChangelogNextGodot

Last updated 17 days ago

Was this helpful?

Yarn Spinner 3 introduces primarily additive changes to its language. Significant modifications have been made to Yarn Spinner for Unity to support these new features, resulting in some breaking changes.

You only need to refer to this page if you've got a project that's already being developed in Yarn Spinner for Unity 2, and you want to transition to Yarn Spinner for Unity 3. If you're starting a new Unity project and plan to work with Yarn Spinner, you should be using Yarn Spinner 3.

This guide assists in migrating Yarn Spinner for Unity 2 projects to Yarn Spinner 3. While we provide compatibility layers to automatically manage many of the changes, some manual adjustments will be necessary. Here we'll look at the steps to ensure existing Yarn Spinner 2 games function with Yarn Spinner for Unity 3, and outline how to transition to the newer systems.

YarnCommand and YarnFunction Attributes

The functionality of [YarnCommand] and [YarnFunction] attributes is unchanged. However, they have been moved to a new namespace. To use these attributes, add using Yarn.Unity.Attributes; to the relevant C# files.

New flow for Interrupting Dialogue

The system for managing dialogue interruption (hurrying, advancing, cancelling) has been redesigned.

When Presenters receive dialogue events, such as requests to show lines or options, they are provided with a cancellation token. The state of this token can be checked to determine if an advance has been requested. This design centralises presentation, cancellation, and cleanup logic, which was previously distributed across multiple methods.

The Line Advancer demonstrates a practical implementation of line advancement using this cancellation token approach.

DialogueViewBase is now DialoguePresenter

Yarn Spinner 3 replaces the callback-based DialogueViewBase with an asynchronous DialoguePresenter. This is the new standard for handling dialogue events in your code.

While Presenters and Views have functional similarities, Presenters utilize a different API and are not directly compatible with older Views. It is highly recommended to refactor existing Views to the new Presenter model.

Converting a Dialogue View to a Dialogue Presenter

For an existing project that is already using the older Dialogue View system, you can continue using DialogueViewBase by importing it from its new Yarn.Unity.Legacy namespace. The DialogueViewBase class has been adapted to act as a compatibility layer for the new Presenters.

If you choose to do this, you will not gain any of the features of the new Dialogue Presenter system. If wish to instead update your project to use the new Dialogue Presenter system, follow the process below.

Previously, Dialogue Views used callbacks to coordinate with the dialogue runner. Dialogue Presenters employ asynchronous functions, signalling completion by returning from the method. This simplifies logic for both the dialogue runner and custom Dialogue Presenter implementations.

While the APIs of the old Dialogue View and the new Dialogue Presenter may appear similar, their operational mechanics differ significantly.

The conversion process will vary depending on the specific functionality of your View, but the general steps are:

  1. Change the Subclass.

  2. Convert to the New Methods.

  3. Delete Unnecessary Methods.

  4. Remove the Interrupt Action.

1. Change the Subclass

Replace DialogueViewBase with DialoguePresenterBase as the base class. Since DialogueViewBase is a subclass of DialoguePresenterBase (for compatibility), its connection to the Dialogue Runner in Unity should generally remain intact. However, it is crucial to verify this connection after completing the conversion.

2. Convert to the New Methods

While not a direct one-to-one mapping, several Presenter methods correspond to View methods in terms of the dialogue events they handle:

Old DialogueViewBase Method

New DialoguePresenterBase Method

DialogueStarted

OnDialogueStartedAsync

RunLine

RunLineAsync

RunOptions

RunOptionsAsync

DialogueComplete

OnDialogueCompleteAsync

3. Delete Unnecessary Methods

The old DialogueView used callbacks and specific methods for user interruption and line completion. This functionality is now handled by cancellation tokens within the Presenter.

The following methods are no longer needed and can be removed:

  • InterruptLine

  • DismissLine

  • UserRequestedViewAdvancement

4. Remove the Interrupt Action

The requestInterrupt action is obsolete and can be deleted.

Final Steps

The remaining task is to replicate the original behaviour of your Dialogue View within the new Dialogue Presenter structure. Several Samples are available, showcasing various custom Dialogue Presenters, which can provide guidance and practical examples for this process.

Upgrading Yarn Projects

Any new Yarn Projects you create will be already configured correctly but if you have any existing v2 Yarn Projects these will need to be updated. This is a single change that needs to be done on each Yarn Project. If you open your Yarn Projects inside any text editor there will be a line inside that says "projectFileVersion": 2,, replace this with "projectFileVersion": 3, and save the file. When you go back to Unity this change will be detected and the project will be automatically reimported at which stage you can now use v3 features in that project.

sample