▶ I2 Text Animation ◀ (Create and Edit beautiful animations your Texts)

Hi Guys!

My newest plugin I2 Text Animation is now available in the AssetStore!
It allows playing animations on each character of your texts.

I2 Text Animation easily integrates with your existing projects:

  • Unity UI
  • TextMeshPro
  • NGUI

Some other features include:

BASIC TRANSFORMS
Modify each of the characters in the text. Applying effects like Scaling, Rotation, Color and Alpha, Position changes and others.

COMPLEX SEQUENCES
Combine each of the basic transforms to create elaborated animations with flashy effects.

CUSTOM EDITORS
All the sequences are shown in a custom editors that allow previewing and editing the animations with timeline, delays, separation, target characters and a lot of other parameters.

TARGETS
Each animation can be applied to the entire text, or to just a few characters, words or even a phrase. This allows highlighting sections of your texts.

LOTS OF PRESETS
Each animation can be applied to the entire text, or to just a few characters, words or even a phrase. This allows highlighting sections of your texts.

For those who know about my other plugin I2 SmartEdge, this plugin contains all the Animation code from there, cleanned up of dependencies with the rendering and improved to be as efficient as possible when playing animations!

If you already have I2 SmartEdge, please, send me your invoice number and I will grant you access to I2 Text Animation as well!

Contact Information & Useful Links
Roadmap: Trello Roadmap
Demo: Example Scenes
AssetStore: I2 Text Animation

Here is a preview of some of the animation parameters in action:

I just bought it to use with TextMeshPRO but it seems to be not working. Is there a secret when using it with TextMeshPRO?

Edit : I will auto-answer my own question! TextMeshPro

Great Asset! =)

Well… I still could not make it work!

Assets/Plugins/I2/Text Animation/Extensions/TextAnimationTMPro.cs(20,7): error CS0246: The type or namespace name `TMPro’ could not be found. Are you missing an assembly reference?

Strange, because I have TMPro and I’m using it with DOTween and everything else.

I did try on a new project and had the same problem after adding I2_TMPro Define Symbols.

Edit. I Fixed it, I had to move “Text Animation” folder OUTSIDE the Plugins Folder to make it works.

Well… still not working with TextMeshPro. Any advice?

System.InvalidOperationException: There was an error reflecting type 'I2.TextAnimation.SE_AnimSequence_Position'. ---> System.InvalidOperationException: There was an error reflecting field '_AnimBlend_From'. ---> System.InvalidOperationException: There was an error reflecting type 'I2.TextAnimation.SE_AnimSequence_Position.eAnimBlendMode'. ---> System.InvalidOperationException: Types 'I2.TextAnimation.SE_AnimSequence_Position.eAnimBlendMode' and 'I2.TextAnimation.SE_AnimSequence_Float.eAnimBlendMode' both use the XML type name, 'eAnimBlendMode', from namespace ''. Use XML attributes to specify a unique XML name and/or namespace for the type.
  at System.Xml.Serialization.XmlReflectionImporter.GetTypeMapping (System.String typeName, System.String ns, System.Xml.Serialization.TypeDesc typeDesc, System.Xml.Serialization.NameTable typeLib, System.Type type) [0x00081] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.ImportEnumMapping (System.Xml.Serialization.EnumModel model, System.String ns, System.Boolean repeats) [0x00072] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeModel model, System.String ns, System.Xml.Serialization.XmlReflectionImporter+ImportContext context, System.String dataType, System.Xml.Serialization.XmlAttributes a, System.Boolean repeats, System.Boolean openModel, System.Xml.Serialization.RecursionLimiter limiter) [0x00162] in <03e950671d964403ab67ff751c460757>:0 
   --- End of inner exception stack trace ---
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeModel model, System.String ns, System.Xml.Serialization.XmlReflectionImporter+ImportContext context, System.String dataType, System.Xml.Serialization.XmlAttributes a, System.Boolean repeats, System.Boolean openModel, System.Xml.Serialization.RecursionLimiter limiter) [0x00393] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeModel model, System.String ns, System.Xml.Serialization.XmlReflectionImporter+ImportContext context, System.String dataType, System.Xml.Serialization.XmlAttributes a, System.Xml.Serialization.RecursionLimiter limiter) [0x00000] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.ImportAccessorMapping (System.Xml.Serialization.MemberMapping accessor, System.Xml.Serialization.FieldModel model, System.Xml.Serialization.XmlAttributes a, System.String ns, System.Type choiceIdentifierType, System.Boolean rpc, System.Boolean openModel, System.Xml.Serialization.RecursionLimiter limiter) [0x00fc0] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.ImportFieldMapping (System.Xml.Serialization.StructModel parent, System.Xml.Serialization.FieldModel model, System.Xml.Serialization.XmlAttributes a, System.String ns, System.Xml.Serialization.RecursionLimiter limiter) [0x00083] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers (System.Xml.Serialization.StructMapping mapping, System.Xml.Serialization.StructModel model, System.Boolean openModel, System.String typeName, System.Xml.Serialization.RecursionLimiter limiter) [0x00235] in <03e950671d964403ab67ff751c460757>:0 
   --- End of inner exception stack trace ---
  at System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers (System.Xml.Serialization.StructMapping mapping, System.Xml.Serialization.StructModel model, System.Boolean openModel, System.String typeName, System.Xml.Serialization.RecursionLimiter limiter) [0x003b6] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping (System.Xml.Serialization.StructModel model, System.String ns, System.Boolean openModel, System.Xml.Serialization.XmlAttributes a, System.Xml.Serialization.RecursionLimiter limiter) [0x0015b] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeModel model, System.String ns, System.Xml.Serialization.XmlReflectionImporter+ImportContext context, System.String dataType, System.Xml.Serialization.XmlAttributes a, System.Boolean repeats, System.Boolean openModel, System.Xml.Serialization.RecursionLimiter limiter) [0x002af] in <03e950671d964403ab67ff751c460757>:0 
   --- End of inner exception stack trace ---
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeModel model, System.String ns, System.Xml.Serialization.XmlReflectionImporter+ImportContext context, System.String dataType, System.Xml.Serialization.XmlAttributes a, System.Boolean repeats, System.Boolean openModel, System.Xml.Serialization.RecursionLimiter limiter) [0x00393] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeModel model, System.String ns, System.Xml.Serialization.XmlReflectionImporter+ImportContext context, System.String dataType, System.Xml.Serialization.XmlAttributes a, System.Xml.Serialization.RecursionLimiter limiter) [0x00000] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.IncludeType (System.Type type, System.Xml.Serialization.RecursionLimiter limiter) [0x00037] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlReflectionImporter.IncludeType (System.Type type) [0x00007] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlSerializer..ctor (System.Type type, System.Xml.Serialization.XmlAttributeOverrides overrides, System.Type[] extraTypes, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace, System.String location, System.Security.Policy.Evidence evidence) [0x0002a] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlSerializer..ctor (System.Type type, System.Xml.Serialization.XmlAttributeOverrides overrides, System.Type[] extraTypes, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace, System.String location) [0x00000] in <03e950671d964403ab67ff751c460757>:0 
  at System.Xml.Serialization.XmlSerializer..ctor (System.Type type, System.Type[] extraTypes) [0x00000] in <03e950671d964403ab67ff751c460757>:0 
  at I2.TextAnimation.SE_Animation.LoadFromSerializedData (System.String data) [0x0003c] in D:\Games\Unity\games\Match3\Seven Sails Games\My Downtown\Assets\I2\Text Animation\Scripts\Vertex Effects\Animation\SE_Animation.cs:186 
UnityEngine.Debug:Log(Object)
I2.TextAnimation.SE_Animation:LoadFromSerializedData(String) (at Assets/I2/Text Animation/Scripts/Vertex Effects/Animation/SE_Animation.cs:191)
I2.TextAnimation.SE_AnimationPreset:CreateAnimation() (at Assets/I2/Text Animation/Scripts/Vertex Effects/Animation/SE_AnimationPreset.cs:15)
I2.TextAnimation.SE_AnimationSlot:CreateAnimation() (at Assets/I2/Text Animation/Scripts/Vertex Effects/Animation/SE_AnimationSlot.cs:30)
I2.TextAnimation.SE_AnimationSlot:get__Animation() (at Assets/I2/Text Animation/Scripts/Vertex Effects/Animation/SE_AnimationSlot.cs:22)
I2.TextAnimation.TextAnimation_Inspector:OnGUI_AnimationSlot() (at Assets/I2/Text Animation/Editor/Inspectors/TextAnimation_Inspector_Animations.cs:165)
I2.TextAnimation.TextAnimation_Inspector:OnGUI_Animations() (at Assets/I2/Text Animation/Editor/Inspectors/TextAnimation_Inspector_Animations.cs:73)
I2.TextAnimation.TextAnimation_Inspector:OnInspectorGUI() (at Assets/I2/Text Animation/Editor/Inspectors/TextAnimation_Inspector.cs:70)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

Hi,
I’m unable to reproduce this issue.
I tried this:

  • Downloaded the latest version of I2TextAnimation into a project
  • Got the latest TMPro
  • Moved the Assets\Plugins\I2 to Assets\I2
  • Added I2_TMPro to the Scripting Define Symbols
  • Created an scene with a TMPro text and added an animation

That seems to be working fine for me, Am I missing any step?
I noticed that sometimes Unity freaks out a bit when installing TMPro because of the dll switching that it does. Did the problem still happens after restarting the editor?

I was able to make it work!

I just moved the eAnimBlendMode definition from multiple locations to a single one.

public enum eAnimBlendMode { Offset, Replace };

I’m using the Paid Version of TextMeshPRO (instead of the Free), so I don’t know if this is the reason that I had to move I2TextAnimation out of plugins folder to make it work.

But after changing the ENUM now is working as expected! Thanks for the GREAT ASSET and support!

1 Like

Found more 2 bugs!

  • It still does not supports TextMeshPro, only TextMeshProUGUI.
  • When you select an animation from the List, if you change something on it, it will change all over the place that is using the same animation. I do have to clone it and make changes to the clone to make sure it is unique.

Hi @Inter-Illusion

Bug 1 - I made a workaround for the bug of the Flicker before starting an animation.

Added this “ugly” code at the end of SE_Animation.Play

bool b1 = false;
bool b2 = false;
AnimUpdate(0, se, ref b1, ref b2);

Bug 2 - Not working with TextMeshPro, only TextMeshProUGUI I fixed it with a small change at your code that I don’t remember now, but I’m sure it’s a easy fix to you.

Bug 3 - When I want to change an existing animation, I have to duplicate it, then rename and then make the desired changes. I think that should be more explicit, something informing that you cannot change the current animation or it will also be changed everywhere.

I hope a official update is coming soon! =)

Thanks again for the great asset!

Hi,
Thanks for reporting this, I’m almost finished with the new update of the plugin, there are a few new features, new types of animations and parameters that will for sure make a difference!
Will also make sure this bugs get fixed in the new release.

Thanks!
Frank

Is there an estimate to the new release?
And the Trello Link to it seems to be dead.

1 Like

I have to update the trello with the new changes.
I’m about to upload an I2 Localization and after that I will finish testing the changes to TextAnimation and have a new update right after.
Hope that helps,
Frank

1 Like

Is the new version already available?

I have a problem with IL2CPP.

System.NotSupportedException: C:\Program Files\Unity\Editor\2018.2.0f1\Editor\Data\il2cpp\libil2cpp\icalls\mscorlib\System.Reflection.Emit\AssemblyBuilder.cpp(20) : Unsupported internal call for IL2CPP:AssemblyBuilder::basic_init - System.Reflection.Emit is not supported.
  at System.AppDomain.DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.String dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, System.Boolean isSynchronized) [0x00000] in <00000000000000000000000000000000>:0 
  at System.AppDomain.DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Xml.Serialization.CodeGenerator.CreateAssemblyBuilder (System.AppDomain appDomain, System.String name) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Xml.Serialization.TempAssembly.GenerateRefEmitAssembly (System.Xml.Serialization.XmlMapping[] xmlMappings, System.Type[] types, System.String defaultNamespace, System.Security.Policy.Evidence evidence) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Xml.Serialization.TempAssembly..ctor (System.Xml.Serialization.XmlMapping[] xmlMappings, System.Type[] types, System.String defaultNamespace, System.String location, System.Security.Policy.Evidence evidence) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Xml.Serialization.XmlSerializer..ctor (System.Type type, System.Xml.Serialization.XmlAttributeOverrides overrides, System.Type[] extraTypes, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace, System.String location, System.Security.Policy.Evidence evidence) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Xml.Serialization.XmlSerializer..ctor (System.Type type, System.Type[] extraTypes) [0x00000] in <00000000000000000000000000000000>:0 
  at I2.TextAnimation.SE_Animation.LoadFromSerializedData (System.String data) [0x00000] in <00000000000000000000000000000000>:0 
  at I2.TextAnimation.SE_AnimationPreset.CreateAnimation () [0x00000] in <00000000000000000000000000000000>:0 
  at I2.TextAnimation.SE_AnimationSlot.get__Animation () [0x00000] in <00000000000000000000000000000000>:0 
  at I2.TextAnimation.TextAnimation.OnEnable () [0x00000] in <00000000000000000000000000000000>:0

Now 2 years later, I still using it, but I have this problem with a project.

Assets\Plugins\I2\Text Animation\Extensions\TextAnimationTMPro.cs(20,7): error CS0246: The type or namespace name 'TMPro' could not be found (are you missing a using directive or an assembly reference?)

One year has passed, and I am still using this asset. It’s unfortunate that there hasn’t been an update since, as I’m still experiencing the same issues. However, I managed to find solutions for some of them:

1 - To address the problem of missing TMPro, Select PlugIns/I2/Text Animation/I2 Text Animation.asmdef and add “Unity.TextMeshPro” to the Assembly Definition References.


2 - The code to prevent flickering is still necessary. Change SE_Animation.cs line 36 from

  public void Play(TextAnimation se)
       {
           if (se != null)

to

public void Play(TextAnimation se)
        {
            bool b1 = false;
            bool b2 = false;
            AnimUpdate(0, se, ref b1, ref b2);

Will there be any upcoming releases for I2 Text Animation?

I genuinely appreciate this tool and use it in all of my projects. However, there are still a few issues that need addressing, some of which I’ve already reported. Additionally, there are noticeable performance problems in the OnEnable function. It seems like a relatively straightforward matter to resolve, but I’m not well-versed in its internal workings.

This is a fantastic asset, and I’m confident that many others are still using it as well. It would be greatly appreciated if some attention could be given to providing a new update.

I2_TMPro
Unity.TextMeshPro

This is how it works with TextMeshPro

Unity 6 Support

Has anyone managed to get Unity 6 working correctly with I2TextAnimator and TextMeshPro? I need to update some old projects, but when I do, TextAnimator shows a square instead of the text.

I tried to find the problem and adjust the code, but it didn’t work. Has anyone here successfully updated? I will try to contact support once more.