3 回答

TA貢獻1946條經驗 獲得超4個贊
即使這兩個變量都是 Vector3 的
自從你定義以來這并不完全正確
Vector2?objPos;
您分配給它的值Vector3
會隱式轉換為Vector2
值。
如果您閱讀相應的 API,就會清楚了Vector2.Vector3
將 a 轉換
Vector2
為 a?Vector3
。A
Vector2
可以隱式轉換為 a?Vector3
。(z
結果中 被設置為零)。
和Vector2.Vector2
將 a 轉換
Vector3
為 a?Vector2
。A
Vector3
可以隱式轉換為 a?Vector2
。(z 被丟棄)。
其中隱式意味著您不必顯式使用類型轉換,但可以互換使用兩種類型。
因此,在您收到的錯誤中,ambiguous
意味著 c# 不知道您要使用哪個操作。
要么存在,Vector2 - Vector2
要么Vector3 - Vector3
存在,由于隱式轉換,兩者都是可能的。因此,c# 不知道要更改兩個值中的哪一個類型。
最明顯的解決方案是將類型更改為
Vector3?objPos;

TA貢獻1872條經驗 獲得超4個贊
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 關注
- 529 瀏覽
添加回答
舉報