3 回答

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

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
C# 在這里表現(xiàn)正確。Vector2 和 Vector3 是結(jié)構(gòu)體(值類(lèi)型),并且只能將 Vector3 分配給 Vector2,因?yàn)?Vector2 定義了隱式運(yùn)算符。這意味著當(dāng)您將 Vector3 分配給 Vector2 類(lèi)型的變量時(shí),它會(huì)變成 Vector2 并且 z 坐標(biāo)會(huì)丟失。
要解決您的問(wèn)題,只需將 objPos 的類(lèi)型更改為 Vector3 或創(chuàng)建一個(gè)新的臨時(shí)變量來(lái)存儲(chǔ)新的 Vector3(xPos, yPos, -10);
為了理解這種行為,我建議研究引用類(lèi)型與值類(lèi)型以及隱式運(yùn)算符。

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
也許嘗試將變量 objPos 定義為Vector3,我不確定它是否在類(lèi)型之間定義了隱式/顯式轉(zhuǎn)換運(yùn)算符:
Vector2 objPos; ... objPos = new Vector3(xPos, yPos, -10);
- 3 回答
- 0 關(guān)注
- 577 瀏覽
添加回答
舉報(bào)