Пример #1
0
    void DrawSideGizmos()
    {
        if (sideMask.intValue == 0)
        {
            return;
        }

        var radius = idleDetectRadius.floatValue;

        if (source.InputLocalDirection != Vector3.zero)
        {
            radius = movingDetectRadius.floatValue;
        }
        //draw collision gizmos
        EditorExtensions.DrawWireCapsule(source.CurSideDetectCenter, source.transform.rotation, radius, sideDetectHeight.floatValue, Color.magenta);
    }
    public static void DrawDetectZone(SerializedProperty _detectZoneProperty, Transform _sourceTrans = null)
    {
        var worldPos          = _detectZoneProperty.FindPropertyRelative("worldPos");
        var detectType        = _detectZoneProperty.FindPropertyRelative("detectType");
        var offset            = _detectZoneProperty.FindPropertyRelative("offset");
        var angle             = _detectZoneProperty.FindPropertyRelative("angle");
        var size              = _detectZoneProperty.FindPropertyRelative("size");
        var radius            = _detectZoneProperty.FindPropertyRelative("radius");
        var height            = _detectZoneProperty.FindPropertyRelative("height");
        var positionType      = _detectZoneProperty.FindPropertyRelative("positionType");
        var trans             = _detectZoneProperty.FindPropertyRelative("trans");
        var transRoot         = trans.objectReferenceValue as Transform;
        var useTransformAngle = _detectZoneProperty.FindPropertyRelative("useTransformAngle");
        var debugColor        = _detectZoneProperty.FindPropertyRelative("debugColor");


        var pos = offset.vector3Value;

        if (positionType.enumValueIndex == (int)DetectZone.PositionType.World)
        {
            worldPos.vector3Value = Handles.PositionHandle(worldPos.vector3Value, Quaternion.Euler(angle.vector3Value));

            //get final position
            pos = worldPos.vector3Value + offset.vector3Value;
        }
        else if (positionType.enumValueIndex == (int)DetectZone.PositionType.Local && trans.objectReferenceValue)
        {
            pos = transRoot.TransformPoint(offset.vector3Value);
        }
        else if (positionType.enumValueIndex == (int)DetectZone.PositionType.Offset && _sourceTrans)
        {
            pos = _sourceTrans.TransformPoint(offset.vector3Value);
        }

        if (useTransformAngle.boolValue)
        {
            if (positionType.enumValueIndex == (int)DetectZone.PositionType.Local && trans.objectReferenceValue)
            {
                angle.vector3Value = transRoot.eulerAngles;
            }
            else if (positionType.enumValueIndex == (int)DetectZone.PositionType.Offset && _sourceTrans)
            {
                angle.vector3Value = _sourceTrans.eulerAngles;
            }
        }

        var rot = Quaternion.Euler(angle.vector3Value);
        var col = debugColor.colorValue;

        Handles.zTest = UnityEngine.Rendering.CompareFunction.Less;
        //draw the objects
        if (detectType.enumValueIndex == (int)DetectZone.DetectAreaType.Box)
        {
            EditorExtensions.DrawWireCube(pos, rot, size.vector3Value, col);
        }
        else if (detectType.enumValueIndex == (int)DetectZone.DetectAreaType.Sphere)
        {
            EditorExtensions.DrawWireSphere(pos, rot, radius.floatValue, col);
        }
        else if (detectType.enumValueIndex == (int)DetectZone.DetectAreaType.Capsule)
        {
            EditorExtensions.DrawWireCapsule(pos, rot, radius.floatValue, height.floatValue, col);
        }

        _detectZoneProperty.serializedObject.ApplyModifiedProperties();
    }