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 關注
- 580 瀏覽
添加回答
舉報
