手の届く範囲で最も近いもの
CoddyのUnityジャーニー「Unityのゲームアーキテクチャ」セクションの一部。レッスン 11/64。
この章ではインターフェースを使い、メソッド以外に共通点のないものにも1つのスクリプトで対応できるようにしました。インタラクトキーを押すと、それらの中で最も近いものが選ばれるようになりました。
チャレンジ
簡単Spaceキーでは、最初のものではなく、最も近いものを使うようにしましょう。
Interactorで、ループの前にIInteractable nearest = null;とfloat best = Mathf.Infinity;を追加します。- ループ内で、プレイヤーからの距離が
bestより小さいものと、その距離を保持します。 - ループの後で、
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;
}
}
}
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Unityのゲームアーキテクチャのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド