はじめに
Unityでは、Raycastを利用することで、指定した方向にあるオブジェクトを検知できます。
今回は、プレイヤーのカメラからRaycastを飛ばし、ドアに当たった状態でマウスの左クリックをすると、ドアが開くアニメーションを再生する方法を紹介します。
Animatorの設定方法については前回の記事と共通する部分があるため、今回はRaycastによる判定方法とスクリプトの設定を中心に解説します。
ドアの準備とAnimatorの設定
今回は、ドアにColliderとAnimatorを設定し、開くアニメーションを再生できる状態にします。
Colliderの設定やアニメーションクリップの準備、Animatorのステートや遷移条件の設定方法については、以下の記事で詳しく紹介しています。

今回は前回の記事と同じように、CloseとOpenのステートを作成し、TriggerパラメーターにOpenDoorを設定します。
ドアの準備ができたら、Raycastを使ったオブジェクトの判定を行います。
Raycastでオブジェクトを判定する
次に、プレイヤーのカメラからRaycastを飛ばし、ドアに当たったかどうかを判定します。
Raycastの基本的な仕組みや使い方については、以下の記事で紹介しています。

今回は、カメラの正面方向にRaycastを飛ばし、一定の距離内にあるドアを判定できるようにします。
スクリプトを作成する
次に、Raycastでドアを判定し、左クリックしたときにAnimatorのTriggerパラメーターを呼び出すスクリプトを作成します。
今回は、RaycastDoorController.csという名前で作成します。
using UnityEngine;
using UnityEngine.InputSystem;
public class RaycastDoorController : MonoBehaviour
{
public Camera playerCamera;
public float rayDistance = 3f;
private void Update()
{
if (Mouse.current == null ||
!Mouse.current.leftButton.wasPressedThisFrame)
{
return;
}
Ray ray = new Ray(
playerCamera.transform.position,
playerCamera.transform.forward
);
if (Physics.Raycast(ray, out RaycastHit hit, rayDistance))
{
Animator doorAnimator =
hit.collider.GetComponentInParent<Animator>();
if (doorAnimator != null)
{
doorAnimator.SetTrigger("OpenDoor");
}
}
}
}
スクリプトの処理について
Mouse.current.leftButton.wasPressedThisFrameは、マウスの左ボタンを押した瞬間に処理を実行するための記述です。
次に、Rayを作成します。
Ray ray = new Ray(
playerCamera.transform.position,
playerCamera.transform.forward
);
カメラの位置を始点にして、カメラの正面方向へRayを飛ばします。
次に、Physics.Raycastでオブジェクトに当たったかどうかを判定します。
if (Physics.Raycast(ray, out RaycastHit hit, rayDistance))
RaycastがColliderに当たった場合、条件が成立します。
rayDistanceはRaycastの判定距離です。今回は3に設定しています。
続いて、当たったオブジェクトからAnimatorを取得します。
Animator doorAnimator =
hit.collider.GetComponentInParent<Animator>();
GetComponentInParentを使用することで、Colliderが付いているオブジェクトだけでなく、その親オブジェクトに設定されているAnimatorも取得できます。
最後に、Animatorが取得できた場合はTriggerを呼び出します。
doorAnimator.SetTrigger("OpenDoor");
これにより、AnimatorのCloseからOpenへ遷移し、ドアが開くアニメーションが再生されます。
スクリプトを設定する
作成したRaycastDoorController.csをPlayerにアタッチします。
Inspectorで、次の項目を設定します。
- Player Camera:プレイヤーのカメラを設定
- Ray Distance:3

Ray Distanceは、Raycastで判定する距離です。必要に応じて調整してください。
ドアには、AnimatorとColliderが設定されていることを確認します。
動作を確認する
設定ができたら、Unityの再生ボタンを押して動作を確認します。
プレイヤーのカメラをドアに向け、マウスの左クリックを押します。
ドアにRaycastが当たっている状態でクリックすると、ドアが開くアニメーションが再生されます。
ドア以外の場所をクリックした場合は、Animatorが取得されないため、アニメーションは再生されません。
なお、動画では左クリックしたタイミングが分かるように、スクリプトにDebug.Log()を追加してConsoleにメッセージを表示しています。
まとめ
今回は、UnityでRaycastを使ってアニメーションを再生する方法を紹介しました。
Raycastでカメラの正面にあるオブジェクトを判定し、クリックしたときにAnimatorのTriggerパラメーターを呼び出すことで、アニメーションを再生できます。
この仕組みは、ドアを開ける動作だけでなく、プレイヤーがオブジェクトを選択したときにアニメーションを再生する場合にも応用できます。
