キャラクターアニメーションの再生は、アバターや非プレイヤーキャラクター(NPC)を表現豊かでリアルにし、観客を引きつける重要な要素です。没入感のあるビジュアルを提供するだけでなく、キャラクターアニメーションはプレイヤーの行動に対するフィードバック、環境のナビゲート方法に関するガイダンス、キャラクターや他のキャラクターに関する重要な情報を提供します。
危険な宇宙ステーション .rbxlファイルを参考にして、このチュートリアルでは、2つの異なる技術を使用してキャラクターアニメーションを再生する方法を示します。以下の内容を含みます:
- デフォルトのキャラクターアニメーションアセットIDを自分のカスタムアニメーションに置き換える方法。
- 3D空間内のキャラクターのアクションに応じてアニメーションをトリガーする方法。
このチュートリアルを完了すると、さまざまなゲームプレイ状況に合わせてアニメーションをカスタマイズするスキルを身につけることができます。
デフォルトアニメーションの変更
デフォルトのHumanoidオブジェクトを持つすべてのキャラクター、プレイヤーが操作するアバターや非プレイヤーキャラクター(NPC)を問わず、特定のゲーム内アクション(走る、登る、ジャンプするなど)を行うときに再生される一連のデフォルトアニメーションが含まれています。Robloxは、追加のスクリプト作業なしで、すべてのゲームに対してこれらのアニメーションを提供します。
しかし、これらのデフォルトアニメーションがあなたの世界の環境、審美、または全体的な物語のデザイン要件を満たさない場合、ゲームに参加するすべてのプレイヤーに適用されるカスタムアニメーションに置き換えることができます。
次のセクションでは、デフォルトの歩行アニメーションをキャラクターアニメーションの作成からのカスタム歩行サイクルアニメーションに置き換える方法を教えます。このプロセスを使用して、デフォルトのアニメーションを自分のアニメーションアセットIDに置き換えることができます。
スクリプトの作成
すべてのキャラクターのHumanoidオブジェクトには、キャラクターのデフォルトアニメーションをすべて保存する子のAnimatorオブジェクトが含まれています。これらのデフォルトアニメーションのいずれかを新しいアセットIDに設定するには、プレイヤーがゲームにロードされるとすぐにAnimatorオブジェクトのデフォルト値を参照して上書きできるように、ServerScriptServiceにスクリプトを作成する必要があります。
デフォルトのアニメーションアセットIDを参照するスクリプトを作成するには:
Explorerウィンドウで、ServerScriptServiceに新しいスクリプトを追加します。
- ServerScriptServiceにカーソルを合わせて、⊕ボタンをクリックします。
- コンテキストメニューからスクリプトを挿入します。
新しいスクリプトに、以下のコードを貼り付けます:
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に置き換えます。たとえば、以下のコードサンプルはキャラクターアニメーションの作成からの歩行サイクルアニメーションを参照しています。
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)ゲームをプレイテストして、カスタム歩行アニメーションがデフォルトのアニメーションを上書きすることを確認します。
ドロップダウンメニューからテストを選択し、その右側にある再生ボタンをクリックしてプレイテストを開始します。

アバターで宇宙ステーションを歩き回ります。
アニメーションのトリガー
前の技術は、キャラクターが特定のゲーム内アクションを行うたびに自動的に再生されるデフォルトアニメーションを置き換えることに焦点を当てていますが、プログラム的にアニメーションをトリガーして任意のキャラクターアクションに応じて再生することもできます。たとえば、アイテムを拾ったり、危険からダメージを受けたりする場合です。
このアニメーション再生の方法は、プレイヤーに環境内のオブジェクトとのインタラクション方法に関する即時のフィードバックを提供するため、便利です。次のセクションでは、キャラクターが危険な蒸気漏れに近づいたときにアニメーションをトリガーする方法を示し、プレイヤーに壁の近くを歩かないようにさりげなく教えます。
ボリュームの挿入
ユニークなゲームプレイの動作をトリガーする最も一般的な方法の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に設定するのは、プレイヤーがボリュームに連続して衝突する際にアニメーションが繰り返しトリガーされるのを防ぐデバウンスパターンです。このデバウンスパターンの詳細については、衝突の検出を参照してください。
アニメーションの追加
今すぐゲームをプレイテストすると、TriggerAnimationスクリプトはローカルプレイヤーとボリュームの衝突に応じてアニメーションを再生できません。これは、アニメーションアセットIDを参照できるAnimationオブジェクトの子を待機しているためであり、そのAnimationオブジェクトは現在存在しません。
ローカルスクリプトがボリュームに衝突したときに参照できるアニメーションを追加するには:
Explorerウィンドウで、TriggerAnimationに新しいアニメーションを追加します。
- TriggerAnimationにカーソルを合わせて⊕ボタンをクリックします。
- コンテキストメニューからAnimationを挿入します。
新しいアニメーションオブジェクトを選択し、PropertiesウィンドウでAnimationIDを、プレイヤーがボリュームに触れたときにトリガーしたいアニメーションアセットIDに設定します。たとえば、危険な宇宙ステーションサンプルは、キャラクターが後ろに倒れるアニメーションを再生するためにrbxassetid://3716468774を参照します。
ゲームをプレイテストして、プレイヤーが最初の蒸気漏れの近くにいるときにアニメーションが再生されることを確認します。