キャラクターアニメーションの再生は、アバターや非プレイヤーキャラクター(NPC)が視聴者に対して表現力豊かでリアル、かつ魅力的にするための重要な要素です。没入感のあるビジュアルを提供するだけでなく、キャラクターアニメーションはプレイヤーに行動に対するフィードバックを提供し、環境のナビゲート方法をガイドし、キャラクターや他のキャラクターに関する重要な情報を提供します。
Hazardous Space Station.rbxlファイルを参考にしながら、このチュートリアルではキャラクターアニメーションを2つの異なる技術を使用して再生する方法を示し、以下についてガイダンスを提供します。
- デフォルトのキャラクターアニメーションアセットIDを自分のカスタムアニメーションに置き換える方法。
- 3D空間内でのキャラクターの動作に応じてアニメーションをトリガーする方法。
このチュートリアルを完了すると、さまざまなゲームプレイの状況に合わせてアニメーションをカスタマイズするためのスキルを習得できます。
デフォルトのアニメーションを変更
デフォルトのHumanoidオブジェクトを持つすべてのキャラクターは、プレイヤーが制御するアバターであれ、非プレイヤーキャラクター(NPC)であれ、特定の体験内の動作(走る、登る、ジャンプするなど)を実行するときに再生される一連のデフォルトのアニメーションを含んでいます。Robloxは、追加のスクリプト作業なしで、すべての体験にこれらのアニメーションを提供します。
しかし、これらのデフォルトのアニメーションがあなたの世界の環境、 aesthetics (美的)、または全体的な物語のデザイン要件を満たさない場合、それらを経験に参加するすべてのプレイヤーに適用されるカスタムアニメーションと交換することができます。
例として、次のセクションではデフォルトの歩行アニメーションをCreate Character Animationsのカスタム歩行サイクルアニメーションと交換する方法を教えます。このプロセスを使用して、デフォルトのアニメーションを自分のアニメーションアセットIDに置き換えることができます。
スクリプトを作成する
すべてのキャラクターのHumanoidオブジェクトには、キャラクターのデフォルトのアニメーションを保存する子Animatorオブジェクトが含まれています。これらのデフォルトのアニメーションのいずれかを新しいアセットIDに設定するには、プレイヤーが体験にロードされるとすぐにAnimatorオブジェクトのデフォルト値を参照および上書きできるように、ServerScriptServiceにスクリプトを作成する必要があります。
デフォルトのアニメーションアセットIDを参照するスクリプトを作成するには:
Explorerウィンドウで、ServerScriptServiceに新しいスクリプトを追加します。
- ServerScriptServiceの上にカーソルを合わせ、 ⊕ ボタンをクリックします。
- コンテキストメニューからScriptを挿入します。
新しいスクリプトに、以下のコードを貼り付けます:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
アセットIDを置き換える
プレイヤーがサーバーにロードおよび接続されたときに、スクリプトがそれを検出できることがわかったので、アニメーションIDを自分のカスタムアニメーションと交換するようにスクリプトを修正できます。
次の表には、Animatorオブジェクト内で呼び出して置き換えられるすべてのデフォルトのキャラクターアニメーションが含まれています。Idleには、より頻繁または少なく再生されるようにプログラムできる2つのバリエーションがあります。
| キャラクター動作 | アニメートスクリプト参照 |
| 走る | animateScript.run.RunAnim.AnimationId |
| 歩く | animateScript.walk.WalkAnim.AnimationId |
| ジャンプ | animateScript.jump.JumpAnim.AnimationId |
| アイドル | animateScript.idle.Animation1.AnimationId |
| 落下 | animateScript.fall.FallAnim.AnimationId |
| 泳ぐ | animateScript.swim.Swim.AnimationId |
| 泳ぐ(アイドル) | animateScript.swimidle.SwimIdle.AnimationId |
| 登る | animateScript.climb.ClimbAnim.AnimationId |
デフォルトの歩行アニメーションアセットIDを置き換えるには:
デフォルトの歩行アニメートスクリプト参照を呼び出し、次にアセットIDを自分のカスタムアニメーションアセットIDに置き換えます。たとえば、次のコードサンプルは、Create Character Animationsからの歩行サイクルアニメーションを参照しています。
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")local animateScript = character:WaitForChild("Animate")animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)体験をプレイテストして、カスタム歩行アニメーションがデフォルトのアニメーションをオーバーライドすることを確認します。
ドロップダウンメニューからTestを選択し、その右にあるPlayボタンをクリックしてプレイテストを開始します。

アバターでスペースステーションを歩き回ります。
アニメーションをトリガーする
前の技術は、特定の体験内の動作を行うたびに自動的に再生されるデフォルトアニメーションを置き換えることに焦点を当てていますが、3D空間内の任意のキャラクター動作に応じてアニメーションをプログラム的にトリガーすることもできます。たとえば、アイテムを拾ったり、危険からのダメージを受けたりします。
アニメーションを再生するこの方法は、プレイヤーに環境内のオブジェクトとどのように対話すべきかに関する即時のフィードバックを提供するため便利です。これを示すために、次のセクションでは、キャラクターが危険な蒸気漏れに近すぎるときにアニメーションをトリガーする方法を示し、プレイヤーが壁にあまり近くを歩かないように subtly 教えます。
ボリュームを挿入する
ユニークなゲームプレイの動作をトリガーする一般的な方法の1つは、ボリューム、つまり3D空間内の見えない領域を使用して、キャラクターやオブジェクトが環境の特定の領域と相互作用するかどうかを検出することです。ボリュームをスクリプトと組合わせることで、その衝突フィードバックを使用して、プレイヤーの健康を減少させたり、アニメーションを再生したりすることができます。

体験にボリュームを追加するときは、アニメーションをトリガーしたい空間のみをカバーするようにスケールを設定することが重要です。ボリュームが小さすぎると、プレイヤーがアニメーションを再生するためにその領域と衝突しない可能性があります。一方、ボリュームが大きすぎると、プレイヤーがアイテムや興味のある領域に達する前にアニメーションが再生され、アニメーションをトリガーするために何をしたのか理解できない可能性があります。
蒸気漏れの周囲にアニメーションをトリガーするボリュームを挿入するには:
- Explorerウィンドウで、新しいブロックパーツを追加します。
- ブロックを配置してリサイズし、アニメーションをトリガーさせたい領域をカバーします。
- Propertiesウィンドウで、
NameをAnimationDetectorに設定します。
Transparencyを1に設定して、ブロックを見えなくします。

スクリプトを作成する
アニメーションをトリガーするための定義された領域ができたので、プレイヤーがボリュームと衝突するたびにプログラムがそれを検出するスクリプトを作成します。その後、衝突イベントをリスニングして、ゲームプレイ要件に適したアニメーションをトリガーできます。
たとえば、このアニメーション技術では、プレイヤーがボリュームと衝突したときに即座にフィードバックを提供するためにLocalScriptを使用します。サーバーが衝突をリスニングしてアニメーションを再生した場合、クライアントへのサーバーからのレプリケーション時間のために、プレイヤーがボリュームに触れてアニメーションが再生されるまでに遅延が発生する可能性があります。
ローカルプレイヤーのキャラクターがボリュームに触れたときに検出するローカルスクリプトを作成するには:
Explorerウィンドウで、StarterCharacterScriptsに新しいスクリプトを追加します。この配置により、スクリプトとその子がプレイヤーキャラクターに参加時にクローンされ、再生時にもクローンされます。
- StarterPlayerを展開し、その子のStarterCharacterScriptsの上にカーソルを合わせ、⊕ ボタンをクリックします。
- コンテキストメニューからLocalScriptを挿入し、名前をTriggerAnimationに変更します。
新しいスクリプトに、以下のコードを貼り付けます:
local Workspace = game:GetService("Workspace")local animation = script:WaitForChild("Animation")local humanoid = script.Parent:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")local animationTrack = animator:LoadAnimation(animation)local animationDetector = Workspace:WaitForChild("AnimationDetector")local debounce = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
TriggerAnimationスクリプトは、3D世界内のすべてのオブジェクトを含むWorkspaceサービスを取得することから始まります。スクリプトは、ボリュームとして機能するPartオブジェクトを参照する必要があるため、これは重要です。
体験にロードまたは再生される各プレイヤーキャラクターに対して、スクリプトは以下を待ちます:
- 次のセクションで追加する子Animationオブジェクト。
- ワークスペースにあるAnimationDetectorという名前のボリュームオブジェクト。
何かがボリュームと衝突すると、Touchedイベントハンドラ関数は、衝突したBasePartがキャラクターモデルの子である場合はModelである最初の祖先を取得します。それがそうであれば、関数は次にModelがローカルプレイヤーのキャラクターかどうかをチェックします。そうであれば、関数は次のことを行います:
- デバウンスをtrueに設定する。
- アニメーションを再生し、終了を待機する。
- デバウンスをfalseに戻す。
デバウンスをfalseからtrue、再びfalseに設定するのは、プレイヤーがボリュームと連続して衝突する際にアニメーションが繰り返しトリガーされるのを防ぐためのデバウンスパターンです。このデバウンスパターンの詳細については、Detect collisionsを参照してください。
アニメーションを追加する
今すぐ体験をプレイテストしても、ローカルプレイヤーがボリュームと衝突する反応としてアニメーションを再生することができません。これは、スクリプトがその参照を待っている子Animationオブジェクトが存在しないためです。
ローカルスクリプトがボリュームと衝突する際に参照できるアニメーションを追加するには:
Explorerウィンドウで、新しいアニメーションをTriggerAnimationに追加します。
- TriggerAnimationの上にカーソルを合わせ、⊕ ボタンをクリックします。
- コンテキストメニューからAnimationを挿入します。
新しいアニメーションオブジェクトを選択し、PropertiesウィンドウでAnimationIDを、プレイヤーがボリュームに触れたときにトリガーしたいアニメーションアセットIDに設定します。たとえば、Hazardous Space Stationのサンプルでは、rbxassetid://3716468774を参照してキャラクターが後ろに倒れるアニメーションを再生します。
体験をプレイテストして、プレイヤーが最初の蒸気漏れに近づいたときにアニメーションが再生されることを確認します。