- Home /
Add attribute to Vector2 Class
Hello. I'm working on something that uses Vector2 a lot.
I now realize I'd like to add an additional int attribute to the class, as an ID. The problem is that I can't derive a class from Vector2 because it is a "sealed" type...
I now found out that there are "Extension" methods to add functionality. Is there anything similar to add an attribute?
I could create my own class, but it's rather annoying to have to rewrite all of the code.
Thanks!
Answer by Hellium · Jan 15, 2018 at 05:00 PM
Extension methods are used to add methods, and AFAIK, it's not possible to add class members this way.
I advise you to write your own class, but don't worry, you don't have to rewrite it completely.
using UnityEngine;
public struct MyVector
{
public Vector2 Value
{
get; set;
}
public int ID
{
get; set;
}
public MyVector( Vector2 v ) : this( 0, v ) { }
public MyVector( float x, float y ) : this( 0, x, y ) { }
public MyVector( int id, Vector2 v )
{
ID = id;
Value = v;
}
public MyVector( int id, float x, float y )
{
ID = id;
Value = new Vector2( x, y );
}
public static implicit operator Vector2( MyVector v )
{
return v.Value;
}
public static implicit operator MyVector( Vector2 v )
{
return new MyVector( v );
}
}
Then, you will be able to use your new struct as follow:
MyVector v = new MyVector();
Debug.Log( ( (Vector2) v ).magnitude ) ;
// OR
Debug.Log( v.Value.magnitude );
Had to rewrite a lot of the code that used Vector2, but it is working, with a few added functions to the struct.
So I'll accept this answer. Thanks! :)
Your answer
Follow this Question
Related Questions
Extending MonoBehaviour to share code between Objects 1 Answer
An OS design issue: File types associated with their appropriate programs 1 Answer
Get object bottom/top point after rotation 0 Answers
Most efficient way to predict collision 0 Answers
I need to add the speed of my player to the one of my projectile (c#,2d) 0 Answers