看護師の接近に呼応するハコブくん発光ロジックの構築
LOG59HRI2026/2/7

看護師の接近に呼応するハコブくん発光ロジックの構築

ハコブくんの「看護師が近づいたときだけ発光する」という仕様にします。「常時発光」から「条件付き発光」に切り替えることで、ロボットの状態(通常・警告・インタラクション中)が周囲に一目で伝わるようになります。

これを実現するために、Unityで必要な設定と制御方法をまとめました。

※薬剤搬送ロボットハコブくんは技術検証用の仮想設定です。 実用化目的ではなく、制御・UIデザイン・HRI(人間とロボットの相互作用)の本質を探求するコンセプトとして定義しています。

発光ロジックの構築

マテリアルの準備

まずは「通常時」の状態を作ります。

Side_Emission_Mat の設定

  • Base Map (Color): 白(#FFFFFF)に変更します。

  • Emission: チェックを入れたままにしますが、Emission Color の横の色の強さ(Intensity)を、まずは「0」にするか、色を「黒」にしておきます。

  • これで「普段は白い箱、でも光る準備はできている」状態になります。

看護師の接近を検知する方法(トリガー)

看護師(特定のオブジェクト)が近づいたことを検知するために、ハコブくんの周りに「見えないセンサーの壁」を作ります。

  • ハコブくんの子オブジェクトとして Create Empty で新しい空のオブジェクトを作り、Sphere Collider(球状の衝突判定)を追加します。

Sphere Collider の追加手順

Unity画面-NurseSensor設定

専用のオブジェクトを作成する

  • Hierarchy ウィンドウで Hakobu_kun を右クリックします。

  • Create Empty を選択し、名前を NurseSensor などに変更します。

  • ※ハコブくん本体に直接付けても動きますが、センサー専用の階層を作っておくと後で範囲を調整しやすくなります。

コンポーネントを追加する

  • 作成した NurseSensor を選択した状態で、Inspector ウィンドウの Add Component ボタンを押します。

  • 検索窓に Sphere と入力し、 Sphere Collider を選択して追加します。

センサー設定に切り替える

  • Inspector に追加された Sphere Collider の項目内にある Is Trigger にチェックを入れます。

  • ※これにチェックを入れないと、看護師がハコブくんに物理的にぶつかって弾き飛ばされてしまいます。「トリガー」にすることで、物理的な衝突はせず「範囲内に入ったこと」だけを検知できるようになります。

検知範囲を広げる

  • Radius(半径)の数値をドラッグして大きくします。

  • Scene ビュー上に緑色の球体の線が現れます。これが「看護師を検知できる距離」になるので、ハコブくんの周囲を覆うように調整します。

設定の目安

  • 半径 2.0 〜 3.0: 看護師が数歩手前まで近づいたときに「ふわっ」と光り始める、自然なコミュニケーション範囲になります。

  • 半径 5.0: かなり遠くからでも反応するため、広い廊下などで「遠くにロボットがいる」ことを知らせるのに適しています。

タグの設定

Unity画面-Nurse Tag設定

スクリプトが「誰に反応するか」を判別できるように、看護師側のオブジェクトに目印を付けます。

  • Hierarchy ウィンドウで 看護師(Nurse) のオブジェクトを選択します。

  • Inspector の一番上にある Tag ドロップダウンをクリックします。

  • Add Tag... を選択し、リストの「+」から Nurse という名前のタグを追加します。

  • もう一度看護師のオブジェクトを選択し、Tag を Nurse に設定します。

スクリプトでの制御(C#)

「中に入ったら光る、出たら消える」という動きをプログラミングします。

実装手順

  • Project ウィンドウで右クリック > Create > MonoBehaviour Script を選択します。

  • 名前を HakobuLightController にします。

C#

using UnityEngine;

public class HakobuReaction : MonoBehaviour
{
    public Material emissionMaterial; // Side_Emission_Matを割り当てる
    [ColorUsage(true, true)] public Color activeColor; // 発光時の色(ミントグリーンなど)
    private Color defaultColor = Color.black; // 通常時(消灯)

    void Start()
    {
        // 最初は消灯しておく
        emissionMaterial.SetColor("_EmissionColor", defaultColor);
    }

    void OnTriggerEnter(Collider other)
    {
        // 看護師タグを持つオブジェクトが範囲に入ったら
        if (other.CompareTag("Nurse"))
        {
            // 発光させる(Intensityを乗算した色をセット)
            emissionMaterial.SetColor("_EmissionColor", activeColor);
            DynamicGI.SetEmissive(GetComponent<Renderer>(), activeColor); // 周囲の床も照らす
        }
    }

    void OnTriggerExit(Collider other)
    {
        // 範囲から出たら
        if (other.CompareTag("Nurse"))
        {
            // 消灯する
            emissionMaterial.SetColor("_EmissionColor", defaultColor);
            DynamicGI.SetEmissive(GetComponent<Renderer>(), defaultColor);
        }
    }
}

NurseSensor にアタッチして設定する

  • 作成したスクリプトを、Hierarchy の NurseSensor オブジェクトへドラッグ&ドロップします。

  • Inspector に表示された Target Material の枠へ、Project ウィンドウから Side_Emission_Mat をドラッグ&ドロップします。

  • Active Color をクリックして、理想のミントグリーンに調整します(Intensity を 1〜3 くらいに上げると光ります)。

演出のポイント:Realtime GI(光の漏れ)

導入文にあった「床面への光の漏れ」を制御するために、スクリプト内の DynamicGI.SetEmissive が役立ちます。

  • 看護師が近づいた瞬間に、ハコブくん本体だけでなく、足元の床がふわっとミントグリーンに染まるようになります。

  • これにより「ハコブくんが看護師を認識した」という実在感が一気に高まります。