Код в вашем методе AddA просто делает то же, что и:
public Vec2 AddA(Vec2 other) {
Vec2 v;
v.x = 0;
v.y = 0;
v.x = x + other.x;
v.y = y + other.y;
return v;
}
Конструктор без параметров структуры возвращает значение по умолчанию для структуры, то есть значение, при котором все члены обнуляются. Значение просто возвращается при вызове конструктора, оно никогда не выделяется в куче.
Кроме того, изменяемая структура, как правило, плохая идея. Я бы реализовал это так:
struct Vec2 {
public float X { get; private set; }
public float Y { get; private set; }
public Vec2(float x, float y) {
X = x;
Y = y;
}
public Vec2 Add(Vec2 other) {
return new Vec2(X + other.X, Y + other.Y);
}
}