private void OnEnable() { sb = (ShooterBehaviour)target; GetTools(); if (sb.sensorSet != null) { vs = sb.sensorSet.sensorList.Find(x => x.GetType() == typeof(SensorVisual)) as SensorVisual; hr = sb.sensorSet.sensorList.Find(x => x.GetType() == typeof(SensorHearing)) as SensorHearing; } }
public void ShowVisualSensorShapes(Transform head, SensorVisual vision) { vision.farViewDistance = vision.farViewDistance < vision.highSenseEllipseH ? vision.highSenseEllipseH : vision.farViewDistance; vision.innerViewAngle = vision.innerViewAngle > vision.outerViewAngle ? vision.outerViewAngle : vision.innerViewAngle; vision.highSenseEllipseH = vision.highSenseEllipseH < 3 ? 3 : vision.highSenseEllipseH; Vector3 glHeadUpDir = head.transform.TransformDirection(-Vector3.right); Vector3 glHeadFwDir = head.transform.TransformDirection(Vector3.up); Vector3 glHeadLeftDir = head.transform.TransformDirection(Vector3.forward); float a = vision.highSenseEllipseH / 2; float b = a * Mathf.Tan(vision.highSenseEllipseW / 2 * Mathf.Deg2Rad); float c = Mathf.Sqrt(a * a - b * b); Vector3 vPos = head.position; Vector3 vDir = head.TransformDirection(Vector3.up); Vector3 F1 = vPos + vDir * (a - vision.fBehindDistance - c); Vector3 F2 = vPos + vDir * (a - vision.fBehindDistance + c); Vector3 center = (F1 + F2) / 2; //Debug.DrawRay(F1, Vector3.up * .3f, Color.green); ////Handles.Label(F1, "F1"); //Debug.DrawRay(F2, Vector3.up * .3f, Color.green); ////Handles.Label(F2, "F2"); //Debug.DrawRay(vPos, Vector3.up * .3f, Color.green); //Handles.Label(vPos, "vPos"); //Debug.DrawRay(center, Vector3.up * .3f, Color.white); // labels vision.textGuiStyle.fontSize = vision.labelsFontSize; vision.textGuiStyle.normal.textColor = vision.labelsFontColor; if (vision.labelsFont) { if (!vision.textGuiStyle.font) { vision.textGuiStyle.font = vision.labelsFont; } } GUIContent content = new GUIContent(""); if (Camera.current && (Vector3.Distance(Camera.current.transform.position, head.position) > vision.labelsDisableDistance)) { vision.textGuiStyle.normal.textColor = new Color(0, 0, 0, 0); } content.text = "a:" + vision.iLevel_a; Handles.Label(center, content, vision.textGuiStyle); content.text = "b:" + vision.iLevel_b; if (vision.fBehindDistance > 0) { Handles.Label(head.position - vDir * vision.fBehindDistance / 2, content, vision.textGuiStyle); } Vector3 dirTemp = Quaternion.AngleAxis(-vision.innerViewAngle * 4 / 10, glHeadUpDir) * vDir; content.text = "c:" + vision.iLevel_cd; Handles.Label(head.position + dirTemp * (vision.nearViewDistance - 3), content, vision.textGuiStyle); dirTemp = Quaternion.AngleAxis(vision.innerViewAngle * 4 / 10, glHeadUpDir) * vDir; content.text = "d:" + vision.iLevel_cd; Handles.Label(head.position + dirTemp * (vision.nearViewDistance - 3), content, vision.textGuiStyle); dirTemp = Quaternion.AngleAxis(-vision.outerViewAngle * 4 / 10, glHeadUpDir) * vDir; content.text = "e:" + vision.iLevel_ef; Handles.Label(head.position + dirTemp * (vision.nearViewDistance - 3), content, vision.textGuiStyle); dirTemp = Quaternion.AngleAxis(vision.outerViewAngle * 4 / 10, glHeadUpDir) * vDir; content.text = "f:" + vision.iLevel_ef; Handles.Label(head.position + dirTemp * (vision.nearViewDistance - 3), content, vision.textGuiStyle); dirTemp = Quaternion.AngleAxis(-vision.outerViewAngle * 4 / 10, glHeadUpDir) * vDir; content.text = "g:" + vision.iLevel_gh; Handles.Label(head.position + dirTemp * (vision.farViewDistance - (vision.farViewDistance - vision.nearViewDistance) / 2), content, vision.textGuiStyle); dirTemp = Quaternion.AngleAxis(vision.outerViewAngle * 4 / 10, glHeadUpDir) * vDir; content.text = "h:" + vision.iLevel_gh; Handles.Label(head.position + dirTemp * (vision.farViewDistance - (vision.farViewDistance - vision.nearViewDistance) / 2), content, vision.textGuiStyle); content.text = "i:" + vision.iLevel_i; Handles.Label(head.position + glHeadFwDir * ((vision.farViewDistance - (vision.farViewDistance - vision.nearViewDistance) / 2)), content, vision.textGuiStyle); DrawEllipse(center + vDir * a, center - vDir * a, b, head.forward); // high intensity ellipse Handles.color = vision.color1; Handles.DrawSolidArc(vPos, head.TransformDirection(-Vector3.right), vDir, vision.outerViewAngle / 2, vision.farViewDistance); Handles.DrawSolidArc(vPos, -head.TransformDirection(Vector3.left), vDir, vision.outerViewAngle / 2, vision.farViewDistance); Handles.color = vision.color2; Handles.DrawSolidArc(vPos, head.TransformDirection(-Vector3.right), vDir, vision.innerViewAngle / 2, vision.nearViewDistance); Handles.DrawSolidArc(vPos, -head.TransformDirection(-Vector3.right), vDir, vision.innerViewAngle / 2, vision.nearViewDistance); Handles.color = vision.color2; Handles.DrawSolidArc(vPos, head.TransformDirection(-Vector3.right), vDir, vision.outerViewAngle / 2, vision.nearViewDistance); Handles.DrawSolidArc(vPos, -head.TransformDirection(-Vector3.right), vDir, vision.outerViewAngle / 2, vision.nearViewDistance); Handles.color = vision.color2; Handles.DrawSolidArc(vPos, head.TransformDirection(-Vector3.right), vDir, vision.innerViewAngle / 2, vision.farViewDistance); Handles.DrawSolidArc(vPos, -head.TransformDirection(-Vector3.right), vDir, vision.innerViewAngle / 2, vision.farViewDistance); // vertical view angle Handles.color = vision.color3; Handles.DrawSolidArc(vPos, glHeadLeftDir, glHeadFwDir, vision.VerticalViewAngle / 2, vision.farViewDistance); Handles.DrawSolidArc(vPos, glHeadLeftDir, glHeadFwDir, -vision.VerticalViewAngle / 2, vision.farViewDistance); Handles.color = Color.gray; Handles.DrawDottedLine(vPos, vPos + vDir * (vision.farViewDistance - vision.fBehindDistance), 8); }