3 回答

TA贡献1946条经验 获得超4个赞
即使这两个变量都是 Vector3 的
自从你定义以来这并不完全正确
Vector2 objPos;
您分配给它的值Vector3
会隐式转换为Vector2
值。
如果您阅读相应的 API,就会清楚了Vector2.Vector3
将 a 转换
Vector2
为 aVector3
。A
Vector2
可以隐式转换为 aVector3
。(z
结果中 被设置为零)。
和Vector2.Vector2
将 a 转换
Vector3
为 aVector2
。A
Vector3
可以隐式转换为 aVector2
。(z 被丢弃)。
其中隐式意味着您不必显式使用类型转换,但可以互换使用两种类型。
因此,在您收到的错误中,ambiguous
意味着 c# 不知道您要使用哪个操作。
要么存在,Vector2 - Vector2
要么Vector3 - Vector3
存在,由于隐式转换,两者都是可能的。因此,c# 不知道要更改两个值中的哪一个类型。
最明显的解决方案是将类型更改为
Vector3 objPos;

TA贡献1872条经验 获得超3个赞
C# 在这里表现正确。Vector2 和 Vector3 是结构体(值类型),并且只能将 Vector3 分配给 Vector2,因为 Vector2 定义了隐式运算符。这意味着当您将 Vector3 分配给 Vector2 类型的变量时,它会变成 Vector2 并且 z 坐标会丢失。
要解决您的问题,只需将 objPos 的类型更改为 Vector3 或创建一个新的临时变量来存储新的 Vector3(xPos, yPos, -10);
为了理解这种行为,我建议研究引用类型与值类型以及隐式运算符。

TA贡献1813条经验 获得超2个赞
也许尝试将变量 objPos 定义为Vector3,我不确定它是否在类型之间定义了隐式/显式转换运算符:
Vector2 objPos; ... objPos = new Vector3(xPos, yPos, -10);
- 3 回答
- 0 关注
- 424 浏览
添加回答
举报