はじめに
Unityでは、ColliderのIs Triggerを利用することで、オブジェクトが特定の範囲に入ったことを検知できます。
今回は、プレイヤーがTriggerの範囲に入ると、ドアが開くアニメーションを再生する方法を紹介します。
Triggerの設定に加えて、Animatorのステートや遷移条件、スクリプトの設定も行います。
Triggerを設定する
ドアの前にTriggerを配置し、プレイヤーが範囲に入ったことを検知できるようにします。

Is Triggerの設定方法や、Triggerに入ったときの検知方法については、以下の記事で紹介しています。

Playerタグを設定する
スクリプトでプレイヤーを判定するため、Colliderが付いているGameObjectのTagをPlayerに設定します。
- HierarchyでプレイヤーのColliderが付いているGameObjectを選択します。
- Inspector上部のTagを開き、
Playerを選択します。

Rigidbodyが付いた親オブジェクトと、Capsule Colliderが付いた子オブジェクトを分けている場合は、Colliderが付いた子オブジェクトにもPlayerタグを設定してください。
スクリプトでは、このタグを使ってTriggerに入ったオブジェクトがプレイヤーかどうかを判定します。
ドアのアニメーションを準備する
今回は、ドアが開くアニメーションクリップを使用します。
アニメーションの再生方法については、以下の記事で紹介しています。

Animatorを設定する
次に、Triggerに入ったときにアニメーションが再生されるようにAnimatorを設定します。
ステートを作成する
まず、ドアが閉じた状態で待機するCloseステートを作成します。
- Animatorウィンドウの何もない場所を右クリックします。
Create State→Emptyを選択します。
- 作成されたステートの名前を
Closeに変更します。
Closeは空のステートとして作成するため、アニメーションクリップを設定する必要はありません。
次に、ドアが開くアニメーションクリップをAnimatorウィンドウにドラッグ&ドロップし、Openステートを作成します。

これで、ドアが閉じた状態で待機するCloseと、ドアが開くアニメーションを再生するOpenの2つのステートを用意できます。
デフォルトステートを設定する
Closeを右クリックし、Set as Layer Default Stateを選択します。
Closeがオレンジ色で表示され、Entryから接続されていれば設定完了です。
最初からCloseがオレンジ色のデフォルトステートになっている場合は、設定を変更する必要はありません。
これにより、Animatorが開始したときに、最初はCloseのステートから始まります。

Triggerパラメーターを追加する
AnimatorウィンドウのParametersタブを開き、+ボタンからTriggerを追加します。

パラメーター名は、次のように設定します。
OpenDoor
この名前は、後ほどスクリプトで指定する名前と一致させてください。

CloseからOpenへ遷移させる
- Animatorの
Closeを右クリックします。 Make Transitionを選択します。
Openをクリックして接続します。
- 作成した白い矢印(ステート間の遷移)を選択します。

Inspectorで、次のように設定します。
- Has Exit Time:チェックを外す
- Conditions:
OpenDoorを追加する
これで、OpenDoorのTriggerが呼び出されたときに、CloseからOpenへ遷移するようになります。
EntryからOpenへ直接接続するのではなく、CloseからOpenへの遷移に条件を設定することがポイントです。

スクリプトを作成する
次に、Triggerに入ったことを検知し、AnimatorのTriggerパラメーターを呼び出すスクリプトを作成します。
今回は、DoorAnimationController.csという名前で作成します。
using UnityEngine;
public class DoorAnimationController : MonoBehaviour
{
public Animator doorAnimator;
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
doorAnimator.SetTrigger("OpenDoor");
}
}
}
OnTriggerEnterは、別のColliderがTriggerの範囲に入ったときに呼び出されるメソッドです。
CompareTag("Player")でプレイヤーかどうかを判定し、プレイヤーが入った場合にSetTrigger("OpenDoor")を実行します。
この処理によって、Animatorに設定したCloseからOpenへの遷移が発生します。
スクリプトを設定する
DoorTriggerにDoorAnimationController.csをアタッチします。- Inspectorの
Door Animatorに、ドアのアニメーションを制御しているAnimatorを設定します。

これで、スクリプトからAnimatorを操作できるようになります。
動作を確認する
設定ができたら、Unityの再生ボタンを押して動作を確認します。
プレイヤーがIs Triggerを設定した範囲に入ると、ドアが開くアニメーションが再生されます。
まとめ
今回は、UnityでIs Triggerに入ったときにドアのアニメーションを再生する方法を紹介しました。
Is Triggerでプレイヤーの接近を検知し、スクリプトからAnimatorのTriggerパラメーターを呼び出すことで、特定のタイミングでアニメーションを再生できます。
この仕組みは、ドアを開く動作だけでなく、プレイヤーが特定の範囲に入ったときに演出を再生する場合にも応用できます。
