コード例 #1
0
        private void FindWanderTarget()
        {
            float   range = Random.Range(0f, wander_range);
            float   angle = Random.Range(0f, 360f) * Mathf.Deg2Rad;
            Vector3 spos  = wander == WanderBehavior.WanderFar ? transform.position : start_pos;
            Vector3 pos   = spos + new Vector3(Mathf.Cos(angle), 0f, Mathf.Sin(angle)) * range;

            wander_target = pos;

            Lure lure = Lure.GetNearestInRange(transform.position);

            if (lure != null)
            {
                Vector3 dir = lure.transform.position - transform.position;
                dir.y = 0f;

                Vector3 center = transform.position + dir.normalized * dir.magnitude * 0.5f;
                if (lure_interest < 4f)
                {
                    center = lure.transform.position;
                }

                float   range2 = Mathf.Clamp(lure_interest, 1f, wander_range);
                Vector3 pos2   = center + new Vector3(Mathf.Cos(angle), 0f, Mathf.Sin(angle)) * range2;
                wander_target = pos2;

                lure_interest = lure_interest * 0.5f;
                if (lure_interest <= 0.2f)
                {
                    lure_interest = 8f;
                }
            }
        }
コード例 #2
0
        public static Lure GetNearest(Vector3 pos, float range = 999f)
        {
            Lure  nearest  = null;
            float min_dist = range;

            foreach (Lure lure in lure_list)
            {
                float dist = (lure.transform.position - pos).magnitude;
                if (dist < min_dist)
                {
                    min_dist = dist;
                    nearest  = lure;
                }
            }
            return(nearest);
        }