2014-11-04 19 views
2

我有一個理論問題: 我有2個場景,Galaxy和SolarSystem。每個場景調用一個GUI相關功能來顯示當前選中的對象。 Galaxy將傳遞一個基本上是GalacticItem預製件的GameoOject,SolarSystem將傳遞一個GameObject SolarSystemItem預製件。我的團隊有一點討論的關於解決這個問題的方法:Unity 3d - 標籤或重載函數?

方法1: 標籤中的每個預製和功能有一個If聲明一個預製和其他區分來完成其任務

方法2: 有一個重載函數:一個用Galaxy預製作爲參數,另一個用SolarSystem預製。

哪種方法更有意義,爲什麼?

謝謝

編輯1:

是否有使用一種方法VS其他的性能優勢?

是否有使用字符串/標記(方法1)需要關注的維護問題? IE:假設我必須將SolarSystem預製件的標籤從「SolarSystem」重命名爲「StellarObject」。現在我必須在每個將「SolarSystem」引用爲「StellarObject」的地方更改代碼。這是一個風險,因爲程序員有機會錯過某些東西,並且在編譯時不會被捕獲。

方法1真的是使用標籤的正確方法嗎?或者,標籤僅用於通過GameObject.FindWithTag來識別特定對象嗎?

+1

我可以想象(強調我沒有測試此)超載方法降低了運行速度,因爲哪個方法被執行將在編譯時決定。對我而言,如果在呈現方式上有明確的區別,那麼代碼也會更清晰。 – chsh 2014-11-04 13:49:50

回答

2

使用一種方法比其他方法有性能好處嗎?

重載方法會更快,無論如何,在這種情況下性能增益最小。

是否有關於使用字符串/標記(方法1)的維護問題是 ? IE:假設我必須將SolarSystem 預製件的標籤從「SolarSystem」重命名爲「StellarObject」。現在,我必須在每個它引用「SolarSystem」的地方將 代碼更改爲 「StellarObject」。這是一個風險,因爲程序員有機會錯過某些東西,並且它不會被編譯時間爲 。

這正是主要問題。基本上你使用一個字符串(tag)來定義一個類型,而不是依賴於語言本身。這是一個糟糕的做法,容易出錯和重構問題。

方法1真的是使用標籤的正確方法嗎?或者是標籤那裏只有 通過GameObject.FindWithTag來標識一個特定的對象?

無論出於何種原因,您都可以使用tags。在我看來,這種用法是沒有用的,也是有問題的,因爲你有更安全,更高效,更可維護的方法來隱式執行代碼。

我一般用標記爲快速搜索GameObject,或以當層是不夠的碰撞等過程中區分特定的情況下..

+0

謝謝。就我個人而言,我推出了方法2,其功能超載。我在C#和.Net方面有很多經驗,但我很團結,所以我很想知道是否缺少一些重要的標籤。 – George 2014-11-04 15:19:17