Page 1 of 1

Read Current Text Character Being Written

Posted: Mon Apr 17, 2023 5:53 pm
by uqo
Hey there,

I'm implementing an Animal Crossing-style dialogue system into a game using FMOD in Unity and can't figure out a way to read what text symbol is currently being output by the UnityUITypewriterEffect.

This is what I have so far which seems to be working fine for changing the actor in FMOD, I just want a similar way to read the current text symbol "abc" etc. it gets very confusing if I say character so just trying to be clear what I mean :lol:

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using FMODUnity;
using PixelCrushers.DialogueSystem;

public class FMODDialogueAudio : MonoBehaviour
{
    FMOD.Studio.EventInstance characterSound;
    int currentCharacter;

    private void Start()
    {
        characterSound = RuntimeManager.CreateInstance("event:/SFX/Dialogue/dialogueMulti");
    }

    private void Update()
    {
        int actorID = DialogueManager.currentConversationState.subtitle.speakerInfo.id;
        characterSound.setParameterByName("Speaker", actorID);
        GetCurrentCharacter();
        characterSound.setParameterByName("TextCharacter", currentCharacter);

    }

    public void PlayCharacter()
    {
        characterSound.start();
    }

    void GetCurrentCharacter()
    {
        // No idea what to do here
    }
}
any help would be greatly appreciated

Re: Read Current Text Character Being Written

Posted: Mon Apr 17, 2023 6:51 pm
by Tony Li
Hi,

Instead of creating a separate script like that, make a subclass of UnityUITypewriterEffect -- or, better yet, switch to TextMesh Pro (instructions) and make a subclass of TextMeshProTypewriterEffect. Use this subclass in place of the original component.

Override the PlayCharacterAudio(char) method.

Re: Read Current Text Character Being Written

Posted: Mon Apr 17, 2023 10:04 pm
by uqo
Thank you for the speedy reply!

I'm a little confused as to whether that solves the problem I'm having.

I need each character of the alphabet to play a different sound depending on what character that is.

I'm attempting to switch over to text mesh pro but I may not be able to due to the team I'm working on but I feel I'm stuck in a place where i would have to figure out the same issue in Text Mesh Pro?

I'm not an expert on coding as I am a sound designer so I'm sorry if I'm just not getting it.

Thanks again for your help.

Re: Read Current Text Character Being Written

Posted: Mon Apr 17, 2023 10:24 pm
by Tony Li
Hi,

The process is the same whether you're using a Text component or TextMesh Pro component. TextMesh Pro generally provides crisper text, but Text is fine, too.

Assuming you're using Text, create a script something like this:

FMODTypewriterEffect .cs

Code: Select all

using UnityEngine;
using FMODUnity;
using PixelCrushers.DialogueSystem;

public class FMODTypewriterEffect : UnityUITypewriterEffect
{
    FMOD.Studio.EventInstance characterSound;

    private void Start()
    {
        characterSound = RuntimeManager.CreateInstance("event:/SFX/Dialogue/dialogueMulti");
    }
    
    protected override void PlayCharacterAudio(char c)
    {
        int actorID = DialogueManager.currentConversationState.subtitle.speakerInfo.id;
        characterSound.setParameterByName("Speaker", actorID);
        int characterIntValue = (int)c;
        characterSound.setParameterByName("TextCharacter", c);
        characterSound.Start();
     }
}
Then remove the UnityUITypewriterEffect component from your subtitle text GameObject, and add an FMODTypewriterEffect instead. If other components, such as a continue button's StandardUIContinueButtonFastForward component, reference the typewriter effect, make sure you update the references in those other components, too.

Re: Read Current Text Character Being Written

Posted: Mon Apr 17, 2023 10:35 pm
by uqo
Thank you for writing that script out for me.

I'm currently getting an error saying that because it doesn't derive from MonoBehaviour there is an error saving.

Thank you for that note on the buttons, I think that was what was going wrong for me a minute ago

Re: Read Current Text Character Being Written

Posted: Mon Apr 17, 2023 10:46 pm
by uqo
Just manged to fix it i think by adding PixelCrushers.DialogueSystem. before it

Re: Read Current Text Character Being Written

Posted: Mon Apr 17, 2023 10:47 pm
by uqo
thank you so much for your help, i'll try and get this to work and let you know :)

Re: Read Current Text Character Being Written

Posted: Mon Apr 17, 2023 11:30 pm
by uqo
May I ask what the integer values of each letter are? I think this may be stopping any audio from playing as the values I have in the fmod parameter only range from 0 to 27? for a-z and space " ".

Re: Read Current Text Character Being Written

Posted: Tue Apr 18, 2023 1:55 am
by uqo
Managed to get it working how i was after. thank you again for your help I was getting really stuck

Re: Read Current Text Character Being Written

Posted: Tue Apr 18, 2023 8:06 am
by Tony Li
Glad to help!