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 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]));
        }
Exemple #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;
        }