2010年7月16日 星期五

工商服務之Unity3D

大家好,又到了每週五的工商服務時間
今天要介紹的是我常用的一套遊戲開發工具--Unity3D
http://www.unity3d.com

工欲善其事,必先利其器,本BLOG一向不鼓勵靠熱血、根性還有鬥魂去拼某件事,因為這不是日本熱血少年漫畫,這個世界很現實,不是靠爆氣就能逆轉勝,也不是有信念就會成功,所以本BLOG工商服務的宗旨就是希望能夠讓大家以最有效率的方式完成創作遊戲的夢想

身為獨立開發者的我們,沒有足夠的財力、人力與物力,所以選擇一套好的開發工具是很重要的,透過開發工具,可以事半功倍,本格派的C++交給遊戲公司的RD去做就好,我們獨立開發者不應該把時間花在底層的程式技術上面,應該專注在遊戲內涵上,因此今天的工商服務就是要來介紹Unity3D這個好物!

Unity3D是2005年由一群德國的蘋果迷創造出來的遊戲引擎,後來逐步演進為整合式的遊戲開發工具,原本只能在MAC上面使用,直至2.5版開始才發佈windows版本,對我來說,Unity最吸引人的地方有下列幾點

1.跨平台發佈
跨平台沒什麼了不起,跨平台發佈就很威了!換言之你只需要開發一次,剩下的跨平台發佈就交給Unity了,如果把尚未上市的Unity3納入考量,Unity能夠發佈的平台已經高達8個(PC、MAC、Web、iPhone、Android、Wii、PS3、XBOX360),這對開發者來說是一大福音,你不需要把心力花在Porting程式碼上,而對獨立開發者來說更是重要,為什麼呢?我再三強調,獨立開發者沒有足夠的財力打通路,所以這個跨平台特性對我們來說,可以讓我們的遊戲曝光率大幅提高,讓我們投資的時間成本更有效率的回收,所以Unity3D一開始最吸引我的地方在此。

2.Web瀏覽
這特性真的是很威,Unity在Web3D上面的表現,真的讓人讚嘆,不論是Flash3D還是html5的WebGL,跟Unity3D相比,完全被壓倒,他的原理跟flash是一樣的,必須要裝一個播放器,然後透過播放器來讀取放在網路上的unity檔案以做到web3D瀏覽的效果,如果大家不相信,可以先看看這個DEMO,沒有播放器的人,當你點到這個連結時,他會引導你去安裝播放器,不用擔心有病毒,放心的安裝吧!絕對值得!
http://unity3d.com/gallery/live-demos/tropical-paradise

當你試過這個DEMO後,你就會知道Unity的3D能力有多強了,而當這樣品質的遊戲,可以直接放在網路上面透過瀏覽器就可以遊玩,光想到就很興奮!

3.整合編輯介面
Unity的工作環境完全是所見即所得的,各位可以看一下下面的圖,如果你有製作3D的經驗,對這樣的介面一定不陌生,裡面遊戲場景的製作就跟一般3D製作方式一樣,也可以切3視圖幫助定位,打光跟貼圖的方式也跟一般的3D軟體幾乎一模一樣,所以對熟3D的人來說,上手速度很快
Testing A Shooter

4.物理效果
我想有寫過遊戲的都知道,物理效果跟碰撞偵測是很煩人的,光是一個簡單的彈性碰撞,就要寫不少程式碼,如果是非彈性碰撞、完全非彈性碰撞那就更麻煩,斜拋、平拋、自由落體、爆炸這些物理行為,真的會寫死你,但Unity裡面內建PhysX物理引擎,你只要設定好物件的剛體屬性,剩下的就交給物理引擎去計算了,這些底層的程式都不需要你煩惱,碰撞偵測也是一樣,可以設定各種的碰撞子做碰撞偵測,這部分也都幫你做好了,只要是一個遊戲中共通的底層元件,都不需要你重新刻一遍,大家可以看看這個Demo,體會一下他的物理效果
http://unity3d.com/gallery/live-demos/index.html#shadows

5.網路通訊
除了可以發佈單機版之外,Unity也可以做網路通訊,除了Socket通訊之外,也支援http的POST和GET方法,換言之,你可以用Unity做MMO,也可以做AJAX的遊戲,我想這個特點會讓很多一心想做線上遊戲的人很心動

6.動態光影效果
動態光影效果就是在遊戲場景中的光影變化可以隨著光源的變化,做動態改變,比方說,你在房間中開一盞燈,周圍景物就會伴隨做出光影變化,這聽起來沒什麼,很多軟體都做得到,但是Unity的效果特別真實,想想如果你的角色在洞窟裡,手上拿著火把,配合這種動態光影效果,那是多麼爽的事!而且到了Unity3之後,光影效果又更強!

Shadows
7.程式語言
好啦!這個可能對我比較有吸引力,對別人未必,這點要跟大家說清楚,做遊戲很難不碰程式,尤其你又是獨立開發者,十八般武藝樣樣精通這是你最基本的條件,去期望一個工具能完全幫你用拖拉方式建立遊戲,這是不切實際的幻想,連做網頁都要自己寫javascript了,做遊戲怎麼可能靠拖拉物件就能完成?只是Unity的程式語言跟AS3真的非常非常的像,如果說你跟我一樣是Flex/AS3出身的話,那Unity的語法你很快就上手了,Unity也支援C#語法,並且可以跟VS2008整合,所以如果你是.NET那邊的人,我想Unity的語法也難不倒你

8.免費
哼哼哼!我一直強調,獨立開發者是沒有財力的,所以我們不可能去買那種貴到爆表的AAA級遊戲引擎,而Unity的Indie版就是免費的,專給我們獨立開發者開發,功能已經十分的強悍,上面我提到的全部都有,並非閹割版(Lite版),如果說你有更進一步的需求,你可以花錢升級為Pro版,如果要發佈到手機平台或是遊樂器平台上,則要額外付費,iPhone跟Android的開發工具費用約台幣一萬元,說真的,相較於其他遊戲引擎及這兩個平台未來的商機來說,這並不貴,言下之意就是,你可以用Unity Indie版+iPhone/Android開發工具這樣的搭配,來殺進手機平台內,門檻只要1萬元台幣

遊戲引擎非常的多,有Torque、GameStudioA7、Unreal、ORGE.....,各家引擎都有其過人之處,如果你已經有了心愛的開發工具,就繼續用下去,因為遊戲的精髓在內涵,不在工具,做開發工具之爭的人是最愚蠢的(如html5 vs Flash),不過如果你還沒有選擇你的開發工具,或是你根本不知道有所謂遊戲開發工具的存在,只知道一味的死刻程式碼,然後不得其門而入的話,你可以考慮一下Unity,試用看看,我相信你不會後悔的!

這次的工商服務到此告一段落,我們下週同一時間再見!

52 則留言:

  1. 大大你好!!
    你上面所說的是免費軟體,
    但是未啥我下載下來之後只能適用1個月呢??

    回覆刪除
  2. 你下載的版本錯了
    你要下載indie版本,不是pro版本
    版本是免費的,而且無使用期限,我自己就是用這個版本在開發遊戲

    至於Pro版本,試用期間1個月,購買的話要花約45000台幣

    回覆刪除
  3. 版大我想尋求一下意見
    我只有淺學C#過 只會IF 迴圈 陣列 類別...這些基本的
    而我有買UNITY 3D的這本書
    但是這本書在語法的部分只有交
    如何移動和旋轉
    實在太少了
    所以我去UNITY的官網
    想學他的語法
    可是都是英文.......
    不過我還是努力學一下
    可是......我還是有一堆語法看不懂它是用來做啥的
    在沒人教的情況之下
    我該如何學習
    請大大指點一下我這迷路的新手

    回覆刪除
  4. 唉~
    聽到你的遭遇,我不免自責了起來,因為最近真的是被專案壓得喘不過氣,根本沒時間寫BLOG,更遑論工商服務

    我想你買的那本書,應該就是國內出的唯一一本Unity3D的書,那本書寫得很爛,講難聽點,他只不過是把使用手冊做翻譯,而且還不全.....
    要看那本書,還不如去大陸那邊看教學

    想學Unity,其實學Flash進入障礙會比淺學過C#要來的低,因為Flash的開發流程跟Unity很像,GameObject跟Prefab的觀念也一樣,在物件上下Script的方法也差不多,AS3的語法也Unity的語法很接近

    至於語文的問題,我是真的覺得要加強啦!仰賴好心人翻譯或是有人出書是緩不濟急的,因為這種書很冷門,不會有賺頭,要走程式這條路,英文能力真的是基本配備,這部分要加油喔!

    最後,如果真想學的話,你可以把你的E-Mail給我,我有一套中文的教學,我相信會對你很有幫助,起碼入門沒問題

    Kazuya

    回覆刪除
  5. 首先我要先大大說二聲謝謝
    第一聲 感謝大大的熱心 (在百忙之中還抽空回答我的問題)
    第二聲 感謝大大願意提供一些資訊給小弟我學習

    我的E-Mail
    victory_458@hotmail.com

    回覆刪除
  6. 附註:英文的部分我會聽取大大的意見
    好好加強的!!!!!

    還有....就是對大大感到抱歉...在您這麼忙的時候
    來打擾您 真的很抱歉....

    回覆刪除
  7. 我已經寄出去囉!去收信吧!

    Unity3D是一個我非常看好的技術,如果能把他學好,對你絕對有幫助
    此外,行有餘力的話,建議你可以學習Flex這項技術,不管是找工作還是接案都很吃香

    我的BLOG雖然最近不常更新,但我都會上來看,有問題的話歡迎隨時討論

    Kazuya

    回覆刪除
  8. 作者已經移除這則留言。

    回覆刪除
  9. Flex的技術優@@
    話說 我今天跑去買了ACTION SCRIPT 3.0的書來看@@
    不知道這個舉動是對還是錯?
    因為大大有提到AS3和UNITY的語法很像
    所以我就想說先從AS3看起

    回覆刪除
  10. To Sam
    已經寄給你了
    寫flash game的工程師啊!相當厲害啊!
    希望我的blog不要讓你見笑
    不嫌棄的話多交流吧!

    回覆刪除
  11. To 匿名
    ㄟ~不能說是錯啦!因為確實是很像.....
    我還是會建議你先把中文教學看一看,了解整個遊戲的製程,還有gameObject、prefab和script之間的關係之後,再來研究語法

    要記住一個道理
    觀念永遠是最重要的,寫程式永遠都是最枝微末節的

    回覆刪除
  12. to kazuya
    我知道了
    我會照您所說的去做
    謝謝您的幫忙

    回覆刪除
  13. to kazuya
    大大想請問一下
    不知道大大那裏有攝影機追蹤的腳本媽
    因為我的UNITY裡面沒有....可是影片裡面卻說那是內建的
    就是smooth follow的腳本內容
    不知道大大可以寄給我媽?
    先謝謝大大了

    還有就是....這影片真的讓我受益良多 超感謝大大的

    回覆刪除
  14. 攝影機追蹤?是類似像FPS遊戲那樣的第一人稱視點追蹤嗎?

    回覆刪除
  15. 就是大大您傳給我看的影片
    第3個影片(程式設計篇)
    影片的10分55秒左右的時候
    它有用smooth follow這個腳本

    最近有一件事一直困擾著我
    其實不瞞大大的說
    我最近在做彈珠台遊戲
    可是有一個問題我一直找不到解答
    就是.....假設拉
    我想做一個正方形盒子然後在裡面放一顆球
    (一開始給球一個初速度)
    然後這顆球會在正方形盒子裡面一直碰到牆壁彈來彈去

    我個人猜測是說
    可能是要用碰撞偵測吧
    例如我的球撞到牆壁之後 (偵測到碰撞之後)
    我給它一個語法
    像是給它一個反向的速度
    這樣理所當然求在撞到牆壁之後會彈回來

    只是我不知道語法要怎麼寫

    回覆刪除
  16. 1.smooth follow camera在3rd person controller裡面,這是內建的沒錯

    2.可以直接套用unity3d的物理引擎
    (1)球跟牆壁都設成剛體
    (2)設定collider,裡面可以設定物理碰撞的行為
    你先這樣做做看,看是不是你要的結果

    回覆刪除
  17. 我嘗試了一下
    首先要請大大看一下我的圖片
    http://i687.photobucket.com/albums/vv232/cat14air/x1.jpg
    ---------------------------
    物件5的設定為
    剛體
    ---------------------------
    程式碼:
    當碰撞到物件1
    rigidbody.velocity = Vector3(0,0,-60);
    當碰撞到物件2
    rigidbody.velocity = Vector3(60,0,60);
    當碰撞到物件3
    rigidbody.velocity = Vector3(0,0,60);
    當碰撞到物件4
    rigidbody.velocity = Vector3(-60,0,60);
    重點來了
    我的球一開始會碰到物件1
    然後他會往-Z的方向衝刺
    但是它碰到物件5的時候
    不會彈開

    於是我多了一個語法
    當碰撞到物件5
    rigidbody.velocity = Vector3(60,0,60);
    所以現在球碰到物件5會彈開
    但是不管碰到物件5的哪個部位
    都往同個方向移動
    這並不是我要的動作
    -------------------------------------
    而我所貼的圖片
    當球碰到藍色部位時他會往藍線移動
    當球碰到綠色部位時他會往綠線移動
    這才是我所希望的動作!!!!
    請大大指點我一下
    --------------------------------------
    這是我用的語法
    function OnCollisionEnter(collision : Collision)
    {}

    回覆刪除
  18. 奇怪,為什麼我發了兩次文章上來,最後都會自己不見?
    難道是不能貼程式碼?

    回覆刪除
  19. 不知道呢
    我沒試過
    我想我想要的動作是甚麼了
    是個完全的彈性碰撞
    感覺就像是打磚塊的遊戲那樣
    用一個物件去撞球
    然後球就會被撞出去!!!
    這個彈性碰撞......我真的不會.......

    回覆刪除
  20. 大大可以寄程式碼給我阿
    信箱應該是沒問題
    話說大大給我的影片真的收穫很多
    只是........
    沒有第7集......真想看下去呢!!

    回覆刪除
  21. OK
    那我晚上寄程式碼給你好了

    回覆刪除
  22. 感謝大大您了
    等待晚上的來臨

    回覆刪除
  23. 我收到了感謝大大
    其實我這2天也都在況大陸的網站和大陸的朋友交流
    真的那裏的資源多!!!

    回覆刪除
  24. direction = body.transform.position - pos;
    這行好像有點問題
    它說不知道body

    回覆刪除
  25. 就跟你說要了解每一行程式碼在幹嘛,不能照抄啊!
    body是我這邊的物件名稱,在你那邊要自己改成你那邊的物件名稱

    回覆刪除
  26. 我知道了
    我會仔細去了解的
    抱歉 沒仔細看大大的留言

    回覆刪除
  27. to Kazuya
    之前碰撞問題我解決了
    這次是個比較簡單的問題
    但我沒學過JS語法

    var boomFire : Transform;
    var opop:int=0;
    var kk:String;
    function OnCollisionEnter(collision : Collision) {
    if (collision.gameObject.name == "Shot(Clone)")
    {opop+=5;
    kk=String(my_arry); Instantiate(boomFire,this.transform.position,this.transform.rotation);
    GameObject.Find("ko").guiText.text=kk;
    Destroy(gameObject);
    }
    }
    上面的語法是我原本的想法

    我得的問題是轉換問題
    我現在寫的語法U3D說有錯誤
    錯誤的地方就是數字轉成字串問題?
    我這樣子轉換為何不行?

    回覆刪除
  28. 上面的問題我已經解決了

    想順便請教大大

    限制旋轉角度
    與移動範圍
    的語法我該怎麼寫
    我是有想過IF
    但是就是不知怎麼寫

    回覆刪除
  29. 我只能告訴你邏輯而已,程式碼你要自己去coding跟除錯,這樣才會進步,像上面的例子你就學到型別轉換的技巧與經驗

    先寫一個檢核的function去檢查目前的旋轉角度和移動範圍,用if的方式下條件,至於滿足條件要做什麼行為就看你的需求,然後在update函式裡面去呼叫這支檢核的function,這樣每個frame都會做一次檢核,就能確保你的物件固定限制在某個角度與範圍

    Kazuya

    回覆刪除
  30. 我現在在做彈珠台
    彈彈珠的的按鈕
    我把按鈕賦予鋼體屬性
    然後給個語法
    if (Input.GetKeyDown("b")){
    rigidbody.velocity= Vector3(10,0,0);}
    這個語法可以讓這個物件在碰撞彈珠時
    彈起來
    但是相對的有問題
    因為我的底座是斜的
    所以被賦予鋼體屬性的案件會往下滑
    有沒有方法可以固定住一端

    回覆刪除
  31. 有兩個屬性
    Use Gravity
    如果把這屬性設定為true,剛體就會受到重力影響

    Is Kinematic
    如果把這屬性設定為true,剛體本身就不會被物理引擎所驅動,他的行為將變成你在script裡面用transform來控制,但剛體本身的特性仍然存在,這個屬性通常用於比方說動作遊戲中空中的活動平台(要有剛體特性,但又不能受到物理引擎驅動,不然就全部掉地上了),還有就是需要一端被固定住的剛體


    這兩個屬性你研究看看,應該可以解決你的問題

    回覆刪除
  32. 我研究看看
    謝謝您

    對了想請一下
    每個物件不是都有中心點
    那要怎麼做才能把中心點
    移動到物件的某一端呢

    因為直接改中心點位置的話
    會一起把物件給移動

    回覆刪除
  33. 這是pivot point的問題,unity裡面沒辦法改
    但是有人寫出外掛
    http://solvethesystem.wordpress.com/2010/01/15/solving-the-pivot-problem-in-unity/

    自己研究吧!

    回覆刪除
  34. 感謝大大
    不過我用物理引擎搭配
    子物件
    的方法
    解決了我的問題
    Is Kinematic ~~~!!!
    感謝大大的指點

    回覆刪除
  35. HI
    好久沒來向您請教了
    這次的問題是
    之前您寄給我的坦克車的影片 (真的很有用)
    那影片有下半部媽?
    因為想學習如何讓敵人尋找自己然後進行攻擊

    因為最近想做射擊遊戲

    有的話就太感謝了
    先謝謝您了

    回覆刪除
  36. 沒有下半部,那就是全部了

    你想學習的部分是屬於人工智慧的部分了
    這部分是另外一門領域,你得要了解人工智慧的演算法才行

    以敵人尋找自己進行攻擊來說,最常用的是A*演算法,你得先了解這個演算法後,才有辦法寫出對應的程式

    射擊遊戲的演算法更複雜,有一本書專門講射擊遊戲演算法的,不知道絕版了沒有,你可以去書店找找

    回覆刪除
  37. 你好,不好意思打擾了,因為我目前在學習unity這套軟體,看到你們在討論中有說到unity中文教學,不知道可否跟你詢求

    回覆刪除
  38. 可以啊!
    Email給我,我寄給你

    回覆刪除
  39. 您好, Kazuya 大大。
    目前正在學習unity,也看了那本翻譯的『使用手冊』
    如果方便的話,是否也可以給我討論中的 unity 中文教學呢?
    我的email是 mosula99@gmail.com

    感謝您的幫忙 m(_ _)m

    回覆刪除
  40. To Kathy:

    抱歉,這麼晚才回你,OK的!沒問題!晚上我寄給你

    回覆刪除
  41. 你好 我也是剛開始學習UNITY,搜尋了許多資料,

    方便給我討論中的unity 中文教學嗎?

    我的E-MAIL:annielove99@gmail.com

    謝謝

    回覆刪除
  42. Kazuya您好,在下也是初學,能否也向你索取unity的中文教學呢?
    我的mail:starry827@mail2000.com.tw
    謝謝!

    回覆刪除
  43. OKOK
    抱歉,最近正在忙一個專案,所以很久沒上來看
    我打包一下就寄給兩位

    沒想到我的BLOG竟然是這篇回應最多,真不知該高興還是難過

    回覆刪除
  44. 最近專題要用Unity製作遊戲 真是難阿= =
    想跟你求中文說明?
    lineage32100@gmail.com
    謝謝

    回覆刪除
  45. 看到這邊我好感動 因為Unity又被更多人知道了
    不過感覺版大好辛苦 所以我這邊推薦一個 台灣論壇給大家
    http://forum.unity3d.com.tw/?gclid=COb0rqbT96ICFQazbwodoCVxkg
    我很希望這個論壇也能熱絡起來

    回覆刪除
  46. 這不就是Unity官方論壇嗎?
    唉~不是我在講,如果說官方網站能做好的話,我又何必這麼辛苦?
    官方的論壇跟國外原廠的完全不能比,有的資源甚至是直接轉一個大陸的連結而已,在這種品質下,內容還遠輸大陸U吧,更別提原廠的官網了

    奇銳如果真的要做好unity這塊,售後服務是很重要的,如果說想著軟體可以賣錢,然後教育訓練再賣一次錢,抱著這種一隻羊剝兩次皮的心態,是做不起來的!

    因為unity自從第3版後,免費版的品質跟付費版差太多了,加上Unreal和Crysis現在都推出了免費的AAA級遊戲引擎,也同樣可以跨PC與行動平台,授權方式也比unity好,這使得unity原本的優勢盡失,我不久就會推出新的工商服務介紹UDK,到時大家可以參考參考。

    回覆刪除
  47. Kazuya您好
    看到這篇有點相見恨晚的感覺,
    因為我是直接買了那本中文書來看卻碰到一些問題才發現,
    這本書其實很多地方都寫得很不完整,
    我也可以跟您求一下中文說明嗎?? 希望能夠如期完成自製的遊戲, 謝謝!
    bulmungtw@gmail.com

    回覆刪除
  48. 哈囉,版主你好:D
    最近我也再接觸跟unity相關的資訊
    有看見大大在上面說明unity跟flash的程式寫法相當類似

    所以我想請問一下,像是flash裡的文字動畫可以設定程式讓它倒數,
    那麼unity裡的要怎麼設定呢?
    我試過了類似像GUI texture這類的按鍵,並在上面設定程式,但毫無反應><

    請問你的中文教學有教這個部份嗎?能不能也寄一份說明給我呢??
    謝謝你喔^^
    color5234@hotmail.com

    回覆刪除
  49. Dear 大法師Kazuya,
    不小心看到您在Blog分享許多心得, 除了感動之外還是感動:-)
    最近正想要開始學Unity, 可否也向您索取Unity的中文教學呢?
    我的E-mail是 sky20088858@gmail.com
    謝謝先
    遊戲門外漢敬上

    回覆刪除
  50. 作者已經移除這則留言。

    回覆刪除
  51. Kazuya 您好

    您那份Unity 的中文教學,可以也寄給我一份嗎?

    最近在考慮要用哪個引擎,想先看看您的教學資料

    可能還有些技術上的問題想和您交流交流

    謝謝了^^

    E-mail:mujan5427@gmail.com

    回覆刪除
  52. 這份資料已經過時了,現在unity3.5都出來了,你確定還要嗎?

    回覆刪除