前言:每日记录自己学习unity的心得和体会,小弟才疏学浅,如有错误的地方,欢迎大佬们指正,感谢~
operator 运算符的用法
一元运算符
一个参变量,直接跟变量使用
//operator +
public static DoubleVec operator +(DoubleVec a)
{
return new DoubleVec(a.x , a.y , a.z );
}
//operator -
public static DoubleVec operator -(DoubleVec a)
{
return new DoubleVec(-a.x , -a.y , -a.z );
}
//operator ++
public static DoubleVec operator ++(DoubleVec a)
{
return new DoubleVec(a.x+1 , a.y+1 , a.z+1 );
}
//operator --
public static DoubleVec operator --(DoubleVec a)
{
return new DoubleVec(a.x-1 , a.y-1 , a.z-1 );
}
//operator !
public static bool operator !(DoubleVec a)
{
return true;
}
使用方法
doubleVec1 = new DoubleVec(1, 1, 1);
DoubleVec doubleVec3 = - doubleVec1;//对应operator +
doubleVec3 = +doubleVec1;//对应operator -
doubleVec3 = doubleVec1++;//对应operator ++
doubleVec3 = doubleVec1--;//对应operator --
bool bo = !doubleVec1;//对应operator !
二元运算符
需要两个变量进行运算
//operator +
public static DoubleVec operator +(DoubleVec a, DoubleVec b)
{
return new DoubleVec(a.x + b.x, a.y + b.y, a.z + b.z);
}
//也允许其中一个变量不是结构体的类型
public static DoubleVec operator +(DoubleVec a, double b)
{
return new DoubleVec(a.x + b, a.y + b, a.z + b);
}
//operator -
public static DoubleVec operator -(DoubleVec a, DoubleVec b)
{
return new DoubleVec(a.x - b.x, a.y - b.y, a.z - b.z);
}
//operator *
public static DoubleVec operator *(DoubleVec a, double b)
{
return new DoubleVec(a.x * b, a.y * b, a.z * b);
}
//operator /
public static DoubleVec operator /(DoubleVec a, double b)
{
return new DoubleVec(a.x / b, a.y / b, a.z / b);
}
使用方法
doubleVec1 = new DoubleVec(1, 1, 1);
doubleVec2 = new DoubleVec(2, 2, 2);
DoubleVec doubleVec3 = doubleVec1;
doubleVec3 = doubleVec1 + doubleVec2;//对应operator +
doubleVec3 = doubleVec1 - doubleVec2;//对应operator -
doubleVec3 = doubleVec1 + 1;//对应operator +
doubleVec3 = doubleVec1 * 1;//对应operator*
doubleVec3 = doubleVec1 / 1;//对应operator/
比较运算符
两个变量进行比较
//operator ==
public static bool operator == (DoubleVec a, DoubleVec b)
{
if (a.x==b.x&& a.y==b.y&&a.z==b.z)
{
return true;
}
else
{
return false;
}
}
//operator !=
public static bool operator !=(DoubleVec a, DoubleVec b)
{
if (a.x != b.x && a.y!= b.y && a.z != b.z)
{
return true;
}
else
{
return false;
}
}
//operator >
public static bool operator >(DoubleVec a, DoubleVec b)
{
double magA = a.magnitude();
double magB = b.magnitude();
if (magA> magB)
{
return true;
}
else
{
return false;
}
}
//operator <
public static bool operator <(DoubleVec a, DoubleVec b)
{
double magA = a.magnitude();
double magB = b.magnitude();
if (magA < magB)
{
return true;
}
else
{
return false;
}
}
//operator >=
public static bool operator >= (DoubleVec a, DoubleVec b)
{
double magA = a.magnitude();
double magB = b.magnitude();
if (magA >= magB)
{
return true;
}
else
{
return false;
}
}
//operator <=
public static bool operator <= (DoubleVec a, DoubleVec b)
{
double magA = a.magnitude();
double magB = b.magnitude();
if (magA <= magB)
{
return true;
}
else
{
return false;
}
}
使用方法
bool _bool = doubleVec1 == doubleVec2;
_bool = doubleVec1 != doubleVec2;
_bool = doubleVec1 > doubleVec2;
_bool = doubleVec1 < doubleVec2;
_bool = doubleVec1 <= doubleVec2;
_bool = doubleVec1 >= doubleVec2;