added yarn spinner package

This commit is contained in:
2026-08-14 13:27:17 +02:00
parent c140236bf7
commit c483bda3ea
573 changed files with 81459 additions and 0 deletions
@@ -0,0 +1,8 @@
# Changelog
All notable changes to this package will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
## [1.0.0] - 2026-05-20
This is the first release of Snaaake for Yarn Spinner.
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: e2970021f5a4e4e94ba93a3b5be801c6
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/CHANGELOG.md
uploadId: 968678
@@ -0,0 +1 @@
Snaaake for Yarn Spinner is distributed under the terms of the Unity Asset Store Terms of Service and End User License Agreement, which is available here: https://unity.com/legal/as-terms.
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 6029371209fbfb4e2bcdd4642c53c2e9
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/LICENSE.md
uploadId: 968678
@@ -0,0 +1,71 @@
# Snaaake for Yarn Spinner
**Snaaake** is a dialogue presenter for Yarn spinner that pays homage to the dialogue in classic action games. It shows two characters in a 'radio' view, with retro effect. As characters speak their voice-over lines, the characters play a talking animation, and a subtitle view shows the corresponding text. An animated 'signal level' graphic appears between them during the conversation.
## Try it out!
Test out the Snaaake presenter by installing the sample:
1. Open the Package Manager by choosing Window -> Packages -> Package Manager.
2. Select the 'Snaaake for Yarn Spinner' package.
3. Select the 'Samples' tab.
4. Install the 'Snaaake' sample. The sample will be copied into your project's Assets folder.
5. Open the 'Snaaake' scene that was copied over, and hit Play.
## How To Use Snaaake
To use Snaaake in your game's dialogue, follow these steps.
- In the Project tab, find the 'Snaaake for Yarn Spinner' package, and navigate to 'Runtime/Prefabs'.
- Drag the 'Snaaake Dialogue System' prefab into your scene.
- Add your Yarn Project to the dialogue system, turn on Start Automatically, and choose a node.
- Hit play, and enjoy your dialogue!
## Structure
The Snaaake dialogue presenter is composed of several components.
### Talking Head Character
A `TalkingHeadCharacter` is a ScriptableObject that contains a number of sprites. The first sprite will be used as the 'idle' frame, and the rest will be used while talking.
### Talking Head Character View
A `TalkingHeadCharacterView` presents sprites from a `TalkingHeadCharacter`, and can be signalled whether the speaking animation should be playing or not.
### Talking Head Dialogue Presenter
The `TalkingHeadDialoguePresenter` manages a collection of named `TalkingHeadCharacterView`s, a collection of available `TalkingHead and keeps track of which character is being presented in which view, and which character is speaking the current line. It also monitors an AudioSource's volume levels; when the level is over a threshold, the view that's showing the currently speaking character is signalled to show a speaking animation.
### Subtitle Dialogue Presenter
The `SubtitleDialoguePresenter` is a simple presenter that shows the text of the current line in a TextMeshPro text view.
### VO Dialogue Presenter
The Snaaake dialogue presenter includes a Yarn Spinner `VoiceOverDialoguePresenter` that plays the audio associated with the line. (This component is built-in to Yarn Spinner, and is made use of by this custom presenter.)
## Defining Characters
To define a character, create a new `TalkingHeadCharacter` object by opening Assets menu and choosing Create -> Yarn Spinner -> Snaaake -> Talking Head Character. Name it whatever you like, and add the sprites you want to use.
**Note:** The sprites you use can be any resolution, but they _must_ be square in order for the pixellation effect to work correctly.
Next, select the Snaaake Dialogue Presenter, find the Talking Heads Dialogue Presenter component, and click the `+` button next to the Characters list. Set the name of the character to the value you use to refer to them in your Yarn Spinner script, and set the value to the `TalkingHeadCharacter` asset you just created.
## Using Characters in Dialogue
To make a character appear in a slot, use the `set_slot` command in your scripts. The prefab that comes with Snaaake has two slots: left, and right. You can define your own slots, or add more slots, by modifying the Character Slots list in the Talking Heads Dialogue Presenter.
```
// Put the TalkingHeadsCharacter named 'Player' in the 'left' slot.
<<set_slot Player left>>
```
You can change which character is in which slot at any time. Make sure to assign characters to slots before any of their lines play, or the system won't know where to show them.
## Notes
- Snaaake expects all lines to have an audio file. When the audio for a line finishes, the next line will play. If a line doesn't have audio, it will be skipped.
- You can adjust the style of the retro effect by creating a custom material that uses the retro shader. Simply create a new Material, set its shader to 'Yarn Spinner/Snaaake Retro', and assign it to the Material of the Image on the Character. You can adjust the tint colour, pixellation, dither amount, posterisation, and more.
- To make post-processing effects like Bloom work, you'll need to assign your camera to the canvas. To do this, open the 'Snaaake Dialogue System' prefab in your scene, and find the 'Snaaake Dialogue Presenter -> Canvas' object. Drag your scene's main camera into the Camera slot. (Make sure that your Camera has post-processing enabled!)
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: b9c4d68fadde64c8b8e4d25d3f632b39
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/README.md
uploadId: 968678
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 54136020f2c1c4f19b2b00d75c610fb8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 43b62b79447494c4086e887ddcbd5da5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,298 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!28 &-6305474512521559428
Texture2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: DSEG7Classic-Bold Atlas
m_ImageContentsHash:
serializedVersion: 2
Hash: 00000000000000000000000000000000
m_IsAlphaChannelOptional: 0
serializedVersion: 4
m_Width: 1
m_Height: 1
m_CompleteImageSize: 1
m_MipsStripped: 0
m_TextureFormat: 1
m_MipCount: 1
m_IsReadable: 1
m_IsPreProcessed: 0
m_IgnoreMipmapLimit: 1
m_MipmapLimitGroupName:
m_StreamingMipmaps: 0
m_StreamingMipmapsPriority: 0
m_VTOnly: 0
m_AlphaIsTransparency: 0
m_ImageCount: 1
m_TextureDimension: 2
m_TextureSettings:
serializedVersion: 2
m_FilterMode: 1
m_Aniso: 1
m_MipBias: 0
m_WrapU: 0
m_WrapV: 0
m_WrapW: 0
m_LightmapFormat: 0
m_ColorSpace: 0
m_PlatformBlob:
image data: 1
_typelessdata: 00
m_StreamData:
serializedVersion: 2
offset: 0
size: 0
path:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
m_Name: DSEG7Classic-Bold SDF
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TMP_FontAsset
m_Version: 1.1.0
m_FaceInfo:
m_FaceIndex: 0
m_FamilyName: DSEG7 Classic
m_StyleName: Bold
m_PointSize: 90
m_Scale: 1
m_UnitsPerEM: 1000
m_LineHeight: 98.100006
m_AscentLine: 90
m_CapLine: 86
m_MeanLine: 86
m_Baseline: 0
m_DescentLine: 0
m_SuperscriptOffset: 90
m_SuperscriptSize: 0.5
m_SubscriptOffset: 0
m_SubscriptSize: 0.5
m_UnderlineOffset: -13.500001
m_UnderlineThickness: 4.5
m_StrikethroughOffset: 34.4
m_StrikethroughThickness: 4.5
m_TabWidth: 18
m_Material: {fileID: 6884716131310289754}
m_SourceFontFileGUID: 91e7d6b1fe3fa491eb896dc861616cb7
m_CreationSettings:
sourceFontFileName:
sourceFontFileGUID: 91e7d6b1fe3fa491eb896dc861616cb7
faceIndex: 0
pointSizeSamplingMode: 0
pointSize: 90
padding: 9
paddingMode: 2
packingMode: 0
atlasWidth: 1024
atlasHeight: 1024
characterSetSelectionMode: 7
characterSequence:
referencedFontAssetGUID:
referencedTextAssetGUID:
fontStyle: 0
fontStyleModifier: 0
renderMode: 4165
includeFontFeatures: 0
m_SourceFontFile: {fileID: 12800000, guid: 91e7d6b1fe3fa491eb896dc861616cb7, type: 3}
m_SourceFontFilePath:
m_AtlasPopulationMode: 1
InternalDynamicOS: 0
m_GlyphTable: []
m_CharacterTable: []
m_AtlasTextures:
- {fileID: -6305474512521559428}
m_AtlasTextureIndex: 0
m_IsMultiAtlasTexturesEnabled: 0
m_GetFontFeatures: 1
m_ClearDynamicDataOnBuild: 1
m_AtlasWidth: 1024
m_AtlasHeight: 1024
m_AtlasPadding: 9
m_AtlasRenderMode: 4165
m_UsedGlyphRects: []
m_FreeGlyphRects:
- m_X: 0
m_Y: 0
m_Width: 1023
m_Height: 1023
m_FontFeatureTable:
m_MultipleSubstitutionRecords: []
m_LigatureSubstitutionRecords: []
m_GlyphPairAdjustmentRecords: []
m_MarkToBaseAdjustmentRecords: []
m_MarkToMarkAdjustmentRecords: []
m_ShouldReimportFontFeatures: 0
m_FallbackFontAssetTable: []
m_FontWeightTable:
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
fontWeights: []
normalStyle: 0
normalSpacingOffset: 0
boldStyle: 0.75
boldSpacing: 7
italicStyle: 35
tabSize: 10
m_fontInfo:
Name:
PointSize: 0
Scale: 0
CharacterCount: 0
LineHeight: 0
Baseline: 0
Ascender: 0
CapHeight: 0
Descender: 0
CenterLine: 0
SuperscriptOffset: 0
SubscriptOffset: 0
SubSize: 0
Underline: 0
UnderlineThickness: 0
strikethrough: 0
strikethroughThickness: 0
TabWidth: 0
Padding: 0
AtlasWidth: 0
AtlasHeight: 0
m_glyphInfoList: []
m_KerningTable:
kerningPairs: []
fallbackFontAssets: []
atlas: {fileID: 0}
--- !u!21 &6884716131310289754
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: DSEG7Classic-Bold Atlas Material
m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Cube:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _FaceTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: -6305474512521559428}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OutlineTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Ambient: 0.5
- _Bevel: 0.5
- _BevelClamp: 0
- _BevelOffset: 0
- _BevelRoundness: 0
- _BevelWidth: 0
- _BumpFace: 0
- _BumpOutline: 0
- _ColorMask: 15
- _CullMode: 0
- _Diffuse: 0.5
- _FaceDilate: 0
- _FaceUVSpeedX: 0
- _FaceUVSpeedY: 0
- _GlowInner: 0.05
- _GlowOffset: 0
- _GlowOuter: 0.05
- _GlowPower: 0.75
- _GradientScale: 10
- _LightAngle: 3.1416
- _MaskSoftnessX: 0
- _MaskSoftnessY: 0
- _OutlineSoftness: 0
- _OutlineUVSpeedX: 0
- _OutlineUVSpeedY: 0
- _OutlineWidth: 0
- _PerspectiveFilter: 0.875
- _Reflectivity: 10
- _ScaleRatioA: 0.9
- _ScaleRatioB: 0.73125
- _ScaleRatioC: 0.73125
- _ScaleX: 1
- _ScaleY: 1
- _ShaderFlags: 0
- _Sharpness: 0
- _SpecularPower: 2
- _Stencil: 0
- _StencilComp: 8
- _StencilOp: 0
- _StencilReadMask: 255
- _StencilWriteMask: 255
- _TextureHeight: 1024
- _TextureWidth: 1024
- _UnderlayDilate: 0
- _UnderlayOffsetX: 0
- _UnderlayOffsetY: 0
- _UnderlaySoftness: 0
- _VertexOffsetX: 0
- _VertexOffsetY: 0
- _WeightBold: 0.75
- _WeightNormal: 0
m_Colors:
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767}
- _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0}
- _FaceColor: {r: 1, g: 1, b: 1, a: 1}
- _GlowColor: {r: 0, g: 1, b: 0, a: 0.5}
- _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767}
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
- _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1}
- _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5}
m_BuildTextureStacks: []
m_AllowLocking: 1
@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 67979057ca5724a699640a538d186367
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Fonts/DSEG7Classic-Bold
SDF.asset
uploadId: 968678
@@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: 91e7d6b1fe3fa491eb896dc861616cb7
TrueTypeFontImporter:
externalObjects: {}
serializedVersion: 4
fontSize: 16
forceTextureCase: -2
characterSpacing: 0
characterPadding: 1
includeFontData: 1
fontNames:
- DSEG7 Classic
fallbackFontReferences: []
customCharacters:
fontRenderingMode: 0
ascentCalculationMode: 1
useLegacyBoundsCalculation: 0
shouldRoundAdvanceValue: 1
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Fonts/DSEG7Classic-Bold.ttf
uploadId: 968678
@@ -0,0 +1,298 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &-6703381836575571422
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: ScienceGothic_SemiCondensed-Light Atlas Material
m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Cube:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _FaceTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 8965678434025470537}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OutlineTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Ambient: 0.5
- _Bevel: 0.5
- _BevelClamp: 0
- _BevelOffset: 0
- _BevelRoundness: 0
- _BevelWidth: 0
- _BumpFace: 0
- _BumpOutline: 0
- _ColorMask: 15
- _CullMode: 0
- _Diffuse: 0.5
- _FaceDilate: 0
- _FaceUVSpeedX: 0
- _FaceUVSpeedY: 0
- _GlowInner: 0.05
- _GlowOffset: 0
- _GlowOuter: 0.05
- _GlowPower: 0.75
- _GradientScale: 10
- _LightAngle: 3.1416
- _MaskSoftnessX: 0
- _MaskSoftnessY: 0
- _OutlineSoftness: 0
- _OutlineUVSpeedX: 0
- _OutlineUVSpeedY: 0
- _OutlineWidth: 0
- _PerspectiveFilter: 0.875
- _Reflectivity: 10
- _ScaleRatioA: 0.9
- _ScaleRatioB: 0.73125
- _ScaleRatioC: 0.73125
- _ScaleX: 1
- _ScaleY: 1
- _ShaderFlags: 0
- _Sharpness: 0
- _SpecularPower: 2
- _Stencil: 0
- _StencilComp: 8
- _StencilOp: 0
- _StencilReadMask: 255
- _StencilWriteMask: 255
- _TextureHeight: 1024
- _TextureWidth: 1024
- _UnderlayDilate: 0
- _UnderlayOffsetX: 0
- _UnderlayOffsetY: 0
- _UnderlaySoftness: 0
- _VertexOffsetX: 0
- _VertexOffsetY: 0
- _WeightBold: 0.75
- _WeightNormal: 0
m_Colors:
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767}
- _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0}
- _FaceColor: {r: 1, g: 1, b: 1, a: 1}
- _GlowColor: {r: 0, g: 1, b: 0, a: 0.5}
- _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767}
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1}
- _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1}
- _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
m_Name: ScienceGothic_SemiCondensed-Light SDF
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TMP_FontAsset
m_Version: 1.1.0
m_FaceInfo:
m_FaceIndex: 0
m_FamilyName: Science Gothic SemiCondensed
m_StyleName: Light
m_PointSize: 90
m_Scale: 1
m_UnitsPerEM: 2000
m_LineHeight: 132.84001
m_AscentLine: 97.920006
m_CapLine: 63
m_MeanLine: 45
m_Baseline: 0
m_DescentLine: -34.920002
m_SuperscriptOffset: 97.920006
m_SuperscriptSize: 0.5
m_SubscriptOffset: -34.920002
m_SubscriptSize: 0.5
m_UnderlineOffset: -11.25
m_UnderlineThickness: 4.5
m_StrikethroughOffset: 18
m_StrikethroughThickness: 4.5
m_TabWidth: 24
m_Material: {fileID: -6703381836575571422}
m_SourceFontFileGUID: 6a556a43741e648f5a8c0c26c9b2d1cf
m_CreationSettings:
sourceFontFileName:
sourceFontFileGUID: 6a556a43741e648f5a8c0c26c9b2d1cf
faceIndex: 0
pointSizeSamplingMode: 0
pointSize: 90
padding: 9
paddingMode: 2
packingMode: 0
atlasWidth: 1024
atlasHeight: 1024
characterSetSelectionMode: 7
characterSequence:
referencedFontAssetGUID:
referencedTextAssetGUID:
fontStyle: 0
fontStyleModifier: 0
renderMode: 4165
includeFontFeatures: 0
m_SourceFontFile: {fileID: 12800000, guid: 6a556a43741e648f5a8c0c26c9b2d1cf, type: 3}
m_SourceFontFilePath:
m_AtlasPopulationMode: 1
InternalDynamicOS: 0
m_GlyphTable: []
m_CharacterTable: []
m_AtlasTextures:
- {fileID: 8965678434025470537}
m_AtlasTextureIndex: 0
m_IsMultiAtlasTexturesEnabled: 0
m_GetFontFeatures: 1
m_ClearDynamicDataOnBuild: 1
m_AtlasWidth: 1024
m_AtlasHeight: 1024
m_AtlasPadding: 9
m_AtlasRenderMode: 4165
m_UsedGlyphRects: []
m_FreeGlyphRects:
- m_X: 0
m_Y: 0
m_Width: 1023
m_Height: 1023
m_FontFeatureTable:
m_MultipleSubstitutionRecords: []
m_LigatureSubstitutionRecords: []
m_GlyphPairAdjustmentRecords: []
m_MarkToBaseAdjustmentRecords: []
m_MarkToMarkAdjustmentRecords: []
m_ShouldReimportFontFeatures: 0
m_FallbackFontAssetTable: []
m_FontWeightTable:
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
- regularTypeface: {fileID: 0}
italicTypeface: {fileID: 0}
fontWeights: []
normalStyle: 0
normalSpacingOffset: 0
boldStyle: 0.75
boldSpacing: 7
italicStyle: 35
tabSize: 10
m_fontInfo:
Name:
PointSize: 0
Scale: 0
CharacterCount: 0
LineHeight: 0
Baseline: 0
Ascender: 0
CapHeight: 0
Descender: 0
CenterLine: 0
SuperscriptOffset: 0
SubscriptOffset: 0
SubSize: 0
Underline: 0
UnderlineThickness: 0
strikethrough: 0
strikethroughThickness: 0
TabWidth: 0
Padding: 0
AtlasWidth: 0
AtlasHeight: 0
m_glyphInfoList: []
m_KerningTable:
kerningPairs: []
fallbackFontAssets: []
atlas: {fileID: 0}
--- !u!28 &8965678434025470537
Texture2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: ScienceGothic_SemiCondensed-Light Atlas
m_ImageContentsHash:
serializedVersion: 2
Hash: 00000000000000000000000000000000
m_IsAlphaChannelOptional: 0
serializedVersion: 4
m_Width: 1
m_Height: 1
m_CompleteImageSize: 1
m_MipsStripped: 0
m_TextureFormat: 1
m_MipCount: 1
m_IsReadable: 1
m_IsPreProcessed: 0
m_IgnoreMipmapLimit: 1
m_MipmapLimitGroupName:
m_StreamingMipmaps: 0
m_StreamingMipmapsPriority: 0
m_VTOnly: 0
m_AlphaIsTransparency: 0
m_ImageCount: 1
m_TextureDimension: 2
m_TextureSettings:
serializedVersion: 2
m_FilterMode: 1
m_Aniso: 1
m_MipBias: 0
m_WrapU: 0
m_WrapV: 0
m_WrapW: 0
m_LightmapFormat: 0
m_ColorSpace: 0
m_PlatformBlob:
image data: 1
_typelessdata: 00
m_StreamData:
serializedVersion: 2
offset: 0
size: 0
path:
@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: afc75f8b1c4494bafa8fa17d86981e18
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Fonts/ScienceGothic_SemiCondensed-Light
SDF.asset
uploadId: 968678
@@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: 6a556a43741e648f5a8c0c26c9b2d1cf
TrueTypeFontImporter:
externalObjects: {}
serializedVersion: 4
fontSize: 16
forceTextureCase: -2
characterSpacing: 0
characterPadding: 1
includeFontData: 1
fontNames:
- Science Gothic SemiCondensed
fallbackFontReferences: []
customCharacters:
fontRenderingMode: 0
ascentCalculationMode: 1
useLegacyBoundsCalculation: 0
shouldRoundAdvanceValue: 1
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Fonts/ScienceGothic_SemiCondensed-Light.ttf
uploadId: 968678
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4b87d6382dc974fe69f3fb13e8304d4d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,244 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2685809789340058871
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 9073070581582838234}
- component: {fileID: 8569653950979764812}
- component: {fileID: 8135251353932745513}
m_Layer: 5
m_Name: Border
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &9073070581582838234
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2685809789340058871}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5205167640650724488}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 80, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8569653950979764812
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2685809789340058871}
m_CullTransparentMesh: 1
--- !u!114 &8135251353932745513
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2685809789340058871}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0.57252175, g: 0.823, b: 0.57252175, a: 0.6039216}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 65a52cd4c28494214a5a0f5893b2e204, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 0.16
--- !u!1 &3421943593915399027
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5205167640650724488}
- component: {fileID: 5672680925068023999}
- component: {fileID: 4369063329456523292}
m_Layer: 5
m_Name: Snaaake Character View
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5205167640650724488
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3421943593915399027}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5319686039645983245}
- {fileID: 9073070581582838234}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchoredPosition: {x: 80, y: 0}
m_SizeDelta: {x: 469.5222, y: 469.5222}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &5672680925068023999
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3421943593915399027}
m_CullTransparentMesh: 1
--- !u!114 &4369063329456523292
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3421943593915399027}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0.43847328, g: 0.6320754, b: 0.43827873, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &4405246347121567242
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5319686039645983245}
- component: {fileID: 2105530697395099871}
- component: {fileID: 4890490824892634613}
- component: {fileID: 9033460965311809990}
m_Layer: 5
m_Name: Character
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5319686039645983245
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4405246347121567242}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5205167640650724488}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 540}
m_Pivot: {x: 0.5, y: 0}
--- !u!222 &2105530697395099871
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4405246347121567242}
m_CullTransparentMesh: 1
--- !u!114 &4890490824892634613
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4405246347121567242}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: -876546973899608171, guid: afeca3e1b22ad4ee9b8a244dc08c7b76, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: ef33c81aad9234da88388c949bddefd1, type: 3}
m_Type: 0
m_PreserveAspect: 1
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &9033460965311809990
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4405246347121567242}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5189d1ee67a4c4eb8a261f0838a93343, type: 3}
m_Name:
m_EditorClassIdentifier: YSUAddons.Snaaake::TalkingHeadCharacterView
image: {fileID: 4890490824892634613}
FramesPerSecond: 8
@@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: 9b0c985fc7b234b25a99b01fb3a77102
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Prefabs/Snaaake
Character View.prefab
uploadId: 968678
@@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: 3cac2ead431924c63ad35c41b5195fb0
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Prefabs/Snaaake
Dialogue Presenter.prefab
uploadId: 968678
@@ -0,0 +1,374 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &2633030277510356657
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 2543591460179083244}
m_Modifications:
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3307874257259253614, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_Name
value: Snaaake Dialogue UI
objectReference: {fileID: 0}
- target: {fileID: 3779176393738423805, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6543422678045693905, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: characters.m_keys.Array.size
value: 2
objectReference: {fileID: 0}
- target: {fileID: 6543422678045693905, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: characters.m_values.Array.size
value: 2
objectReference: {fileID: 0}
- target: {fileID: 6543422678045693905, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: 'characters.m_keys.Array.data[0]'
value: Dwight
objectReference: {fileID: 0}
- target: {fileID: 6543422678045693905, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: 'characters.m_keys.Array.data[1]'
value: Player
objectReference: {fileID: 0}
- target: {fileID: 6543422678045693905, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: 'characters.m_values.Array.data[0]'
value:
objectReference: {fileID: 11400000, guid: e09fca9cc64e74617a043806ad3db23c, type: 2}
- target: {fileID: 6543422678045693905, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: 'characters.m_values.Array.data[1]'
value:
objectReference: {fileID: 11400000, guid: 564a18e8d953a454d855523a674d113c, type: 2}
- target: {fileID: 8945976763698731837, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 9132723082820636873, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: 'characters.m_keys.Array.data[0]'
value: Dwight
objectReference: {fileID: 0}
- target: {fileID: 9132723082820636873, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: 'characters.m_keys.Array.data[1]'
value: Player
objectReference: {fileID: 0}
- target: {fileID: 9132723082820636873, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: 'characters.m_values.Array.data[0]'
value:
objectReference: {fileID: 11400000, guid: e09fca9cc64e74617a043806ad3db23c, type: 2}
- target: {fileID: 9132723082820636873, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
propertyPath: 'characters.m_values.Array.data[1]'
value:
objectReference: {fileID: 11400000, guid: 564a18e8d953a454d855523a674d113c, type: 2}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 4648720434485967354, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
insertIndex: -1
addedObject: {fileID: 1871924379157315787}
- targetCorrespondingSourceObject: {fileID: 3835140520404881906, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
insertIndex: -1
addedObject: {fileID: 4193301170431855157}
m_SourcePrefab: {fileID: 100100000, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
--- !u!114 &624873284429678435 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 3179992030420556242, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
m_PrefabInstance: {fileID: 2633030277510356657}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 040745bbc9c4a429d911037da4556ee9, type: 3}
m_Name:
m_EditorClassIdentifier: YarnSpinner.Unity.Addons.Snaaake::SubtitlePresenter
--- !u!1 &1275434508739071811 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3835140520404881906, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
m_PrefabInstance: {fileID: 2633030277510356657}
m_PrefabAsset: {fileID: 0}
--- !u!114 &4193301170431855157
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1275434508739071811}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.AspectRatioFitter
m_AspectMode: 1
m_AspectRatio: 1
--- !u!4 &2369202622792330534 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 318486934050550679, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
m_PrefabInstance: {fileID: 2633030277510356657}
m_PrefabAsset: {fileID: 0}
--- !u!114 &4151099127995439868 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 2094681524380124237, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
m_PrefabInstance: {fileID: 2633030277510356657}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: eb87ae987c60e9d4f8346202d271648d, type: 3}
m_Name:
m_EditorClassIdentifier: YarnSpinner.Unity::Yarn.Unity.VoiceOverPresenter
--- !u!114 &6500827692446944888 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 9132723082820636873, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
m_PrefabInstance: {fileID: 2633030277510356657}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b7948f050ae2d45bca291d4149dd41b3, type: 3}
m_Name:
m_EditorClassIdentifier: YarnSpinner.Unity.Addons.Snaaake::AnimationParameterOnAudio
--- !u!1 &7208562663053911883 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 4648720434485967354, guid: 3cac2ead431924c63ad35c41b5195fb0, type: 3}
m_PrefabInstance: {fileID: 2633030277510356657}
m_PrefabAsset: {fileID: 0}
--- !u!114 &1871924379157315787
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7208562663053911883}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 86710e43de46f6f4bac7c8e50813a599, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.AspectRatioFitter
m_AspectMode: 1
m_AspectRatio: 1
--- !u!1001 &5593114176228253021
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2958262985454349539, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262986520364887, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262986520364887, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262986520364887, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262986520364887, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262986520364887, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262986520364887, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262987206614837, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262987206614837, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262987206614837, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262987206614837, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262987206614837, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2958262987206614837, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7262066351540048079, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_Name
value: Snaaake Dialogue System
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8020628925107869966, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8020628925673895293, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8020628925673895293, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8020628925673895293, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8020628925673895293, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8020628925673895293, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8020628925673895293, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8309902628685535410, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: autoStart
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8309902628685535410, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: dialoguePresenters.Array.size
value: 4
objectReference: {fileID: 0}
- target: {fileID: 8309902628685535410, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: 'dialoguePresenters.Array.data[0]'
value:
objectReference: {fileID: 624873284429678435}
- target: {fileID: 8309902628685535410, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: 'dialoguePresenters.Array.data[1]'
value:
objectReference: {fileID: 6500827692446944888}
- target: {fileID: 8309902628685535410, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: 'dialoguePresenters.Array.data[2]'
value:
objectReference: {fileID: 4151099127995439868}
- target: {fileID: 8309902628685535410, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: 'dialoguePresenters.Array.data[3]'
value:
objectReference: {fileID: 8651879178093781460}
- target: {fileID: 9078442560890639579, guid: 52571f68872914e24837210513edea1d, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects:
- {fileID: 3416868783655305253, guid: 52571f68872914e24837210513edea1d, type: 3}
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
insertIndex: -1
addedObject: {fileID: 2369202622792330534}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 52571f68872914e24837210513edea1d, type: 3}
--- !u!4 &2543591460179083244 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7985477256237130417, guid: 52571f68872914e24837210513edea1d, type: 3}
m_PrefabInstance: {fileID: 5593114176228253021}
m_PrefabAsset: {fileID: 0}
--- !u!114 &8651879178093781460 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 3859336324316773513, guid: 52571f68872914e24837210513edea1d, type: 3}
m_PrefabInstance: {fileID: 5593114176228253021}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 61503eb6a998a4af68e0dcbec4aad8cb, type: 3}
m_Name:
m_EditorClassIdentifier:
@@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: f9cc3cf6de0c74942adaff4226173ffb
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Prefabs/Snaaake
Dialogue System.prefab
uploadId: 968678
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b84ade111eef74440a148014449d5491
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,63 @@
using UnityEngine;
using UnityEngine.UI;
#nullable enable
namespace Yarn.Unity.Addons.Snaaake
{
/// <summary>
/// Randomly varies the <see cref="Image.fillAmount"/> property of an <see
/// cref="Image"/> over time, at a fixed frame rate.
/// </summary>
public class RandomImageFill : MonoBehaviour
{
/// <summary>
/// The minimum amount to fill.
/// </summary>
public float MinFill = 0.5f;
/// <summary>
/// The maximum amount to fill.
/// </summary>
public float MaxFill = 1.0f;
/// <summary>
/// The degree to which the fill amount will change each frame.
/// </summary>
public float Speed = 1f;
/// <summary>
/// The rate at which the fill amount will change.
/// </summary>
public float FrameRate = 8f;
/// <summary>
/// The image to change the fill amount of.
/// </summary>
public Image? Image;
void Update()
{
if (Image == null)
{
// No image, so nothing to update.
return;
}
var t = Time.time;
// Snap time to framerate
t *= FrameRate;
t = Mathf.FloorToInt(t);
t /= FrameRate;
// Increase speed
t *= Speed;
// Evaluate the noise at our calculated point and update the image's
// fill amount
var noise = Mathf.PerlinNoise1D(t);
var fill = Mathf.Lerp(MinFill, MaxFill, noise);
Image.fillAmount = fill;
}
}
}
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: d110ca3d7bebb426d8cb287ecaac4c99
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Scripts/RandomImageFill.cs
uploadId: 968678
@@ -0,0 +1,53 @@
using System.Threading;
using System.Collections.Generic;
using UnityEngine;
using Yarn;
using Yarn.Unity;
#nullable enable
namespace Yarn.Unity.Addons.Snaaake
{
/// <summary>
/// A basic dialogue presenter that shows the line text in a TextMeshPro
/// text view.
/// </summary>
/// <remarks>
/// This presenter waits until the line has been externally cancelled before
/// completing. It expects to be used alongside other presenters that signal
/// that the line has been cancelled, like <see cref="VoiceOverPresenter"/>.
/// </remarks>
public class SubtitlePresenter : DialoguePresenterBase
{
public TMPro.TMP_Text? text;
void Awake()
{
if (text != null)
{
text.enabled = false;
}
}
public override async YarnTask OnDialogueStartedAsync() { }
public override async YarnTask OnDialogueCompleteAsync() { }
public override async YarnTask RunLineAsync(LocalizedLine line, LineCancellationToken token)
{
if (text == null)
{
return;
}
text.enabled = true;
text.text = line.TextWithoutCharacterName.Text;
// Wait until the line has been ended by someone else
await YarnTask.WaitUntilCanceled(token.NextContentToken);
text.enabled = false;
}
}
}
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 040745bbc9c4a429d911037da4556ee9
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Scripts/SubtitlePresenter.cs
uploadId: 968678
@@ -0,0 +1,19 @@
using System.Collections.Generic;
using UnityEngine;
namespace Yarn.Unity.Addons.Snaaake
{
/// <summary>
/// Stores a list of sprites associated with a character in the Snaaake
/// dialogue presenter.
/// </summary>
[CreateAssetMenu(menuName = "Yarn Spinner/Snaaake/Talking Head Character")]
public class TalkingHeadCharacter : ScriptableObject
{
/// <summary>
/// The list of sprites for the character. The first sprite will be used
/// as the 'idle' pose, when the character is not talking.
/// </summary>
public List<Sprite> sprites = new();
}
}
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 5d31af3bd6f764e14af50289644aa9ac
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Scripts/TalkingHeadCharacter.cs
uploadId: 968678
@@ -0,0 +1,141 @@
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
#nullable enable
namespace Yarn.Unity.Addons.Snaaake
{
/// <summary>
/// A view that presents an animated talking head in an <see cref="Image"/>,
/// driven by an <see cref="Animator"/>.
/// </summary>
[ExecuteInEditMode]
public class TalkingHeadCharacterView : MonoBehaviour
{
/// <summary>
/// The <see cref="Image"/> to show the sprite in.
/// </summary>
[SerializeField] Image? image;
/// <summary>
/// The character that this view is presenting.
/// </summary>
private TalkingHeadCharacter? currentCharacter;
[Min(0.001f)]
public float FramesPerSecond = 4;
public bool Talking { get; set; }
void OnValidate()
{
if (this.image == null && TryGetComponent<Image>(out var image))
{
this.image = image;
}
}
public TalkingHeadCharacter? CurrentCharacter
{
get => currentCharacter;
set
{
currentCharacter = value;
if (image == null)
{
return;
}
if (currentCharacter != null && currentCharacter.sprites.Count > 0)
{
image.sprite = currentCharacter.sprites[0];
}
else
{
image.sprite = null;
}
}
}
private int _currentFrame = 0;
private int CurrentFrame
{
get => _currentFrame;
set
{
if (this.currentCharacter == null || this.currentCharacter.sprites.Count == 0)
{
return;
}
_currentFrame = value;
if (this.image == null)
{
return;
}
// Ping-pong the actual index of the sprite to use based on our
// frame count
var i = PingPong(CurrentFrame, currentCharacter.sprites.Count - 1);
var sprite = this.currentCharacter.sprites[i];
this.image.sprite = sprite;
}
}
private static int PingPong(int input, int max)
{
return Mathf.Abs(((input + max) % (max * 2)) - max);
}
void Awake()
{
RunAnimation().Forget();
}
public async YarnTask RunAnimation()
{
var destroyToken = this.destroyCancellationToken;
while (destroyToken.IsCancellationRequested == false)
{
if (!Talking)
{
await YarnTask.Yield();
continue;
}
// Start the talking animation. Stop when we're no longer
// talking AND we've reached the end of a cycle.
try
{
do
{
if (currentCharacter == null || currentCharacter.sprites.Count == 0)
{
// No character to show; it must have changed.
// Stop looping.
break;
}
// Show the next frame, and wait until it's time to
// show the next.
CurrentFrame += 1;
await YarnTask.Delay(System.TimeSpan.FromSeconds(1.0f / FramesPerSecond), destroyToken);
} while (Talking || CurrentFrame % (2 * (currentCharacter.sprites.Count - 1)) != 0);
}
catch (System.OperationCanceledException)
{
// We must have been destroyed, so stop immediately
return;
}
}
}
}
}
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 5189d1ee67a4c4eb8a261f0838a93343
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Scripts/TalkingHeadCharacterView.cs
uploadId: 968678
@@ -0,0 +1,214 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using Yarn.Unity;
#nullable enable
namespace Yarn.Unity.Addons.Snaaake
{
public class TalkingHeadDialoguePresenter : Yarn.Unity.DialoguePresenterBase
{
[Header("Audio")]
/// <summary>
/// The audio source to monitor.
/// </summary>
public AudioSource? audioSource;
/// <summary>
/// The channel in <see cref="audioSource"/> to monitor.
/// </summary>
public int sampleChannel = 0;
/// <summary>
/// A dictionary for mapping names to animators that present the characters,
/// </summary>
public Yarn.Unity.SerializableDictionary<string, TalkingHeadCharacterView> characterSlots = new();
public Yarn.Unity.SerializableDictionary<string, TalkingHeadCharacter> characters = new();
[Range(0f, 1f)]
public float threshold = 0.5f;
/// <summary>
/// The current animator whose parameters we are changing.
/// </summary>
private TalkingHeadCharacterView? activeView = null;
/// <summary>
/// A buffer containing audio samples collected from <see
/// cref="audioSource"/>.
/// </summary>
/// <remarks>
/// (This is kept in the class because we want to reuse the same buffer,
/// rather than allocate every time we want to sample it.)
/// </remarks>
private float[] sampleBuffer = new float[512];
/// <summary>
/// The amount of time, in milliseconds, between samples of the audio source.
/// </summary>
/// <remarks>
/// We don't need to be super precise with monitoring the audio source, so
/// there's no need to measure every frame. Instead, we'll measure at a fix
/// number of milliseconds between samples.
/// </remarks>
private readonly int timeBetweenSamplesMilliseconds = 50;
/// <summary>
/// The amount of time remaining until we next sample.
/// </summary>
private float timeUntilNextSample = 0;
protected void Start()
{
if (audioSource)
{
// Unity creates the internal buffers and starts recording the first
// time this is called, so call it immediately on start
audioSource.GetOutputData(sampleBuffer, sampleChannel);
}
}
protected void Update()
{
// Ensure that we have the components that we need
if (audioSource == null || activeView == null)
{
return;
}
// Are we due for another audio source sample? If not, wait.
if (timeUntilNextSample > 0)
{
timeUntilNextSample -= Time.deltaTime;
return;
}
// Read sample data out of the audio source.
audioSource.GetOutputData(sampleBuffer, sampleChannel);
// Determine the highest peak level that we hit.
var maxPower = 0f;
for (int i = 0; i < sampleBuffer.Length; i++)
{
maxPower = Mathf.Max(Mathf.Abs(maxPower), sampleBuffer[i]);
}
// Set the parameter to whether or not we have a loud enough signal!
activeView.Talking = maxPower > threshold;
// Reset our clock.
timeUntilNextSample = timeBetweenSamplesMilliseconds / 1000f;
}
/// <summary>
/// Associates a character name with a slot.
/// </summary>
/// <param name="characterName">The character name to associate.</param>
/// <param name="slotName">The name of the slot to associate the character
/// with.</param>
[YarnCommand("set_slot")]
public static void SetCharacterToSlot(string characterName, string slotName)
{
var presenter = FindAnyObjectByType<TalkingHeadDialoguePresenter?>();
if (presenter == null)
{
Debug.LogWarning($"Can't associate {characterName} with slot {slotName}: no {nameof(TalkingHeadDialoguePresenter)}");
return;
}
if (presenter.characters.TryGetValue(characterName, out var characterData) == false)
{
Debug.LogWarning($"Can't associate {characterName} with slot {slotName}: no known character {characterName}");
return;
}
if (presenter.characterSlots.TryGetValue(slotName, out var slot) == false)
{
Debug.LogWarning($"Can't associate {characterName} with slot {slotName}: no slot named {slotName}");
return;
}
slot.CurrentCharacter = characterData;
}
public override async YarnTask RunLineAsync(LocalizedLine line, LineCancellationToken token)
{
// Ensure that we have a character, a slot name for that character, and
// an animator for that slot name.
var characterName = line.CharacterName;
if (characterName == null)
{
Debug.LogWarning($"Can't run talking animation for line {line.TextID} '{line.Text}': line has no character name");
return;
}
if (characters.TryGetValue(characterName, out var character) == false)
{
Debug.LogWarning($"Can't run talking animation for line {line.TextID} '{line.Text}': {characterName} is not a known character");
return;
}
TalkingHeadCharacterView? slot = null;
// Find the slot that contains this character
foreach (var s in characterSlots.Values)
{
if (s.CurrentCharacter == character)
{
slot = s;
break;
}
}
if (slot == null)
{
// We don't know which slot is showing this character
Debug.LogWarning($"Can't run talking animation for line {line.TextID} '{line.Text}': {characterName} is not associated with a slot");
return;
}
// The animator we're working with is this one we've arrived at
activeView = slot;
// Wait until the line is finished
await YarnTask.WaitUntilCanceled(token.NextContentToken);
if (slot != null)
{
// Turn off the animation just in case the audio level is currently
// over the threshold
slot.Talking = false;
}
// Tidy up
activeView = null;
}
public override YarnTask OnDialogueStartedAsync()
{
// Clear all characters from their slots
foreach (var kv in characterSlots)
{
kv.Value.CurrentCharacter = null;
}
return YarnTask.CompletedTask;
}
public override YarnTask OnDialogueCompleteAsync()
{
return YarnTask.CompletedTask;
}
}
}
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: b7948f050ae2d45bca291d4149dd41b3
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Scripts/TalkingHeadDialoguePresenter.cs
uploadId: 968678
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d39bab6fe3e4d42f3aca47998579d3e7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,15 @@
/* 4x4 Bayer ordered dithering in UV space */
void Dither_float(float In, float2 UV, out float Out)
{
float DITHER_THRESHOLDS[16] =
{
1.0 / 17.0, 9.0 / 17.0, 3.0 / 17.0, 11.0 / 17.0,
13.0 / 17.0, 5.0 / 17.0, 15.0 / 17.0, 7.0 / 17.0,
4.0 / 17.0, 12.0 / 17.0, 2.0 / 17.0, 10.0 / 17.0,
16.0 / 17.0, 8.0 / 17.0, 14.0 / 17.0, 6.0 / 17.0
};
uint index = (uint(UV.x) % 4) * 4 + uint(UV.y) % 4;
Out = In - DITHER_THRESHOLDS[index];
}
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 5977540e36f5f47cf8a5cc7988f1a077
ShaderIncludeImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Shaders/Dither.hlsl
uploadId: 968678
@@ -0,0 +1,26 @@
fileFormatVersion: 2
guid: afeca3e1b22ad4ee9b8a244dc08c7b76
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3}
useAsTemplate: 0
exposeTemplateAsShader: 0
template:
name:
category:
description:
icon: {instanceID: 0}
thumbnail: {instanceID: 0}
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Shaders/Snaaake
Retro.shadergraph
uploadId: 968678
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 089db08c700e74440970fce53ba56d94
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

@@ -0,0 +1,150 @@
fileFormatVersion: 2
guid: 54a8566a9842b47eb93ab1c9a2c13c46
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 1, y: 1, z: 1, w: 1}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 1537655665
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Sprites/1x1Box.png
uploadId: 968678
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,150 @@
fileFormatVersion: 2
guid: 65a52cd4c28494214a5a0f5893b2e204
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 4, y: 4, z: 4, w: 4}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 1537655665
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Sprites/Frame.png
uploadId: 968678
Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

@@ -0,0 +1,150 @@
fileFormatVersion: 2
guid: 7deeaf313d7754e999c677ea7d9afc75
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Sprites/RadioButton.png
uploadId: 968678
Binary file not shown.

After

Width:  |  Height:  |  Size: 876 B

@@ -0,0 +1,150 @@
fileFormatVersion: 2
guid: caa2f33fbe6d84f45929b7fd6eca463d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/Sprites/RadioMask.png
uploadId: 968678
@@ -0,0 +1,17 @@
{
"name": "YarnSpinner.Addons.Snaaake",
"rootNamespace": "",
"references": [
"GUID:34aa492b82754644eac2f903cd496268",
"GUID:6055be8ebefd69e48b49212b09b47b2f"
],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 648e16e7661bc478fb421ef6f89210c4
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/Runtime/YarnSpinner.Addons.Snaaake.asmdef
uploadId: 968678
@@ -0,0 +1,21 @@
{
"name": "dev.yarnspinner.unity.addons.snaaake",
"displayName": "Snaaake for Yarn Spinner",
"version": "3.2.0",
"unity": "6000.0",
"author": {
"name": "Yarn Spinner Pty Ltd",
"url": "https://yarnspinner.dev"
},
"description": "A Dialogue Presenter for Yarn Spinner designed to look a retro action game.",
"dependencies": {
"dev.yarnspinner.unity": "3.2.1"
},
"samples": [
{
"displayName": "Snaaaake",
"description": "Demonstrates using the Snaaake dialogue presenter.",
"path": "Samples~/Snaaake"
}
]
}
@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 2bb57a41f67074b1d9dab1c0153b0bd5
PackageManifestImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 267061
packageName: Yarn Spinner+ for Unity, the friendly dialogue and narrative tool
packageVersion: 3.2.8
assetPath: Packages/dev.yarnspinner.unity.addons.snaaake/package.json
uploadId: 968678