Engine

Social Interactions

Your avatar is your identity in any space you enter. The SocialInteractions developer module lets each user better express themselves and their natural movements, adding a touch of realism to the experience.

This module includes the following features:

Body OrientationMakes the head of everyone's avatar face where their corresponding user's camera is pointing, through a mix of neck and waist rotation. This provides a subtle cue as to who or what someone else is interacting with.
Chat AnimationsAdds some liveliness to the in-experience chat by making avatars occasionally play animations, depending on the content of the messages they send. The list of "trigger words" that activate each animation is configurable.

Module Usage

Installation

To use the SocialInteractions module in an experience:

  1. From the View tab, open the Toolbox and select the Creator Store tab.

    Toolbox toggle button in Studio
  2. Make sure the Models sorting is selected, then click the See All button for Categories.

  3. Locate and click the Dev Modules tile.

  4. Locate the Social Interactions module and click it, or drag-and-drop it into the 3D view.

  5. In the Explorer window, move the entire SocialInteractions model into ServerScriptService. Upon running the experience, the module will distribute itself to various services and begin running.

Configuration

Simply inserting the SocialInteractions module will enable both the body orientation and chat animations features inside your place. To adjust the default behavior:

  1. In StarterPlayerScripts, create a new LocalScript and rename it to ConfigureSocialInteractions.

  2. Paste the following code into the new script, using the configure function to customize the module's behavior.

    LocalScript

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local SocialInteractions = require(ReplicatedStorage:WaitForChild("SocialInteractions"))
    -- Make waist rotation more pronounced and disable the chat animations feature
    SocialInteractions.configure({
    waistOrientationWeight = 0.75,
    useChatAnimations = false,
    })

Chat Animation Trigger Words

The list of "trigger words" that activate each chat animation is configurable and Lua string patterns are utilized to increase recognizable words. For example, one combination used by the Wave animation is he+y+o*, meaning that hey, heyyy, heyo, heyyyyo, heeeeyyyyo, and other variations qualify to trigger the animation.

Also note that trigger words are case-insensitive, so typing hey is the same as HEY, Hey, and other variations.

AnimationAnimation IDWord Patterns
Wave3344650532

hell+o+    h+i+o*    wa+[sz]+u+p+    y+o+    greetings*    salutations*    goo+d+%smorning+    he+y+o*    howdy+    what's*%s*up+   

Applaud5911729486

ya+y+    h[ou]+r+a+y+    woo+t*    woo+h+oo+    bravo+    congratulations+    congrats+    gg    pog+    poggers+   

Agree4841397952

ye+s*    ye+a+h*    y[eu]+p+    o+k+    o+k+a+y+   

Disagree4841401869

no+    no+pe+    yi+ke+s+   

Shrug3334392772

not+%s+sure+    idk+    don't%s+know+    i%s+don't%s+know+    who+%s+knows+   

Laugh3337966527

lo+l+    rof+l+    ha[ha]*    he[he]+   

Sleep4686925579

zzz+    yawn+   

The list of trigger words that activate each animation is configurable, and additional animations can be added via the setTriggerWordsForChatAnimation function. For example, the following LocalScript links the Tilt animation with the string pattern of cra+zy to support trigger words like crazy and craaaaaazy. It also registers an additional string pattern of coo+l for the Applaud animation to support words like cool and coooool.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SocialInteractions = require(ReplicatedStorage:WaitForChild("SocialInteractions"))
-- Register string pattern for the "Tilt" animation
SocialInteractions.setTriggerWordsForChatAnimation("rbxassetid://3334538554", {"cra+zy"})
-- Register additional string pattern for the "Applaud" animation
SocialInteractions.setTriggerWordsForChatAnimation("rbxassetid://5911729486", {"coo+l"})

API Reference

Functions

configure

configure(config: table)

Overrides default configuration options through the following keys/values in the config table. This function can only be called from a LocalScript.

KeyDescriptionDefault
useBodyOrientationToggles the body orientation feature.true
waistOrientationWeightBody orientation uses a mix of waist and neck rotation; this parameter determines which of the two is prevalent. A value of 1 places complete emphasis on the waist while 0 places complete emphasis on the neck.0.5
useChatAnimationsToggles the chat animations feature.true
useDefaultTriggerWordsForChatEmotesChat animations comes with a default list of trigger words. Set this parameter to false if you'd like to turn them off and provide your own.true
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SocialInteractions = require(ReplicatedStorage:WaitForChild("SocialInteractions"))
-- Make waist rotation more pronounced and disable the chat animations feature
SocialInteractions.configure({
waistOrientationWeight = 0.75,
useChatAnimations = false,
})

setTriggerWordsForChatAnimation

setTriggerWordsForChatAnimation(animationId: string, triggerWords: table)

Registers a new animation in the chat animation feature. Typing any word that matches a string pattern included in the triggerWords table will activate the animation whose ID is passed as the first parameter.

Note that trigger words are case-insensitive to players, so a pattern of woah will accept chat phrases of woah, WOAH, Woah, and other variations.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SocialInteractions = require(ReplicatedStorage:WaitForChild("SocialInteractions"))
-- Register new string pattern for a custom animation
SocialInteractions.setTriggerWordsForChatAnimation(
"rbxassetid://3334538554",
{"cra+zy", "woah+"}
)

Events

onChatAnimationPlayed

Fires when a chat animation plays. The connected function receives the animation ID and the word that triggered the animation as its arguments. This event can only be connected in a LocalScript.

Parameters
animationId: string Animation ID that played.
triggerWord: stringChat word that triggered the animation.
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SocialInteractions = require(ReplicatedStorage:WaitForChild("SocialInteractions"))
SocialInteractions.onChatAnimationPlayed:Connect(function(animationId, triggerWord)
print(animationId, triggerWord)
end)