一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

學(xué)習(xí)使用C#進行Unity3D腳本編程

 遙遠的橋zz 2011-06-25
Unity3D 提供了三種可供選擇的腳本編程語言:JavaScript, C# 以及 Boo。盡管它們各有各的優(yōu)勢與不足,但對我來講C#顯然會脫穎而出成為我的首選——首選,它完整支持面向?qū)ο螅艺Z法與Java以及ActionScript 3很類似,而這兩者都是我所熟悉的。不過在接觸Unity3D之前,我一行C#的代碼都沒寫過,所以我必須從頭學(xué)起。

    C#由Microsoft提出并廣泛使用于.NET framework以及Silverlight開發(fā)中。不過我們首先需要明白的是,學(xué)習(xí)用于Unity3D的C#并不等同于學(xué)習(xí).NET平臺,事實上你并不需要了解所有關(guān)于.NET的事情就可以使用C#為Unity3D編寫腳本程序。

    盡管我平時使用各種在線文檔,但是一本實體書通常才是最好的助手,于是我決定買一本C#好書。O’Reilly C# Pocket Guide看起來正是我所需要的,購買一本500頁的C#圣經(jīng)顯然是沒有必要的,因為那些書中大部分內(nèi)容都是與.NET相關(guān)的,根本無法與Unity3D兼容。

    當(dāng)然,僅僅依靠這一本書是不夠的,你還需要經(jīng)常查閱 Unity3D scripting reference。文檔中所有的例子都是用Javascript書寫的,但是不必擔(dān)心,一旦你熟悉C#后將它們翻譯為C#語言將輕而易舉。

    C#是一種非常典雅而強大的編程語言,它的dot-syntax命名法則基于Java,所以如果你具有Java編程背景將感到非常舒服。不過區(qū)別也還是有一些的,最明顯的應(yīng)該是在C#中屬性以及方法的名稱約定俗稱都是以大寫字母開頭的。 我估計這是繼承自Visual Basic的習(xí)慣,我并不是這種習(xí)慣的簇擁,但是與其反抗到底還不如接受它以保證代碼的一致性。

    C#的特性列表實在太長,這使得ActionScript實在是看起來有些相形見絀。 C#與Actionscript從本質(zhì)上是極為相似的,我估計下一次ActionScript的升級中至少會實現(xiàn)C#的一些特性,因此有必要在此預(yù)先有所了解。下面是我所鐘愛的一些特性。

    運算符重載這是目前為止最酷的!它允許程序員為+-*/這樣的運算符定義特殊的行為。它的優(yōu)勢在向量加法運算中就可以明顯體現(xiàn)出來,在ActionScript中,要計算向量之和,你需要書寫類似下面的代碼: var c:Vector3D = a.add(b);

    這樣并不是很好,在多于兩個向量相加時代碼的易讀性會變得很差。如果在C#中重載+運算符,代碼將會變成下面的形式:
 
     Vector3 c = a + b;

    這樣是不是可讀性更好而且更為優(yōu)雅呢?不用想我們就可以猜到,在Unity3D中所有向量的運算符都進行了重載。如果你希望自己實現(xiàn),運算符重載也非常簡單,對于上面的例子,代碼大致是下面這個樣子的:
  
      public static Vector3 operator + (a:Vector3, b:Vector3) {

           return new Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
 
        }

     這其中有一些簡單的規(guī)則:運算符函數(shù)永遠都是靜態(tài)的(static),并且需要返回它所定義的對象類型。不過它的參數(shù)可以是任何類型的,因此完全可以重載加法或乘法運算符使其支持向量與浮點數(shù)或者與矩陣的運算——而這一切都要得益于C#對運算符重載功能的支持。

     方法重載方法重載可以允許我們定義多個同名但參數(shù)不同的方法。它不但對一般方法起作用而且也可以應(yīng)用于構(gòu)造函數(shù)——如果有多種途徑來初始化一個對象,那么你可以為每一種途徑定義一個專有的構(gòu)造函數(shù)。而且方法重載同樣可以應(yīng)用于運算符方法,這一點上面已經(jīng)提到了。

     在Unity3D API中一個關(guān)于運算符重載最好的例子就是’Transform.Rotate()’這個方法,它被重載了三次以滿足不同的旋轉(zhuǎn)參數(shù):

        void Rotate (Vector3 eulerAngles, Space relativeTo)

        void Rotate (float xAngle, float yAngle, float zAngle, Space relativeTo)

        void Rotate (Vector3 axis, float angle, Space relativeTo)

     你可以指定歐拉角,也可以指定旋轉(zhuǎn)軸以及旋轉(zhuǎn)角度。

     ActionScript可以使用默認參數(shù)來模擬方法重載,但是這樣做并不方便也不便于理解。

     Getter/Setter語法C#聲明參數(shù)的方法非常簡明扼要,在ActionScript中需要兩個方法——一個’get’一個’set’,而在C#中的代碼則是這樣的: public float Size { get; set; }

     在這種情況下,你不需要額外做任何工作編譯器就會自動創(chuàng)建一個私有屬性,當(dāng)然,這樣的定義沒什么用處,下面列舉一個稍微復(fù)雜點的,包括一個public的get以及private的set: public float Area {

     get { return size * size; };

     private set { size = Mathf.Sqrt(value) };

     }

     想必你應(yīng)該已經(jīng)注意到了,盡管C#源自Java,在C#中卻并不使用’function’和’var‘關(guān)鍵詞——這樣做之所以好是因為這兩個關(guān)鍵詞完全是冗余的病情不會為代碼增加任何有價值的信息。

     對于其他特性,我推薦看看indexers,generic types,structures以及enumerators,在上面提到的C# Pocket Book中都有詳細介紹,許多C#教程中也有涉及。

     編輯C#很多編輯器都支持C#,微軟提供的Visual C# Express Edition免費而且非常好用,支持代碼自動補完功能,但是只對應(yīng)Windows平臺(顯然的)。對于Max平臺Mono Develop看起很強大但是還并不是很穩(wěn)定。 不幸的是Eclipse的C# plugin目前為止非常不穩(wěn)定,所以我并不推薦,但好在它目前還處于Alpha階段,我們應(yīng)該再多給它一些時間。當(dāng)然,不論如何,我們最后至少還可以求助于TextMate。

     最后需要提到的是Unitron——Unity3D自帶的默認編輯器。在開發(fā)者中間它并不怎么流行,而且我看到有人抱怨他過于基本了,我并不認同這種觀點。雖然它不如FDT之于ActionScript那樣強大,但是它非常穩(wěn)定而且具備基本的代碼自動補完功能——有趣的是,自動補完功能在默認設(shè)置下是關(guān)閉的(為啥?),要開啟該功能需要打開’Preferences’,你會在’General’面板的底端找到這個選項,如此一來我相信Unitron還是值得一用的。

     我們中很多人都是在瀏覽器環(huán)境下認識Javascript的,而Javascript也是很多人平生第一次使用的編程語言。如果是這種情況的話,你很可能會立刻開始使用Javascript進行Unity3D的編程而不必操心要學(xué)習(xí)什么新東西,畢竟,如Unity3D所說,任何使用C#可以完成的事同樣可以使用Javascript完成。

     但是從長遠考慮的話,C#可以提供更好的代碼管理,完整的OOP支持,strong typing以及掌握一門優(yōu)秀編程語言所帶來的成就感。因此,額外付出的努力是值得的,更何況,對于一個經(jīng)驗豐富的AS3開發(fā)者,掌握C#只是幾個禮拜的事兒,現(xiàn)在就動手嘗試一下吧

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本精品啪啪一区二区三区| 成年人黄片大全在线观看| 风韵人妻丰满熟妇老熟女av| 欧美有码黄片免费在线视频| 国产日韩欧美在线播放| 久久精品视频就在久久| 国产精品激情在线观看| 国产精品视频第一第二区| 欧美国产日产综合精品| 在线免费视频你懂的观看| 九九热精彩视频在线免费| 不卡一区二区高清视频| 国产又粗又猛又大爽又黄同志| 国产精品人妻熟女毛片av久久| 色偷偷偷拍视频在线观看| 国产精品偷拍视频一区| 国产精品日韩欧美第一页| 久久婷婷综合色拍亚洲| 国产av一二三区在线观看| 99久久国产亚洲综合精品| 国产肥女老熟女激情视频一区| 日韩精品免费一区三区| 妻子的新妈妈中文字幕| 九九热这里有精品20| 欧美日韩精品一区二区三区不卡| 日韩中文高清在线专区| 办公室丝袜高跟秘书国产| 在线精品首页中文字幕亚洲| 蜜臀人妻一区二区三区| 粉嫩一区二区三区粉嫩视频| 久久热麻豆国产精品视频| 日本中文在线不卡视频| 日本特黄特色大片免费观看 | 二区久久久国产av色| 亚洲一区二区欧美激情| 亚洲中文字幕视频在线观看| 日韩欧美综合中文字幕| 女人高潮被爽到呻吟在线观看| 亚洲黄香蕉视频免费看| 欧美日韩综合综合久久久| 日本午夜免费福利视频 |