Esempio n. 1
0
    private static void DrawHitBoxComponentGizmo(HitBoxComponent target, GizmoType gizmoType)
    {
        if (target.gizmoController.drawGizmoData == null)
        {
            return;
        }

        var color = new Color32(0, 0, 255, 210);

        //GizmoType.Active の時は赤色にする
        if ((gizmoType & GizmoType.Active) == GizmoType.Active)
        {
            color = new Color(Color.red.r, Color.red.g, Color.red.b, 210);
        }
        var transform = target.gameObject.transform;

        foreach (var keyframe in target.gizmoController.drawGizmoData)
        {
            var sign = target.GetDirectionSign();
            foreach (var e in keyframe.colliders)
            {
                if (e.colliderParam is RectColliderParam)
                {
                    var rect       = e.colliderParam as RectColliderParam;
                    var rectcenter = rect.rect.center;
                    rectcenter.Scale(new Vector3(sign, 1.0f, 1.0f));
                    var directedrect = rect.rect;
                    directedrect.center = rectcenter;
                    var position = new Vector3(directedrect.position.x + transform.position.x, directedrect.position.y + transform.position.y, transform.position.z);
                    DrawRectGizmo(position, rect.rect.size, color);
                }
                else if (e.colliderParam is SphereColliderParam)
                {
                    var sphere      = e.colliderParam as SphereColliderParam;
                    var preposition = sphere.position;
                    preposition.Scale(new Vector3(sign, 1.0f, 1.0f));
                    var position = new Vector3(preposition.x + transform.position.x, preposition.y + transform.position.y, transform.position.z);

                    DrawSphereGizmo(position, sphere.radius, color);
                }
                else if (e.colliderParam is CapsuleColliderParam)
                {
                    var capsule  = e.colliderParam as CapsuleColliderParam;
                    var prestart = capsule.start;
                    prestart.Scale(new Vector3(sign, 1.0f, 1.0f));
                    var start  = new Vector3(prestart.x + transform.position.x, prestart.y + transform.position.y, transform.position.z);
                    var preend = capsule.end;
                    preend.Scale(new Vector3(sign, 1.0f, 1.0f));
                    var end = new Vector3(preend.x + transform.position.x, preend.y + transform.position.y, transform.position.z);

                    DrawCapsuleGizmo(start, end, capsule.radius, color);
                }
            }
        }
    }
Esempio n. 2
0
    private void OnSceneGUI()
    {
        if (targetComponents.hitboxes == null)
        {
            return;
        }

        int animationindex = 0;
        int keyframeIndex  = 0;

        if (traceAnimMode == TraceAnimMode.Scene)
        {
            animationindex = targetComponents.GetStateNames().FindIndex(e => e == targetComponents.GetNowStateName());
            keyframeIndex  = targetComponents.GetNowKeyFrame();
        }
        else
        {
            animationindex = targetComponents.inspectorTemp.animationindex;
            keyframeIndex  = targetComponents.inspectorTemp.keyframeIndex;
        }

        var animname = targetComponents.GetStateNames()[animationindex];

        try
        {
            var a = targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders;
        }
        catch
        {
            return;
        }

        foreach (var col in targetComponents.hitboxes[animname].keyframes[keyframeIndex].colliders)
        {
#if UNITY_EDITOR
            var precolor = Handles.color;
            var so       = new SerializedObject(col.colliderParam);
            Handles.color = new Color(0, 0, 0);

            var sign = targetComponents.GetDirectionSign();

            var position = col.colliderParam.Position;
            position.Scale(new Vector3(sign, 1, 1));
            var movedPosition = Handles.FreeMoveHandle(position + targetComponents.gameObject.transform.position,
                                                       Quaternion.identity,
                                                       0.05f,
                                                       Vector3.one,
                                                       Handles.DotHandleCap);

            var newposition = movedPosition - targetComponents.gameObject.transform.position;
            newposition.Scale(new Vector3(sign, 1.0f, 1.0f));
            col.colliderParam.Position = newposition;

            if (col.colliderParam is RectColliderParam)
            {
                var rect   = col.colliderParam as RectColliderParam;
                var helper = new Vector3(rect.rect.size.x * sign, rect.rect.size.y, 0.0f);
                Handles.color = new Color(1, 1, 1);
                var helperpreposition = position + helper;
                helperpreposition.Scale(new Vector3(sign, 1.0f, 1.0f));
                var movedhelper = Handles.FreeMoveHandle(helper + position + targetComponents.gameObject.transform.position,
                                                         Quaternion.identity,
                                                         0.05f,
                                                         Vector3.one,
                                                         Handles.DotHandleCap);

                var newsize = movedhelper - (position + targetComponents.gameObject.transform.position);
                newsize.Scale(new Vector3(sign, 1.0f, 1.0f));
                rect.rect.size = newsize;
            }
            else if (col.colliderParam is SphereColliderParam)
            {
                var sphere = col.colliderParam as SphereColliderParam;
                var helper = new Vector3(sphere.radius, 0.0f, 0.0f);
                Handles.color = new Color(1, 1, 1);
                var helperpreposition = position + helper;
                helperpreposition.Scale(new Vector3(sign, 1.0f, 1.0f));
                var movedhelper = Handles.FreeMoveHandle(helper + position + targetComponents.gameObject.transform.position,
                                                         Quaternion.identity,
                                                         0.05f,
                                                         Vector3.one,
                                                         Handles.DotHandleCap);

                sphere.radius = Mathf.Abs((movedhelper - (position + targetComponents.gameObject.transform.position)).x);
            }

            EditorUtility.SetDirty(targetComponents.hitboxes);
            Handles.color = precolor;

            Repaint();
#endif
        }
    }