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]));
        }
        /// <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]));
        }
예제 #3
0
        /// <summary>
        /// Recalculates the base position and unit height. Call this if the unit's size changes at runtime
        /// </summary>
        public void RecalculateBasePosition()
        {
            var rb       = this.GetComponent <Rigidbody>();
            var coll     = this.GetComponent <Collider>();
            var renderer = this.GetComponent <Renderer>();

            if (rb != null && rb.useGravity)
            {
                yAxisoffset = 0.0f;
            }

            float totalOffset;

            if (coll != null)
            {
                //We need to adjust the collider to take the collider overlap into consideration
                var m = new ColliderMeasurement(coll, true);
                totalOffset = m.extents.y - m.transformCenterOffset.y + this.yAxisoffset;
                this.height = m.size.y + this.yAxisoffset;

                if (rb != null && rb.useGravity)
                {
#if UNITY_5
                    totalOffset -= (2 * coll.contactOffset);
#else
                    totalOffset -= (2 * Physics.minPenetrationForPenalty);
#endif
                }
            }
            else if (renderer != null)
            {
                var posOffset = (this.position.y - renderer.bounds.center.y);
                totalOffset = renderer.bounds.extents.y + posOffset + this.yAxisoffset;
                this.height = renderer.bounds.size.y + this.yAxisoffset;
            }
            else
            {
                totalOffset = this.yAxisoffset;
            }

            this.baseToPositionOffset = totalOffset;
        }