Beispiel #1
0
        public HeightMapSphericalThreePointProvider(Collider c)
        {
            Ensure.ArgumentNotNull(c, "c");

            var t     = c.transform;
            var scale = t.lossyScale;

            var sc = c as SphereCollider;
            var cc = c as CapsuleCollider;

            if (sc != null)
            {
                var scaling = Mathf.Max(scale.x, scale.y, scale.z);
                _radius = sc.radius * scaling;

                _points[0] = sc.center;
                _points[1] = sc.center + new Vector3(0f, 0f, sc.radius * scaling / scale.z);
                _points[2] = sc.center + new Vector3(0f, 0f, -sc.radius * scaling / scale.z);
            }
            else if (cc != null && cc.direction == 1)
            {
                var scaling = Mathf.Max(scale.x, scale.z);
                _radius = cc.radius * scaling;

                _points[0] = cc.center + new Vector3(0f, Mathf.Min((-cc.height * 0.5f) + (_radius / scale.y), 0f), 0f);
                _points[1] = cc.center + new Vector3(0f, 0f, cc.radius * scaling / scale.z);
                _points[2] = cc.center + new Vector3(0f, 0f, -cc.radius * scaling / scale.z);
            }
            else
            {
                throw new ArgumentException("A Spherical provider only works with sphere or vertical capsule colliders!");
            }

            _pendingHighMaxes = new HighPointList(2, t.TransformPoint(_points[0]));
        }
        public RaycastSphericalThreePointProvider(Collider c)
        {
            Ensure.ArgumentNotNull(c, "c");

            var t = c.transform;
            var scale = t.lossyScale;

            var sc = c as SphereCollider;
            var cc = c as CapsuleCollider;

            if (sc != null)
            {
                var scaling = Mathf.Max(scale.x, scale.y, scale.z);
                _radius = sc.radius * scaling;

                _points[0] = sc.center;
                _points[1] = sc.center + new Vector3(0f, 0f, sc.radius * scaling / scale.z);
                _points[2] = sc.center + new Vector3(0f, 0f, -sc.radius * scaling / scale.z);
            }
            else if (cc != null && cc.direction == 1)
            {
                var scaling = Mathf.Max(scale.x, scale.z);
                _radius = cc.radius * scaling;

                _points[0] = cc.center + new Vector3(0f, Mathf.Min((-cc.height * 0.5f) + (_radius / scale.y), 0f), 0f);
                _points[1] = cc.center + new Vector3(0f, 0f, cc.radius * scaling / scale.z);
                _points[2] = cc.center + new Vector3(0f, 0f, -cc.radius * scaling / scale.z);
            }
            else
            {
                throw new ArgumentException("A Spherical provider only works with sphere or vertical capsule colliders!");
            }

            _pendingHighMaxes = new HighPointList(2, t.TransformPoint(_points[0]));
        }
        public RaycastBoxThreePointProvider(Collider c)
        {
            Ensure.ArgumentNotNull(c, "c");
            var t = c.transform;

            var m = new ColliderMeasurement(c, false);
            _points[0] = m.center + new Vector3(0f, -m.extents.y, 0f);
            _points[1] = m.center + new Vector3(0f, -m.extents.y, m.extents.z);
            _points[2] = m.center + new Vector3(0f, -m.extents.y, -m.extents.z);

            _pendingHighMaxes = new HighPointList(2, t.TransformPoint(_points[1]));
        }
        public HeightMapBoxThreePointProvider(Collider c)
        {
            Ensure.ArgumentNotNull(c, "c");
            var t = c.transform;

            var m = new ColliderMeasurement(c, false);

            _points[0] = m.center + new Vector3(0f, -m.extents.y, 0f);
            _points[1] = m.center + new Vector3(0f, -m.extents.y, m.extents.z);
            _points[2] = m.center + new Vector3(0f, -m.extents.y, -m.extents.z);

            _pendingHighMaxes = new HighPointList(2, t.TransformPoint(_points[1]));
        }
        public HeightMapBoxFivePointProvider(Collider c)
        {
            Ensure.ArgumentNotNull(c, "c");
            var t = c.transform;

            var m = new ColliderMeasurement(c, false);
            var yoffset = -m.extents.y;
            _points[0] = m.center + new Vector3(0f, yoffset, 0f);
            _points[1] = m.center + new Vector3(m.extents.x, yoffset, -m.extents.z);
            _points[2] = m.center + new Vector3(-m.extents.x, yoffset, -m.extents.z);
            _points[3] = m.center + new Vector3(-m.extents.x, yoffset, m.extents.z);
            _points[4] = m.center + new Vector3(m.extents.x, yoffset, m.extents.z);

            _pendingHighMaxes = new HighPointList(2, t.TransformPoint(_points[3]));
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="RaycastBoxFivePointProvider"/> class.
        /// </summary>
        /// <param name="c">The collider.</param>
        public RaycastBoxFivePointProvider(Collider c)
        {
            Ensure.ArgumentNotNull(c, "c");
            var t = c.transform;

            var m       = new ColliderMeasurement(c, false);
            var yoffset = -m.extents.y;

            _points[0] = m.center + new Vector3(0f, yoffset, 0f);
            _points[1] = m.center + new Vector3(m.extents.x, yoffset, -m.extents.z);
            _points[2] = m.center + new Vector3(-m.extents.x, yoffset, -m.extents.z);
            _points[3] = m.center + new Vector3(-m.extents.x, yoffset, m.extents.z);
            _points[4] = m.center + new Vector3(m.extents.x, yoffset, m.extents.z);

            _pendingHighMaxes = new HighPointList(2, t.TransformPoint(_points[3]));
        }