+
*
+
ココ先生
ゲーム開発の案内役
この記事では ファストトラベル解放 を、読んで終わりにせず、目的地が画面外なら矢印、画面内ならワールドマーカー、地図には点を表示します。
+
*
+
はじめちゃん
ゲームエンジン学習中
迷わない目標表示とミニマップ設計入門 を読む前に、まずUnity のどこを見ればよいかを確認したいです。
目的地が画面外なら矢印、画面内ならワールドマーカー、地図には点を表示します。
目的地が見えない時だけ画面端へ案内するのですね。
WorldToScreenPointで画面内かを調べ、3種類の表示を切り替えます。

完成イメージ
画面内外を判定
WorldToScreenPointで目的地が見えているかを調べます。
画面端へ矢印を置く
画面外ならEdge Arrowを端へ固定して向きを示します。
地図にも位置を出す
目的地のXZ座標からMinimap Dotを動かします。
導入
目的地が画面外なら画面端の矢印、画面内ならワールド上のマーカー、ミニマップには点を表示します。
これから作るもの
CanvasにEdgeArrowとMinimapDot、目的地にWorldMarkerを置きます。
ステップ1: カメラ座標へ変換する
var screen=Camera.main.WorldToScreenPoint(target.position); bool behind=screen.z<0; bool off=behind||screen.x<0||screen.x>Screen.width||screen.y<0||screen.y>Screen.height;
ステップ2: 画面端矢印を向ける
edgeArrow.gameObject.SetActive(off); worldMarker.SetActive(!off); edgeArrow.position=new Vector2(Mathf.Clamp(screen.x,40,Screen.width-40),Mathf.Clamp(screen.y,40,Screen.height-40));
完成版
using UnityEngine; public class ObjectiveMarker:MonoBehaviour{[SerializeField]Transform target;[SerializeField]RectTransform edgeArrow,minimapDot;[SerializeField]GameObject worldMarker;void Update(){var p=Camera.main.WorldToScreenPoint(target.position);bool off=p.z<0||p.x<0||p.x>Screen.width||p.y<0||p.y>Screen.height;edgeArrow.gameObject.SetActive(off);worldMarker.SetActive(!off);edgeArrow.position=new Vector2(Mathf.Clamp(p.x,40,Screen.width-40),Mathf.Clamp(p.y,40,Screen.height-40));minimapDot.anchoredPosition=new Vector2(target.position.x,target.position.z);}}
画面端矢印を出す条件は何ですか?
目的地のスクリーン座標が画面外か、カメラの後ろにある時です。
流れは「未発見地点を表示」から始めて、「Unlock Buttonで進める」で操作を入れる、と覚えればよいですか?
その通りです。その後に「解放演出を確認」で途中状態を見て、「移動先を選ぶで結果を見る」で結果を確認します。順番を固定すると、失敗した場所も見つけやすくなります。
つまり、いきなり完成システムにせず、状態名、表示、値の変化を小さくそろえるのですね。
はい。最後は「ファストトラベル解放をわかりやすく考える」の考え方で、難しい処理をプレイヤーに伝わる短い合図へ置き換えられるか確認しましょう。
この記事のまとめ
目的マーカー、ミニマップ、誘導UIを出しすぎずに使い、初心者でも迷いにくいゲーム導線を作る考え方を整理します。
大きな違いを生むのは、派手な性能よりも 毎日触れる環境を無理なく整えること です。見やすい画面と使いやすい道具がそろうと、学習や次の一歩を決めやすくなります。