- Home /
Overriding default Vector3 to Vector2 cast?
Is it possible to override the default Vector3 to Vector2 cast without creating a new struct? Maybe with extension class? For example, as it is now:
Vector2 v2 = new Vector3(x1,y1,z1); // When we do this
v2 == new Vector2(x1,y1); // True
However I work on a top down game and the behavior I want is:
v2 == new Vector2(x1,z1); // Discard y instead of z
Answer by Flassari · Oct 13, 2014 at 03:13 PM
It's not possible to do it the way you want to. Unfortunately you cannot override any function using extension methods. Extensions methods never take precedence over existing functions with same signatures, they're only meant to add to functionality, not change it.
You're going to have to go some other more "verbal" way about it, you could create an extension method for casting it to your own coordinate vector and call it like "ToXZVector2" and/or one that compares also to your custom vector like "EqualsXZVector2" which would return true or false depending on if x and z match.
Answer by Landern · Oct 13, 2014 at 12:54 PM
Sure. Stick this into a class.
public static Vector2 ToMyVector3(this Vector3 v3)
{
return new Vector2(v3.x, v3.z);// Discarding the y instead of z captain.
}
I have a function like this already. However I want to override default cast operator. I dont want to append ".To$$anonymous$$yVector3()" to every Vector3. In the code you give "v2 == new Vector2(x1,y1);" will still hold.
Give it a try and sorry if i'm misinterpreting this, this is untested.
Insert into class:
public static implicit operator Vector2(Vector3 v)
{
return new Vector2(v.x, v.z);
}
Usage:
Vector3 v3 = new Vector3(1.2f, 1.4f, 1.6f);
Vector2 v2 = v3;
or try an explicit conversion:
public static explicit operator Vector2(Vector3 v)
{
return new Vector2(v.x, v.z);
}
usage:
Vector3 v3 = new Vector3(1.2f, 1.4f, 1.6f);
Vector2 v2 = (Vector2)v3;
This obviously could(probably will be) be confusing for the compiler. Another option of course is to use your own struct that looks like a Vector3, create all the operator overloads and conversions, that may such however.
I tried but didn't work. Seems like casting operator must be in the class definition itself. I didn't expect what I want would be possible anyways. But I learned about implicit and explicit casting, may come handy later. Thanks.
Your answer
Follow this Question
Related Questions
Issues calculating angle in 2D 0 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Vector2 Lerp. Probably a simple solution C# 4 Answers
Rotate around a circle 0 Answers