ActionGrouper

Plugins ActionGrouper

JayJayWon

Well-known member
Featured Contributor
Messages
567
Reactions
1,754
Points
93
Patreon
JayJayWon
JayJayWon submitted a new resource:

ActionGrouper - Action Grouper allows multiple actions to be specified and conditionally triggered

Action Grouper allows multiple simultaneous VAM or plugin actions to be specified and conditionally triggered. The actions can be executed from any Trigger Action, such as the Collision triggers or Animation Step triggers. It provides similar functionality to the Trigger Action UI that is built into VAM, but has a number of advantageous features:
  • Groups of actions can be triggered WHEN ever a boolean condition defined in VUML occurs
  • A boolean IF condition can be applied at the...

Read more about this resource...
 
Action groups can be triggered by voice. Can you be more specific? Does this mean voice activated commands or just activate by sound from a mic?
 
@ClubJulze - You can specify a comma separated list of phrases - when any are spoken into the active microphone the action will be triggered. For example the below will toggle the Projector1 light on or off when any of the 3 phrases specified are spoken:
1601924556063.png

It uses the built in Unity Speech recognition engine - which is quite good in my experience. You need to have the VAM application in the foreground for it to work.
 
Last edited:
Is there a way to enable some sort of debug logging? I can't get it to recognize voice.
No debug logging. There are some notes on in the usage guide on how to get it to worl. Most common issue is that you need to ensure the windows default microphone is working and VAM needs to be the foreground windows app (these are Unity imposed restrictions). If you still have problems, let me know - I havent tried it for ages myself.
 
No debug logging. There are some notes on in the usage guide on how to get it to worl. Most common issue is that you need to ensure the windows default microphone is working and VAM needs to be the foreground windows app (these are Unity imposed restrictions). If you still have problems, let me know - I havent tried it for ages myself.
Usage guide ... that's what i'm looking for :)
 
@JayJayWon

Thank you for your great plugin. I have tried it first time today and it works good.
I used voice recognition to have the girls talk to me with using Audiodub (AudioMate by dub) plugin.

This is what I did today but like this I need one of your plugins for each sentence because I can only add one voice sentence per action.

ActionGrouperPlugin.JPG

Would it be possible for you to make an option to enter endless speech trigger sentences in one plugin ? So that each sentence activates a plugin ?

I would like to make girlfriend AI interaction.

User inputs could be:
"How are you today sweetheart ?"
"What is the meaning of life ?"
"I had a bad day at work today."
"Darling, I would like to have sex now."
"I would like to have a beer."

In Audiodub I can make several playlists named by keyword (example lists: How, Do you, bad day, sex, time and so on) or phrases (How are you, Do you know, I would like). Overall it would be 120 lists for now.

Each list contains several mp3 files with girl voice recordings and answers randomly to the keyword or phrase.

If possible it should make also an if descision and could choose a different list because two words/phrases were recognised ("I would like" AND "sex")

And it would be cool if the girl can ask questions after a reply too.
"I had a bad day at work today." -> reply from girl to the statement: "Oh that's terrible. Should I give you a hug or suck your dick to make you feel better ?"
Or if nothing is been said, she could tell random things with a defineable delay.

Some user defineable actions:

"Dance" for me -> a BVH oder MMD plugin is loaded and with a delay the girl could say something like: "You like it when I dance sexy for ya."
Give me a "BJ" -> a BJ or HJ scene or animation will merge load and then the BJ file list will play where she says something between sucking or handjob.

It would be good if a mp3 list could be triggered if no keyword was correctly identified. The girl could say random things like. "I don't know what you want. Be more precise." or "Oh come on, I can't understand a single word what you are talking about."

Do you think you can make that possible please ?

Thank you very much.
 
Last edited:
@JayJayWon

Thank you for your great plugin. I have tried it first time today and it works good.
I used voice recognition to have the girls talk to me with using Audiodub (AudioMate by dub) plugin.

This is what I did today but like this I need one of your plugins for each sentence because I can only add one voice sentence per action.

View attachment 36483

Would it be possible for you to make an option to enter endless speech trigger sentences in one plugin ? So that each sentence activates a plugin ?

I would like to make girlfriend AI interaction.

User inputs could be:
"How are you today sweetheart ?"
"What is the meaning of life ?"
"I had a bad day at work today."
"Darling, I would like to have sex now."
"I would like to have a beer."

In Audiodub I can make several playlists named by keyword (example lists: How, Do you, bad day, sex, time and so on) or phrases (How are you, Do you know, I would like). Overall it would be 120 lists for now.

Each list contains several mp3 files with girl voice recordings and answers randomly to the keyword or phrase.

If possible it should make also an if descision and could choose a different list because two words/phrases were recognised ("I would like" AND "sex")

And it would be cool if the girl can ask questions after a reply too.
"I had a bad day at work today." -> reply from girl to the statement: "Oh that's terrible. Should I give you a hug or suck your dick to make you feel better ?"
Or if nothing is been said, she could tell random things with a defineable delay.

Some user defineable actions:

"Dance" for me -> a BVH oder MMD plugin is loaded and with a delay the girl could say something like: "You like it when I dance sexy for ya."
Give me a "BJ" -> a BJ or HJ scene or animation will merge load and then the BJ file list will play where she says something between sucking or handjob.

It would be good if a mp3 list could be triggered if no keyword was correctly identified. The girl could say random things like. "I don't know what you want. Be more precise." or "Oh come on, I can't understand a single word what you are talking about."

Do you think you can make that possible please ?

Thank you very much.

Hahaha, we both started working on this at the same time. I am facing the same problems in making a concierge for a scene I am working on. You can use several plugins, but that is not a particularly clean implementation. (EDIT: I actually might be wrong about this, it did allow me to do it for two plugins, but once I added a third I get the error "Action Grouper: more than one active Phrase Recogniser was detected. Only one should be running!") It also doesn't look like this specific plugin is created in a way where the JayJayWon will be able to make it recognize different phrases for different actions.

You can easily do a lot of what else you are describing by utilizing MacGruber's logic bricks, though.

For example, you could have one plugin listen for "I would like," and set a counter to 1 if it hears it, then make another plugin listen for "sex," and set a different counter to 1 if it hears that. Another MacGruber logic brick could read both of those values and if it sees both of them set to 1 it can initiate the "I would like"+"sex" command.

You could use one of MacGruber's delay logic bricks to set a maximum time for the player to respond if she asks a question as well.

I don't think you would be able to have the character respond if no keyword was correctly given. JayJayWon would have to be the one to answer this for sure though. But generally I wouldn't recommend the character ever saying this to the player. If you've ever owned a Google Assistant/Alexa/Siri/Cortana device and it says that back to you over and over again when you are trying to ask it something it can be very annoying. I would instead suggest you give players a menu of lines they can say to the character that can be hidden when not in use. At least that is what I am planning on doing for my scene.



In the meantime you could consider this plugin by a redditor: It seems to work for this purpose and allow a variety of voice lines.
 
Last edited:
Thanks for the reply.

I have not read about Voice Trigger plugin but I have found it.

I have the Logic bricks but have not used them because the demo scene is not working (nothing happens on each station when I click) and I don't know how to use them in my scene. You have explained it but it sounds like a lot of extra work.

I was hoping to implement an AI script like ChatScript but that is coded in C.

Yes the phrase plugin can only be run once but there was no error on using two ActionGrouper plugins for me too.
But I think it could be possible to work with multiple action words.

I can hardly understand the code and I can't code myself so I hope JayJayWon can hopefully recode it to make another voice plugin.

Greetings
 
Last edited:
@JayJayWon

Thank you for your great plugin. I have tried it first time today and it works good.
I used voice recognition to have the girls talk to me with using Audiodub (AudioMate by dub) plugin.

This is what I did today but like this I need one of your plugins for each sentence because I can only add one voice sentence per action.

View attachment 36483

Would it be possible for you to make an option to enter endless speech trigger sentences in one plugin ? So that each sentence activates a plugin ?

I would like to make girlfriend AI interaction.

User inputs could be:
"How are you today sweetheart ?"
"What is the meaning of life ?"
"I had a bad day at work today."
"Darling, I would like to have sex now."
"I would like to have a beer."

In Audiodub I can make several playlists named by keyword (example lists: How, Do you, bad day, sex, time and so on) or phrases (How are you, Do you know, I would like). Overall it would be 120 lists for now.

Each list contains several mp3 files with girl voice recordings and answers randomly to the keyword or phrase.

If possible it should make also an if descision and could choose a different list because two words/phrases were recognised ("I would like" AND "sex")

And it would be cool if the girl can ask questions after a reply too.
"I had a bad day at work today." -> reply from girl to the statement: "Oh that's terrible. Should I give you a hug or suck your dick to make you feel better ?"
Or if nothing is been said, she could tell random things with a defineable delay.

Some user defineable actions:

"Dance" for me -> a BVH oder MMD plugin is loaded and with a delay the girl could say something like: "You like it when I dance sexy for ya."
Give me a "BJ" -> a BJ or HJ scene or animation will merge load and then the BJ file list will play where she says something between sucking or handjob.

It would be good if a mp3 list could be triggered if no keyword was correctly identified. The girl could say random things like. "I don't know what you want. Be more precise." or "Oh come on, I can't understand a single word what you are talking about."

Do you think you can make that possible please ?

Thank you very much.
Action Grouper is meant to be a flexible and generic tool to allow creators to build more complex and interactive scenes. Much of what you are describing should be possible with multiple Action Groupers, Act Randomizers, VUML and Logic Block plugins which can all interact - but I can see it would be a lot of work to do some of the things you suggest. A dedicated plugin to do this sort of complex branching speech interaction would I feel need to be a completely new and different plugin - one that I suspect might have limited appeal due to the lack of suitable girl voice recordings that can be distributed license free. Ultimately I think it would be quite stilted experience without a proper AI engine driving it. I'll give it some more thought - but I dont think its likely to be a direction I'll pursue.
 
Hahaha, we both started working on this at the same time. I am facing the same problems in making a concierge for a scene I am working on. You can use several plugins, but that is not a particularly clean implementation. (EDIT: I actually might be wrong about this, it did allow me to do it for two plugins, but once I added a third I get the error "Action Grouper: more than one active Phrase Recogniser was detected. Only one should be running!") It also doesn't look like this specific plugin is created in a way where the JayJayWon will be able to make it recognize different phrases for different actions.

You can easily do a lot of what else you are describing by utilizing MacGruber's logic bricks, though.

For example, you could have one plugin listen for "I would like," and set a counter to 1 if it hears it, then make another plugin listen for "sex," and set a different counter to 1 if it hears that. Another MacGruber logic brick could read both of those values and if it sees both of them set to 1 it can initiate the "I would like"+"sex" command.

You could use one of MacGruber's delay logic bricks to set a maximum time for the player to respond if she asks a question as well.

I don't think you would be able to have the character respond if no keyword was correctly given. JayJayWon would have to be the one to answer this for sure though. But generally I wouldn't recommend the character ever saying this to the player. If you've ever owned a Google Assistant/Alexa/Siri/Cortana device and it says that back to you over and over again when you are trying to ask it something it can be very annoying. I would instead suggest you give players a menu of lines they can say to the character that can be hidden when not in use. At least that is what I am planning on doing for my scene.



In the meantime you could consider this plugin by a redditor: It seems to work for this purpose and allow a variety of voice lines.
You should be able to run multiple (more than 2) ActionGroupers with different speech triggers - so that sounds like another bug. I'll have to look into it.

I'm not that familiar with LogicBricks but my VUML plugin has some similar functionality and you can have timers and then trigger an action after a certain time. The timer could be stopped or restarted if certain keywords were spoken. So you could implement the character responding after no recognised words spoken in a certain time frame.
 
Action Grouper is meant to be a flexible and generic tool to allow creators to build more complex and interactive scenes. Much of what you are describing should be possible with multiple Action Groupers, Act Randomizers, VUML and Logic Block plugins which can all interact - but I can see it would be a lot of work to do some of the things you suggest. A dedicated plugin to do this sort of complex branching speech interaction would I feel need to be a completely new and different plugin - one that I suspect might have limited appeal due to the lack of suitable girl voice recordings that can be distributed license free. Ultimately I think it would be quite stilted experience without a proper AI engine driving it. I'll give it some more thought - but I dont think its likely to be a direction I'll pursue.
Yeah honestly I understand plugin creators creating very genericized plugins for scene creators to use. Honestly no one can complain because the alternative is having to make your own scripts, which if you are doing for a large enough scene might be the better option, but definitely a higher bar of entry for many. Maybe if conversations in VaM become popular enough it will be worth it for someone to look into making a better conversation engine.

So I am not using girl voice recordings, but Amazon polly to get some decent voice lines back for a sort of concierge, so I'm not entirely concerned if they sound a little robotic. They are just basic responses. Personally if I were to get to the level where I thought it would be good enough I would commission voice lines like others have done in the past. But due to the cost I would not imagine doing this unless I was actually making money from the scenes I create.

And in general I totally understand you not expanding the scope of the plugin. I am just thankful for anything I get from plugin creators like yourself because I don't know C#!
 
You should be able to run multiple (more than 2) ActionGroupers with different speech triggers - so that sounds like another bug. I'll have to look into it.

I'm not that familiar with LogicBricks but my VUML plugin has some similar functionality and you can have timers and then trigger an action after a certain time. The timer could be stopped or restarted if certain keywords were spoken. So you could implement the character responding after no recognised words spoken in a certain time frame.
I'll try and document the behavior myself in more detail, just to see how many ActionGroupers I can get working as speech triggers simultaneously. Mind you when I started to experience the issue it was fairly far into the test scene I was building, so other plugins I was running may be conflicting with it.

I'll have to take a look at using your VUML plugin, as your implementation of boolean logic and float/string comparison might be easier to use on the larger scale I am using it for with conversations and such. I was planning on a more basic conversation system with simple set lines for the player to say, but the scenario Frett described seems pretty interesting, and maybe something I'll do for basic details of the player being retained. Like name, if I spend enough time creating recordings for it.
 
Yeah honestly I understand plugin creators creating very genericized plugins for scene creators to use. Honestly no one can complain because the alternative is having to make your own scripts, which if you are doing for a large enough scene might be the better option, but definitely a higher bar of entry for many. Maybe if conversations in VaM become popular enough it will be worth it for someone to look into making a better conversation engine.

So I am not using girl voice recordings, but Amazon polly to get some decent voice lines back for a sort of concierge, so I'm not entirely concerned if they sound a little robotic. They are just basic responses. Personally if I were to get to the level where I thought it would be good enough I would commission voice lines like others have done in the past. But due to the cost I would not imagine doing this unless I was actually making money from the scenes I create.

And in general I totally understand you not expanding the scope of the plugin. I am just thankful for anything I get from plugin creators like yourself because I don't know C#!
Yeah I can see there would be significant interest in a dedicated conversation engine plugin that could drive dialogue (speech or text) from user inputs (speech or buttons). But its probably a big undertaking (for me) and one that I suspect would push (or break) the limits of my ability and time availability!

You might want to check out this for speech generation. https://replicastudios.com/
It's still a bit robotic, but it trys to bring emotion into the dialogue. And its affordable.
 
Yeah I can see there would be significant interest in a dedicated conversation engine plugin that could drive dialogue (speech or text) from user inputs (speech or buttons). But its probably a big undertaking (for me) and one that I suspect would push (or break) the limits of my ability and time availability!

You might want to check out this for speech generation. https://replicastudios.com/
It's still a bit robotic, but it trys to bring emotion into the dialogue. And its affordable.

Thank you for the replies and the link. The voices are quite good and the price ok.
Maybe I will try that when I find a good script solution.
 
Yeah I can see there would be significant interest in a dedicated conversation engine plugin that could drive dialogue (speech or text) from user inputs (speech or buttons). But its probably a big undertaking (for me) and one that I suspect would push (or break) the limits of my ability and time availability!

You might want to check out this for speech generation. https://replicastudios.com/
It's still a bit robotic, but it trys to bring emotion into the dialogue. And its affordable.
I actually don't know if there would be significant interest. I've been looking for information about how people use VaM and honestly I don't know how interested people would be in having to speak (Though I was intending on adding UI buttons for those who didn't want to, or those who have an accent). I think most of the common users of VaM just load up simple animations with the characters/clothing they like and watch them go. I dunno.

I will definitely check that out, it sounds much better than what I was using and four hours of audio for $24 is much more compelling than the amount I would expect to pay with an actual voice actress. It's not perfect but I think the emotion will make it less immersion breaking.

I just started making scenes so I'm gonna take a bunch of ideas I have and throw them at the wall and see what sticks. Like for example, this scene I'm working on was going to include strip poker/blackjack/gambling and potentially a brothel/strip club that you would spend in scene currency on.

Thanks again!
 
Ok, I am obviously too dumb for the simplest things:
I let VUML count a collision trigger, and want Action Grouper to play animation A when count is 1, and play animation B when count is higher. Both are set as plugins of my collision trigger.
Maybe someone can enlighten me with a step by step example how to achieve this?
 
Ok, I am obviously too dumb for the simplest things:
I let VUML count a collision trigger, and want Action Grouper to play animation A when count is 1, and play animation B when count is higher. Both are set as plugins of my collision trigger.
Maybe someone can enlighten me with a step by step example how to achieve this?
I replied on Discord also, but essentially you need to setup two vBOOLs - one for the when count is 1 and another for when count>1. Then two AGs - one to play each Animation. The AGs can trigger based on when the vBOOLs are true or false.
 
I replied on Discord also, but essentially you need to setup two vBOOLs - one for the when count is 1 and another for when count>1. Then two AGs - one to play each Animation. The AGs can trigger based on when the vBOOLs are true or false.
Yeah thank you, I just figured it out slightly different: I added another static counter and a float comparison of both to turn a bool from false to true. Quite simple after I took some time thinking, I am slow on it 😉👍🏻
 
Is it possible to achieve the following goal:

A conditional trigger that only turns on a light when a certain segment of animation is playing in Timeline Plugin.

For example, I have 10 different animation segments and I only want to have Light No.1 turned on when animation No.3 is playing. Usually, I have to add triggers to all 10 animation segments to specify the state of the light. I am looking for an easier way to achieve this.

Any ideas are welcomed! Thanks!
 
Is it possible to achieve the following goal:

A conditional trigger that only turns on a light when a certain segment of animation is playing in Timeline Plugin.

For example, I have 10 different animation segments and I only want to have Light No.1 turned on when animation No.3 is playing. Usually, I have to add triggers to all 10 animation segments to specify the state of the light. I am looking for an easier way to achieve this.

Any ideas are welcomed! Thanks!
I dont really know enough about Timeline to answer that. If Timeline makes that information available via the standard VAM Trigger system then it should be.
 
[Error : Unity Log] NullReferenceException: Object reference not set to an instance of an object
Stack trace:
JayJayWon.ActionGrouper.OnEnable ()
UnityEngine.GameObject:AddComponent(Type)
DynamicCSharp.ScriptType:CreateBehaviourInstance(GameObject)
DynamicCSharp.ScriptType:CreateInstance(GameObject)
MVRPluginManager:CreateScriptController(MVRPlugin, ScriptType)
MVRPluginManager:SyncPluginUrlInternal(MVRPlugin, Boolean)
MVRPluginManager:SyncPluginUrl(MVRPlugin)
<CreatePluginWithId>c__AnonStorey0:<>m__0(String)
JSONStorableString:InternalSetVal(String, Boolean)
JSONStorableString:set_val(String)
JSONStorableUrl:set_val(String)
JSONStorableUrl:RestoreFromJSON(JSONClass, Boolean, Boolean, Boolean)
MVRPluginManager:LateRestoreFromJSON(JSONClass, Boolean, Boolean, Boolean)
Atom:LateRestore(JSONClass, Boolean, Boolean, Boolean, Boolean, Boolean, Boolean)
<LoadCo>c__Iterator1:MoveNext()
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

this is error log when open some scene.

as a free plugin, I recommend you can opensource it.
 
Back
Top Bottom