//TODO:common core を持っているやつはプレイヤーと味方とufoのどれかという前提で //書いてる void TriggerEnter(Collider other) { var baseCore = other.GetComponentInParent <BaseCore>(); if (baseCore == null) { return; } foreach (var item in lockonTargets) { if (item.BaseCore == baseCore) { return; } } var info = new MissileTargetInfo() { BaseCore = baseCore, CanSeeInView = CanSeeInView(baseCore.transform.position), }; lockonTargets.Add(info); }
void Update() { if (!isActive) { return; } UpdateTarget(); //set target float min = float.MaxValue; MissileTargetInfo nearest = null; //var crosshairScreenPos = mainCamera.WorldToViewportPoint(crosshair.position); var mouseViewPoint = mainCamera.ScreenToViewportPoint(Input.mousePosition); //print(mouseViewPoint); foreach (var item in lockonTargets) { if (item.CanSeeInView) { var pos = mainCamera.WorldToViewportPoint(item.BaseCore.transform.position); pos.z = 0;//画面上なのでzは使わない var distance = Vector3.Distance(mouseViewPoint /*crosshairScreenPos*/, pos); if (distance < min) { min = distance; nearest = item; } } } target = nearest?.BaseCore?.gameObject; //update ui if (missileTargetUI != null) { if (target != null) { if (!missileTargetUI.activeInHierarchy) { missileTargetUI.SetActive(true); } var pos = RectTransformUtility.WorldToScreenPoint(mainCamera, target.transform.position); missileTargetUI.transform.position = pos; } else { if (missileTargetUI.activeInHierarchy) { missileTargetUI.SetActive(false); } } } }