public void OnDrawGL(DrawGL draw) { Gizmos.color = Color.white; Vector3 pos = m_info.refPos + Quaternion.Euler(0, m_info.horizontalAngle, 0) * m_info.offset; if (m_info.NeedShowRefPos) { draw.DrawSphere(Color.white, m_info.refPos, 0.5f); draw.DrawSphere(Color.yellow, pos, 0.5f); } if (m_info.uselock)//方向上的锁定 { draw.DrawLine(Color.yellow, pos, Quaternion.Euler(m_info.lockEuler) * Vector3.forward, 5); } //Quaternion rotate = Quaternion.Euler(m_info.verticalAngle, m_info.horizontalAngle, 0); //Vector3 forward = rotate * Vector3.forward; //draw.DrawSphere(Color.red, StillPos, 0.5f); //draw.DrawLine(Color.red, StillPos, forward, 5); }
public static void Draw(RangeCfg cfg, DrawGL draw, Vector3 pos, Vector3 dir, Color clr, float factor = 0f) { if (!cfg.showRange) { return; } //碰撞类型的话画调线 if (cfg.type == enRangeType.collider) { if (cfg.heightLimit <= 0) { return; } draw.DrawLine(clr * 0.7f, pos + Vector3.up * cfg.heightLimit, pos - Vector3.up * cfg.heightLimit); return; } //下面是其他类型 //计算偏移后的点 float offsetAngle; Vector3 offsetPos; if (factor == 0) { offsetAngle = cfg.beginOffsetAngle; offsetPos = cfg.begingOffsetPos; } else if (factor == 1f) { offsetAngle = cfg.endOffsetAngle; offsetPos = cfg.endOffsetPos; } else { offsetAngle = Mathf.Lerp(cfg.beginOffsetAngle, cfg.endOffsetAngle, factor); offsetPos = Vector3.Lerp(cfg.begingOffsetPos, cfg.endOffsetPos, factor); } //计算偏移后的点 dir.y = 0;//y方向无效 if (offsetAngle != 0) { dir = Quaternion.Euler(0, offsetAngle, 0) * dir; } if (dir == Vector3.zero)//没有方向??? { return; } dir.y = 0; if (offsetPos != Vector3.zero) { pos += Quaternion.LookRotation(dir) * offsetPos; } float d2 = cfg.distance * 2; if (cfg.type == enRangeType.circle) { Vector3 scale = new Vector3(d2, cfg.heightLimit <= 0 ? 3 : cfg.heightLimit * 2, d2); draw.DrawCylinder(clr * 0.7f, pos, scale, Quaternion.LookRotation(dir)); } else if (cfg.type == enRangeType.sector) { Vector3 scale = new Vector3(d2, cfg.heightLimit <= 0 ? 3 : cfg.heightLimit * 2, d2); draw.DrawSectorCylinder(clr * 0.7f, cfg.angleLimit, pos, scale, Quaternion.LookRotation(dir)); } else if (cfg.type == enRangeType.rect) { pos += dir.normalized * cfg.distance / 2; Vector3 scale = new Vector3(cfg.rectLimit * 2, cfg.heightLimit <= 0 ? 3 : cfg.heightLimit * 2, cfg.distance); draw.DrawBox(clr * 0.7f, pos, scale, Quaternion.LookRotation(dir)); } }