2016-01-09 43 views
0

我曾經使用過Unity,他們使用酷酷的系統來添加和增加向量。 這是從參考一短摘錄(http://docs.unity3d.com/ScriptReference/Transform.html結構體/類的用戶自定義計算

foreach (Transform child in transform) { 
    child.position += Vector3.up * 10.0F; 
} 

,你可以看到他們可以進行加和乘兩個向量(結構/班),即使他們可以有不同的變量。現在,當我嘗試進行這樣的計算時,我必須單獨添加二維浮點矢量的x和y。 因此,如何能我寫

Vec2f c = a + b; 

,而不是

c.x = a.x + b.x; 
c.y = a.y + b.y; 
+0

如果你是一個初學者注意,你可能也在尋找擴展,這是在C#和Unity完全關鍵的事情。例如,在回答這個簡單的問題... ... http://answers.unity3d.com/answers/1118868/view.html它給出了擴展優良的教學教程。我敦促你熟悉它們,並在任何地方使用它們。請享用! – Fattie

+0

這是另一個很好的例子,它涉及更多的矢量問題。 http://answers.unity3d.com/answers/1114273/view.html去吧! – Fattie

回答

3

添加結構像一個

struct Vec2f{ 
    float x; 
    float y; 
}; 

一起編輯:

你需要重載運營商如 '+' ,' - '等在你的結構中。加法例如:

struct Vec2f 
{ 
    float x; 
    float y; 

    Vec2f operator+(const Vec2f& other) const 
    { 
     Vec2f result; 
     result.x = x + other.x; 
     result.y = y + other.y; 
     return result; 
    } 
}; 

編輯2: RIJIK問在註釋:

此外,我不知道是否有一些技巧,讓職能並非如此的repetetive。我的意思是,如果我現在想要使用操作員,我必須爲每個操作員創建一個功能,即使除了所使用的操作員之外的功能之間沒有很大的區別。您在實施計算或許多操作員時如何處理?

這麼一件事,你可以做的是在運營商使用其他運營商。喜歡你的東西可以改變減法此外,通過簡單地否定第二個數字:

一個 - B成爲+(-b)

當然,你首先需要否定運營商在你的結構來做到這一點。示例代碼:

struct Vec2f 
{ 
    float x; 
    float y; 

    Vec2f operator+(const Vec2f& other) const 
    { 
     Vec2f result; 
     result.x = x + other.x; 
     result.y = y + other.y; 
     return result; 
    } 

    Vec2f operator-() const 
    { 
     Vec2f result; 
     result.x = -x; 
     result.y = -y; 
     return result; 
    } 

    // we use two operators from above to define this 
    Vec2f operator-(const Vec2f& other) const 
    { 
     return (*this + (-other)); 
    } 
}; 

這樣做的一個好處是,如果您更改添加例如比你不需要改變減法。它會自動更改。

而作爲回覆此:

但我不明白爲什麼我應該做的功能不變。

,因爲這樣你可以用等變量此功能。例如:

const Vec2f screenSize = { 800.0f, 600.0f }; 
const Vec2f boxSize = { 100.0f, 200.0f }; 
const Vec2f sub = screenSize - boxSize; 

我在這裏也使用了花括號初始化,因爲你沒有定義任何構造函數。

+0

不要忘記非成員超載選項。 –

+0

這比我在全球空間中做這件事更優雅。 – bercik

+0

這真是太棒了! – RIJIK