Trouble calculating Arc offset position

Hello everybody :slight_smile:
I am trying to create an angle arc, to help me visualize things better in the scene view. Unfortunately, I got myself stuck…

I use

to draw an arc using an angle I specify in the inspector.

Currently for from vector I use transform.forward, but it gives me this result:

5132930--507608--Ex1.png

How do I offset the vector to get this type of result instead?

5132930--507611--Ex2.png

In this example angle is 90 degrees, but I can specify a different angle from 0 to 180 degrees and I would like if this arc would offset to the center as this is kind of a field of view of the object.
I’m not the best when it comes to math, any help would be much appreciated! :slight_smile:

void OnSceneGUI()
{
    var objTransform = _reference.objectReferenceValue as Transform;

    var center = new Vector3(objTransform.position.x, objTransform.position.y + 5, objTransform.position.z);

    Handles.color = new Color(.5f, .5f, .5f, .25f);
    Handles.DrawSolidDisc(center, Vector3.up, collider.radius);

    Handles.DrawSolidArc(center, Vector3.up, objTransform.forward, _angle.floatValue, collider.radius);

    Handles.color = Color.white;
    }

Use a dot product of the direction

Thank you for providing such a clear and well-stated question!

There are several ways to approach this, but I’d probably use my best rotation friend, Quaterion.AngleAxis. To center your arc you need to shift the angle over by half the entire arc size. You can do this by transforming the forward vector by rotating it by a quaternion like so:

var forward = objTransform.forward;
var rotation = Quaternion.AngleAxis( _angle.floatValue * 0.5f, Vector3.up );
forward = rotation * from;

Handles.DrawSolidArc( center, Vector3.up, forward, _angle.floatValue, collider.radius );
1 Like