public static DanmakuField FindClosest(Vector2 position) { if (_fields == null) { _fields = new List <DanmakuField>(); _fields.AddRange(FindObjectsOfType <DanmakuField>()); } if (_fields.Count == 0) { DanmakuField encompassing = new GameObject("Danmaku Field").AddComponent <DanmakuField>(); encompassing.useClipBoundary = false; _fields.Add(encompassing); } if (_fields.Count == 1) { return(_fields[0]); } DanmakuField closest = null; float minDist = float.MaxValue; foreach (var field in _fields) { Vector2 diff = field.bounds.Center - position; float distance = diff.sqrMagnitude; if (distance >= minDist) { continue; } closest = field; minDist = distance; } return(closest); }
private void Awake() { boundary = GetComponent <BoxCollider2D>(); if (field == null) { print("No field provided, searching in ancestor GameObjects..."); field = GetComponentInParent <DanmakuField>(); } if (field == null) { Debug.LogError("Field Boundary without a DanmakuField"); } else { UpdatePosition(); } }