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