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
  • Getting Started
  • For Unity Localization
  • For Built-in Yarn Spinner Localization
  • Importing Default Strings
  • String Table Locale Fallback
  • Using the Strings
  • Localising Assets
  • Potential Trip-ups and Caveats

Was this helpful?

Edit on GitHub
Export as PDF
  1. Yarn Spinner for Unity
  2. Localisation and Assets

Unity Localisation

PreviousIn-built LocalisationNextSamples

Last updated 14 days ago

Was this helpful?

In addition to Yarn Spinner's own , your game can also use the Unity Localization package.

Both the Unity Localization and Built-In Localisation approaches are very similar to one another, but there are some caveats and extra steps to make them play together.

The Built-In Localisation system is simpler, but has fewer features.

In this document, we'll refer to the 'Localization' package that Unity provides as 'Unity Localization', to reduce the chance of confusion.

Watch a video where Yarn Spinner developer Jon Manning walks you through using Yarn Spinner with Unity's Localisation package:

Getting Started

For Unity Localization

  1. Create a new Localization Settings in the Project Settings - Localization screen:

  1. Create at lease one Locale in the Project Settings - Localization view.

  2. Create a String Table Collection via Window menu -> Asset Management -> Localization Tables.

  3. Check "Use Unity Localisation System" in your Yarn Project, and assign the String Table, and click Apply.

  1. Verify that the String Table (viewable by Window menu -> Asset Management -> Localization Tables) contains your Yarn Spinner Script's lines.

  2. In the Inspector for your Dialogue Runner, click the "Add Unity Localized Line Provider" button:

  1. This will add a component to your GameObject. Find it, and assign your String Table Collection to the Strings Table field:

Don't manually update the Strings Table Collection for your base language. For example, if you're writing your Yarn Spinner Scripts in English, don't modify the English column. That column is managed and updated by Yarn Spinner. You can safetly modify the other columns (which is how you get your translations in). We recommend having a separate Strings Table Collection for your non-Yarn Spinner strings.

For Built-in Yarn Spinner Localization

Once you have followed these instructions, your project should now:

  1. Have the Unity Localization package installed

  2. Created and configured one or more Locales for your project

  3. Created a string table collection.

When localising your game's dialogue using Yarn Spinner, we recommend creating a separate string table collection for your dialogue, set apart from other localised content like button labels. It can make it a little easier to manage.

With these done you should now have your project set up correctly, and have a string table collection for your locales with no entries inside. Yarn Spinner will fill this string table with content that it extracts from your Yarn Scripts.

Importing Default Strings

To fill a string table with content from a Yarn project, follow these steps:

  1. Select the Yarn Project, and go to its Inspector.

  2. Enable the Use Unity Localisation System setting.

  3. Set the Base Language to your desired language. This must be ensure its one of the locales that you have configured for your project.

  4. In the String Table Collection field, add the String Table Collection that you want to populate with line content.

  5. Click Apply.

You can check that the string table has been filled with content by opening the Window menu, and choosing Asset Management -> Localization Tables. You can then view the contents of your string table. The Key of each string will be the #line ID from the Yarn files.

String Table Locale Fallback

When the Yarn Project importer adds your lines into the string table, it uses the Base language field you set in the Inspector to determine which locale in your String Table Collection should have the lines added into.

If your project doesn't have a Locale which matches your Base Language, Yarn Spinner will attempt to find an appropriate Locale to use. To ensure that the importer uses the correct Locale, be sure to specify it in the Inspector.

Using the Strings

The Dialogue Runner's Inspector will tell you when you need to use a Unity Localised Line Provider. You can click the button it provides to quickly add and configure one. You can also set one up manually, using the Add Component menu.

To configure it, all that needs to be done is hook your string table collection up to the Strings field of the Unity Localised Line Provider.

During gameplay, the Unity Localised Line Provider will fetch content from your string table depending on the game's current locale setting. You can control this at run-time by using the locale selector at the top-right corner of your Game View.

Localising Assets

In addition to localising the strings that make up your lines, you can also localise assets that go with each line, such as voice-over audio, or custom objects that store other localised data.

To localise assets in Unity Localisation, you create and populate an Asset Table. Yarn Spinner doesn't automatically populate Asset Tables for you like it does String Tables, because Yarn Spinner doesn't manage your assets like it does with your lines.

Instead, you can create an Asset Table that contains assets with the same key as your lines. For example, if you have a line in your Yarn script that has the line ID "line:tom-1", then the string table will have an entry with the key line:tom-1. To create a voice-over asset to go with this line, you can create an asset table that also contains an entry with the key line:tom-1, and maps to an audio file.

The Unity Localised Line Provider will automatically match String Table entries and Asset Table entries if they have the same key, and then deliver them to your Dialogue Views for use. To do this, ensure that your Unity Localised Line Provider has an Asset Table configured in the Inspector.

Potential Trip-ups and Caveats

Because both Yarn Spinner and Unity use the same marker for their string interpolation and manipulation ({ and }). You can't use the Unity Localization smart strings in Yarn Spinner content.

Before doing anything with Yarn Spinner, you will need to set up your Unity project to use the Unity Localization system. To install and set up Unity Localization, follow the instructions on the .

Install the package

When a Yarn script is run, the receives line IDs from the Yarn Project, and must determine what localised content should be shown to the player, using a . In order for the Dialogue Runner to fetch localised data from the Unity string table, you use a .

Unity Localization package's documentation
Localisation
Dialogue Runner
line provider
Unity Localised Line Provider
built-in localisation system
Creating a Localization Settings in the Project Settings screen.
Activating the Unity Localization system on the Yarn Project asset, and assigning a String Table.
A correctly configured Yarn project for using the Unity Localization package.
The Locale Selector control, in the top-right corner of the Game View.
A Unity Localised Line Provider, configured with a String Table for line text, and an Asset Table for voice-over.