亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# 在 Unity 中將 Vector3 與 Vector2 混淆

C# 在 Unity 中將 Vector3 與 Vector2 混淆

C#
躍然一笑 2023-07-09 09:51:14
當嘗試使精靈的樞軸與光標的位置相同時 - Vector3 objPos - 并從光標位置實例化對象減去一些差異 - Vector3 diff - Unity 拋出一個錯誤,指出“運算符 '-' 在類型的操作數上不明確” 'Vector2' 和 'Vector3'” 即使這兩個變量都是 Vector3public Transform baseDot;public KeyCode mouseLeft;public Vector2 mousePosition;Vector2 mousePos;Vector2 objPos;void OnMouseOver(){    Vector3 diff = new Vector3(2f, 2.8f, 0f);    float xPos = Camera.main.ScreenToWorldPoint(mousePos).x;    float yPos = Camera.main.ScreenToWorldPoint(mousePos).y;    mousePos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);    objPos = new Vector3(xPos, yPos, -10);    if (Input.GetKey(mouseLeft) )        Instantiate(baseDot, objPos-diff, baseDot.rotation);}
查看完整描述

3 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

即使這兩個變量都是 Vector3 的

自從你定義以來這并不完全正確

Vector2?objPos;

您分配給它的值Vector3會隱式轉換為Vector2值。

如果您閱讀相應的 API,就會清楚了Vector2.Vector3

將 a 轉換Vector2為 a?Vector3。

AVector2可以隱式轉換為 a?Vector3。(z結果中 被設置為零)。

Vector2.Vector2

將 a 轉換Vector3為 a?Vector2。

AVector3可以隱式轉換為 a?Vector2。(z 被丟棄)。

其中隱式意味著您不必顯式使用類型轉換,但可以互換使用兩種類型。

因此,在您收到的錯誤中,ambiguous意味著 c# 不知道您要使用哪個操作。

要么存在,Vector2 - Vector2要么Vector3 - Vector3存在,由于隱式轉換,兩者都是可能的。因此,c# 不知道要更改兩個值中的哪一個類型。


最明顯的解決方案是將類型更改為

Vector3?objPos;


查看完整回答
反對 回復 2023-07-09
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

C# 在這里表現正確。Vector2 和 Vector3 是結構體(值類型),并且只能將 Vector3 分配給 Vector2,因為 Vector2 定義了隱式運算符。這意味著當您將 Vector3 分配給 Vector2 類型的變量時,它會變成 Vector2 并且 z 坐標會丟失。

要解決您的問題,只需將 objPos 的類型更改為 Vector3 或創建一個新的臨時變量來存儲新的 Vector3(xPos, yPos, -10);

為了理解這種行為,我建議研究引用類型與值類型以及隱式運算符。


查看完整回答
反對 回復 2023-07-09
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

也許嘗試將變量 objPos 定義為Vector3,我不確定它是否在類型之間定義了隱式/顯式轉換運算符:

Vector2 objPos;
...
objPos = new Vector3(xPos, yPos, -10);


查看完整回答
反對 回復 2023-07-09
  • 3 回答
  • 0 關注
  • 529 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號