Unity3D心得之遊戲架構設計和屬性的運用

來源:互聯網
上載者:User

標籤:

由於Unity是一個指令碼化開發的引擎,所以實現一個具體功能的代碼往往非常簡短。

我剛開始寫的時候總會碰到一個頭疼的問題,當遊戲變得越來越大,情境內的物體越來越多,各種繁雜的指令碼互相交錯,最後當需求變更或者發現BUG的時候,我發現有茫茫多的代碼需要檢查和修改。

關於怎麼樣來架構Unity3D中的指令碼,詳細的可以看一下雨松momo的這篇文章

http://www.xuanyusong.com/archives/1851

總結來講主要是三個點:

1、運用單例指令碼來控制一類工作

2、一個指令碼不要管和自己無關的內容

3、將UI和邏輯分開

至於這其中的協作方式,無論你通過SendMessage還是直接調用方法,抑或使用回調或者委託,都是可以的。

 

再來說下屬性的運用,假如在一個打飛機遊戲中有一個類Plane,我建議這樣設計(部分):

public class Plane{    public PlaneType type    {        get;        private set;    }    public double HP    {        get;        private set;    }    public void SetType(PlaneType type)    {        this.type = type;    }    public void Damaged(double damage)    {        HP -= damage;    }}

大家都知道使用private set可以確保HP這個屬性只在類內部被修改,使用Damaged方法來扣血比較符合邏輯。

但我以前一直覺得,如果我謹慎對待變數HP,確保所有的修改都是我有意為之而不是意外,是不是就可以直接使用public變數在其他地方修改,這樣做還有沒有其他的好處?

有!假如現在我需要一個功能,要求統計在整個遊戲中造成的總傷害,那麼基於上面的類設計,我可以非常簡單的在Damaged方法中加入一個判斷,當類型為敵人的時候,把當次攻擊的數值加到統計值上即可。

但如果我用的是public變數,並且是在其他地方直接修改了HP值,即使我知道所有的修改都是我有意為之,但要實現這個功能我還是得查看所有HP被引用的地方,逐個修改,並且免不了擔心是否有遺漏。

所以我建議在Unity3D的指令碼中,盡量使用屬性來替代公開變數並且設為private set,使用方法來修改屬性值,即使這個類在當前看來非常簡單(比如一個Player類,只有一個變數Money時,往往會為了方便設計成全域靜態變數,但其實以後很容易出類似的問題)

 

Unity3D心得之遊戲架構設計和屬性的運用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.