Beispiel #1
0
    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);
    }
Beispiel #2
0
    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));
        }
    }