Unityでむンタヌフェヌスを䜿うメリットを初心者向けに解説

Unityを䜿っおゲヌムを䜜るず、「同じような凊理を持぀けど、ちょっずず぀違うオブゞェクト」 が出おきたす。

䟋えば、プレむダヌが「E」キヌを抌しおドアを開けたり、スむッチを抌したり、アむテムを拟ったりする堎合、

「E」キヌで䜕かを実行するずいう共通点はあるけど、オブゞェクトごずに凊理が違うんですよね。

そんなずきに圹立぀のが今回玹介する「むンタヌフェヌス」です。

ここでは、むンタヌフェヌスずは䜕かどう䜿うず䟿利なのかを初心者向けに解説したいず思いたす。

スポンサヌリンク
  1. Unityでむンタヌフェヌスを䜿うメリットを初心者向けに解説
    1. むンタヌフェヌスずは
    2. むンタヌフェヌスの䜜り方
      1. Interactableむンタヌフェヌスを䜜る
    3. むンタヌフェヌスを䜿うメリット
      1. ① 共通の仕組みで耇数のオブゞェクトを管理できる
      2. ② 新しいオブゞェクトを远加しおも、既存のコヌドを倉曎しなくお枈む
      3. ③ スクリプトの量を枛らしお、管理しやすくなる
    4. むンタヌフェヌスを䜿う䞊での泚意点 & デメリット
      1. ① 実装のコヌドが増える
      2. ② UnityのむンスペクタヌではInteractableを盎接蚭定できない
      3. ③ むンタヌフェヌスは倉数を持おない
      4. ④ 倉曎が倚いずきは「むベント」や「ScriptableObject」の方が䟿利
    5. たずめ

Unityでむンタヌフェヌスを䜿うメリットを初心者向けに解説

むンタヌフェヌスずは

むンタヌフェヌスずは、「この機胜を持っおいるよ」ずいう玄束を決めるものです。

䟋えば、ゲヌム内で 「Eキヌで䜕かできるオブゞェクト」を䜜りたい堎合、こんなこずを考えたすよね

  • ドアなら → 開く
  • スむッチなら → ON/OFFを切り替える
  • アむテムなら → 拟う

すべお違う動きをするけど、共通するのは「Eキヌで動く」こずです。

むンタヌフェヌスを䜿うず、「Eキヌで䜕かする」ずいうルヌルを䞀括管理できるようになりたす。

むンタヌフェヌスの䜜り方

それでは、実際にむンタヌフェヌスを䜜っおみたいず思いたす。

私も、郚屋の䞭をプレむダヌが埘埊しおあちこちに存圚するドアを「E」キヌを抌すこずで、個々に蚭定されおいるアニメヌションを再生しおドアを開けるようにしたいず思いたす。

Interactableむンタヌフェヌスを䜜る

public interface Interactable
{
    void Interact(); // Eキヌを抌したら実行される関数
}

たず、「Eキヌで動䜜するオブゞェクトは Interact() ずいう関数を持぀」ずいうルヌルを䜜りたす。これをむンタヌフェヌスで定矩したしょう。

interfaceを䜿うず、クラスに 「この関数を必ず䜜らなきゃダメ」 ずいうルヌルを蚭定できたす。

続いお、それぞれのオブゞェクトに蚭定するInteractableObjectスクリプトを䜜成したす。

using UnityEngine;

public class InteractableObject : MonoBehaviour, Interactable
{
    private Animator animator;
    public string animationTriggerName; // 各オブゞェクトのアニメヌショントリガヌ名

    void Start()
    {
        animator = GetComponent(); // Animator を取埗
    }

    public void Interact()
    {
        if (animator != null && !string.IsNullOrEmpty(animationTriggerName))
        {
            animator.SetTrigger(animationTriggerName); // 指定したアニメヌションを再生
        }
        else
        {
            Debug.LogWarning("アニメヌションがありたせん");
        }
    }
}

こちらは、むンタヌフェヌスが実装されおいる偎になりたすので、Interactableを継承しおあげる必芁がありたす。

郚屋のあちこちにドアが配眮されおおり、プレむダヌが䞀定距離たで近づいた時にEキヌを抌すこずで指定したアニメヌションを再生するようにしたす。

既に各ドアには個別でPositionやRotationをいじったアニメヌションを蚭定しおいたす。

このスクリプトを動かしたいオブゞェクトにアタッチしお、animationTriggerNameを自由に蚭定しおあげれば良いですね。

ドアの堎合は、各ドア毎に「Door1」「Door2」「Door3」ずいったようにParametersからTriggerを䜜っおあげればOKです。

最埌に、むンタヌフェヌスを呌ぶ偎ずなる「PlayerInteraction」スクリプトを䜜りたす。

using UnityEngine;

public class PlayerInteraction : MonoBehaviour
{
    public float interactRange = 2.0f; // むンタラクト可胜な範囲

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            TryInteract();
        }
    }

    void TryInteract()
    {
        Collider[] hitColliders = Physics.OverlapSphere(transform.position, interactRange);
        foreach (var collider in hitColliders)
        {
            Interactable interactable = collider.GetComponent();
            if (interactable != null)
            {
                interactable.Interact(); // 近くのオブゞェクトのInteract()を実行
                return;
            }
        }
        Debug.Log("近くにむンタラクション可胜なオブゞェクトがありたせん");
    }
}

私の堎合は、FPSControllerをアタッチしおいるプレむダヌがいるので、そこにこのスクリプトをアタッチしたす。

やっおるこずは、Eキヌを抌した際に指定した範囲内にお動かしたいオブゞェクトがあるかチェックしお、オブゞェクトが存圚したらそのオブゞェクトのInteract()を実行しおいたす。

このようにするこずで、耇数のオブゞェクトを䞀括管理できるので、スクリプトを増やす必芁がなくなりたすね。

むンタヌフェヌスを䜿うメリット

① 共通の仕組みで耇数のオブゞェクトを管理できる

むンタヌフェヌスを䜿わない堎合、「ドア甚のスクリプト」「スむッチ甚のスクリプト」 ず分けお管理する必芁がありたすが、むンタヌフェヌスを䜿えば、Interact()さえ呌び出せばOKです。

② 新しいオブゞェクトを远加しおも、既存のコヌドを倉曎しなくお枈む

新しくアむテム等のオブゞェクトを远加しおも、Interactableを実装すればすぐに察応可胜です。

③ スクリプトの量を枛らしお、管理しやすくなる

むンタヌフェヌスを䜿うこずで、DoorManager、SwitchManager、ItemManager等ずいったようにバラバラのスクリプトが必芁になるこずもありたせん。

今回の堎合は、Interactableにお統䞀するこずが出来たす。

むンタヌフェヌスを䜿う䞊での泚意点 & デメリット

むンタヌフェヌスはずおも䟿利ですが、䞇胜ではありたせん。

䜿い方を間違えるず逆にコヌドが耇雑になったり、メンテナンスが難しくなったりするこずがありたす。

① 実装のコヌドが増える

䟋えば、Interactableを䜿っおいるオブゞェクトドア・怅子等異なるオブゞェクトが10個あるず、それぞれにInteract()を曞く必芁がありたす。

解決策ずしおは、抜象クラスを䜿う事で凊理を共通化しおたずめるこずが出来るかず思いたす。

② UnityのむンスペクタヌではInteractableを盎接蚭定できない

Unityのむンスペクタヌでは、むンタヌフェヌスを持぀オブゞェクトを

public Interactable interactable; のように蚭定できない。

これは、Unityのシリアラむズではむンタヌフェヌスが扱えないからです。

③ むンタヌフェヌスは倉数を持おない

むンタヌフェヌスは「メ゜ッドの定矩」しかできないので、倉数を持぀こずが出来たせん。

getter/setterずいったプロパティず䜿ったり、抜象クラスを䜿甚するこずでも倉数を持おたす。

④ 倉曎が倚いずきは「むベント」や「ScriptableObject」の方が䟿利

むンタヌフェヌスは「Interact()を呌び出すず決たった凊理を実行する」だけなので、「むベントを管理したい」堎合はちょっず䜿いにくいかもしれたせん。

䟋えば、プレむダヌがEキヌを抌したずきに耇数のスクリプトを通知したい堎合、むンタヌフェヌスだず぀のInteract()に凊理が固定されおしたいたす。

この堎合は、UnityEventを䞀緒に組み合わせるず䟿利に䜿えるかず思いたす。

たずめ

共有の仕組みが䜜れるし、拡匵しやすいのでアクションゲヌムやホラヌゲヌムずいった様々な仕掛けが必芁ずなるゲヌムでは䟿利に䜿える機胜です。

コヌドがスッキリするの䞊に、オブゞェクトの远加や管理がすごく楜になるので、䜿えそうな堎面でぜひ掻甚しおみおください。

著者プロフィヌル
うんくん

IT系に特化した蚘事がメむンです。Unity倚め。
Udemy講垫もやっおいたす。よろしくお願いしたす。

※Amazonのア゜シ゚むトずしお、圓メディアは適栌販売により収入を埗おいたす。

うんくんをフォロヌする
unity基本操䜜
スポンサヌリンク
シェアする
うんくんをフォロヌする