キャラクターアニメーションをプレイすることは、アバターとプレイできないキャラクター (NPC) をエキスプレス、リアル、エンゲージングにするのに重要な部分です。イミッシブなビジュアルを提供するだけでなく、キャラクターアニメーションはプレイヤーからのフィードバックを提供し、環境をナビゲートす
このチュートリアルは、ハザードスペースステーション.rbxl ファイルを参照して、2つの異なるテクニックを使用してキャラクターアニメーションをプレイする方法を示しています。これには、次のガイドが含まれます:
- デフォルトのキャラクターアニメーションアセット ID を自分のカスタムアニメーションと交換します。
- 3D スペース内のキャラクターアクションに対応するアニメーションをトリガーする。
このチュートリアルを完了すると、さまざまなゲームプレイシーンのアニメーションをカスタマイズするスキルがあります。
デフォルトのアニメーションを変更する
デフォルトの Humanoid オブジェクトを持つすべてのキャラクター、プレイヤーがコントロールするアバターまたは NPC の両方を含む、すべてのキャラクターが特定のインエクスペリエンスアクションを実行するたびに、デフォルトのアニメーション</
ただし、これらのデフォルトのアニメーションが、世界の環境、デザイン、または全体的なストーリーの要件に応えない場合は、あなたのエクスペリエンスに適用されるエステティックなどのカスタムアニメーションと交換できます。このゲームデザインテクニックは、キャラクターとエクスペリエンスがより個人的、エンゲージメント、および没入感
次のセクションでは、キャラクターアニメーションを作成 からカスタムな歩行サイクルアニメーションに変更する方法を示しています。このプロセスを使用すると、デフォルトのアニメーションと自分のアニメーションアセット ID を交換できます。
スクリプトの作成
すべてのキャラクターの Humanoid オブジェクトには、キャラクターのデフォルトのアニメーションをすべて保存する子供 Class.Animator オブジェクトが含まれています。Animator にスクリプトを作成
デフォルトのアニメーションアセット ID を参照するスクリプトを作成するには:
In the Explorer window, add a new script to ServerScriptService .
- ServerScriptService の上にマウスポインタを置き、⊕ ボタンをクリックします。
- コンテキストメニューから スクリプトを挿入する 。
新しいスクリプトで、次のコードを挿入してください:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")local 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.idle.Animation2.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"local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)エクスペリエンスをプレイテストして、カスタムのウォークアニメーションがデフォルトのアニメーションを上書きしていることを確認してください。
メニューバーで プレイ ボタンをクリックします。Studio はプレイテストモードに入ります。
アバターで宇宙ステーションを周ります。
アニメーションをトリガーする
前のテクニックは、キャラクターが特定のインエクスペリエンスアクションを実行するたびに自動的にプレイするデフォルトのアニメーションに焦点を合わせることに重点を置きますが、3D 空間内の任意のキャラクターアクションに応答してアニメーションをプログラマチックにトリガーすることができます、例えばアイテムを拾うか、ハザード
このメソッドは、アニメーションをプレイすることで、プレイヤーが環境中のオブジェクトとどのように対話するかに即座にフィードバックを提供するため、このメソッドは便利です。次のセクションでは、角色が危険な蒸気漏れの近くにいるときにアニメーションをトリガーする方法を示しています。これは、壁に歩くことを避け
ボリュームを挿入
ユニークなゲームプレイ動作をトリガーするのに最も一般的な方法の 1 つは、 ボリューム 、または 3D 空間内の不可視な領域を使用して、キャラクターまたはオブジェクトが特定のエリアの環境とインタラクトするときに注意して、トリガーをプログラムでトリガーできます。スクリプトとボリュー
エクスペリエンスに音量を追加するときは、音量をスケールして音量が発生するエリアをカバーする必要があります。音量を小さくすると、プレイヤーがアニメーションをプレイするエリアに到達することができなくなります。音量を大きくすると、アニメーションをプレイするエリアに到達するたびにプレイヤー
アニメーションをトリガーする蒸気漏れのボリュームを挿入するには:
- In the エクスプローラー window, add a new block part.
- アニメーションをトリガーするエリアにブロックが完全に覆われるまで、位置とサイズを変更します。
- In the プロパティ ウィンドウ,
Set 名前 to アニメーションディテクター 。
透明効果を 1 に設定して、ブロックを透明にする。
スクリプトの作成
あなたのアニメーションをトリガーするための定義された領域を持ったことで、プレイヤーがボリュームと衝突するたびにスクリプトを作成し、プログラムで見つかるようにします。その後、ゲームプレイ要件に対応するアニメーションを作成できます。
たとえば、このアニメーション技術は、 LocalScript ではなく、 Script を使用して、プレイヤーがボリュームと衝突するときに即座にプレイヤーにフィードバックを提供します。サーバーがコリジョンを聞き、アニメーションをプレイすると、サーバーからクラ
ローカルプレイヤーのキャラクターがボリュームに触れたときに検出するローカルスクリプトを作成するには:
In the Explorer ウィンドウ, add a new script to StartercharacterScripts . This placement ensures the script and its children clone into the player character on join and when they respawn back into the experience.
- Expand StarterPlayer , then hover over its StarterCharacterScripts 子 and click the ⊕ button.
- コンテキストメニューから ローカルスクリプト を挿入し、トリガーアニメーション に名前を変更します。
新しいスクリプトで、次のコードを挿入してください:
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 イベントハンラーが最初の祖先を取得しますが、ボリュームと衝突した Model がクラスモデプレイヤーの子である必要があります。如果そ
- デバウンスを true に設定します。
- アニメーションが終了するのをプレイして待ちます。
- デバウンスを false に設定します。
アニメーションがプレイ完了した後、false からtrue に、false を再び設定すると、アニメーションがプレイ完了した後、2> コリジョンを検知する2> パターンを防ぐことができます。このデバウンスパターンに関する詳細は、5>
アニメーションを追加
現在、エクスペリエンスをプレイテストすると、TriggerAnimation スクリプトはローカルプレイヤーのボリュームコリジョンに応答してアニメーションを再生できません。これは、Animation オブジェクトのアニメーションアセット ID を参照している子オブジェクト Class
プレイヤーがボリュームと衝突するときにローカルスクリプトのアニメーションを追加するには:
In the エクスプローラー window, add a new アニメーション to トリガーアニメーション .
- トリガーアニメーション の上にマウスポインタを置き、⊕ ボタンをクリックします。
- コンテキストメニューから アニメーション を挿入します。
新しいアニメーションオブジェクトを選択し、プロパティ ウィンドウに、アニメーションID を設定し、プレイヤーがボリュームに触れたときにトリガーするアニメーションアセットID を設定します。たとえば、危険な宇宙ステーシ
プレイテストして、アニメーションがプレイヤーが最初の蒸気漏れに近いときに再生されるかどうかを確認します。