Пример #1
0
        //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);
        }
Пример #2
0
        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);
                    }
                }
            }
        }