Menu
CoddyTech

手の届く範囲で最も近いもの

CoddyのUnityジャーニー「Unityのゲームアーキテクチャ」セクションの一部。レッスン 11/64。

この章ではインターフェースを使い、メソッド以外に共通点のないものにも1つのスクリプトで対応できるようにしました。インタラクトキーを押すと、それらの中で最も近いものが選ばれるようになりました。

challenge icon

チャレンジ

簡単

Spaceキーでは、最初のものではなく、最も近いものを使うようにしましょう。

  1. Interactorで、ループの前にIInteractable nearest = null;とfloat best = Mathf.Infinity;を追加します。
  2. ループ内で、プレイヤーからの距離がbestより小さいものと、その距離を保持します。
  3. ループの後で、nearestがnullでない場合はnearest.Interact()を呼び出します。

「プレイ」を押し、宝箱とレバーの間に立ってSpaceキーを押します。レバーが引かれます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;
using UnityEngine.InputSystem;

// Space キーを押すと、手の届く範囲で最初に見つかったものを使用する。
public class Interactor : MonoBehaviour
{
    public float reach = 1.5f;

    void Update()
    {
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            foreach (Collider c in Physics.OverlapSphere(transform.position, reach))
            {
                if (c.TryGetComponent(out IInteractable thing))
                {
                    thing.Interact();
                    return;
                }
            }
        }
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityのゲームアーキテクチャのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド