Unity3D遊戲開發初探

2022-09-02 09:57:06 字數 3666 閱讀 4914

(1)如何在遊戲指令碼程式中建立物件而不是一開始就建立好物件?->使用gameobject的靜態方法:createprimitive()

view code

其中在createcube方法中,使用gameobject.createprimitive方法來建立cube型別的遊戲物件例項,設定了它出現的座標並為它增加剛體元件。這裡可以看下addcomponent方法,它的引數是乙個泛型,也就是說我們在屬性面板中看到的那些元件,例如剛體、音訊源甚至指令碼等元件物件都可以通過addcomponet方法來動態地新增。現在來看看在遊戲中點選滑鼠左鍵建立cube物件的效果:

(2)細心的讀者會發現,當我們建立了無數個cube物件之後,計算機的記憶體佔用率會逐步上公升。機智的你肯定會想到,適時銷毀建立的遊戲物件,釋放記憶體資源。不要擔心,unity3d為我們提供了乙個非常方便的方法:destroy()。這個函式提供了兩個過載:第乙個你可以直接傳遞乙個遊戲物件的id(比如我們在上個例子中建立了乙個plane,它的id也為plane);第二個你可以傳遞兩個引數,乙個是剛剛提到的遊戲物件的id,另乙個是延遲銷毀的秒數(也就是說可以在規定的秒數之後再從螢幕中消失,從記憶體中銷毀);

下面我們重新修改一下剛剛的addforce指令碼為如下**:

view code

這裡我們將銷毀遊戲物件的**封裝成了乙個方法:destroygameobject(),它首先通過gameobject.find方法找到指定id的遊戲物件,然後呼叫銷毀遊戲物件的方法destroy將其銷毀掉,這裡使用了第二個過載,為其傳遞了乙個2秒的延遲時間。也就是說,當我們點選滑鼠左鍵後2秒,plane物件才會被銷毀,我們的sphere球體物件便會跌落深淵!現在我們來看看效果如何:

在預覽效果的同時,你可以觀察左側hierarchy中的物件列表,plane在什麼時刻消失了?

好了,預備知識到此結束,現在我們真正開始crazysphere(簡稱:cs,聽起來高大上吧,麼麼嗒!)—「瘋狂擊箱子」遊戲的開發之旅!

既然我們的「cs」是擊箱子,木有箱子怎麼能行呢!現在,我們就來建立一些箱子,作為我們擊打的物件。

首先,考慮到要初始化的箱子足足有16個,我們需要在程式中來建立這些箱子,並將它們放在plane中,組成箱子牆,讓我們的小球來擊打。

(1)在hierarchy中create以下物件:乙個direction light,乙個plane;將plane的position設定為(0,1,-6),這樣看起來清楚一點;

(2)準備工作:

①在assets中create以下資料夾(folder):乙個images資料夾用來存放貼**件,乙個musics資料夾用來存放背景**和音效***,乙個scripts資料夾用來存放c#指令碼檔案,見下圖所示:

最後,按照上面的步湊為plane增加audio source,將其選擇為bomb作為初始化音效。

④在scripts中create兩個c# script,乙個命名為initscene,另乙個命名為autodestroy。initscene指令碼用於初始化遊戲場景,也就是4*4的箱子矩陣。而autodestroy指令碼則用於銷毀超出主攝像機可視範圍的遊戲物件,也就是當我們的小球或被擊中的箱子超出plane的地面範圍或跌落後就將其自動銷毀。

(3)首先來編寫autodestroy指令碼,利用我們在 預備知識 裡邊學到的自動銷毀物件的方法。這個autodestroy指令碼是需要附加到需要自動銷毀的遊戲物件上才會有意義,所以後邊會在初始化場景的主指令碼中為自動建立的物件附加此指令碼(利用addcomponent提供的泛型方法)。

view code

(4)現在我們來編寫initscene指令碼,這個是重點!編寫完成後,把此指令碼附加到main camera物件中!

view code

現在我們一一來分析這段指令碼**:

①createcubes()方法定義了初始化4*4個箱子的實現過程,每迴圈一次通過createprimitive建立cube型別的立方體,然後為每個立方體設定position座標、增加剛體元件、增加指令碼使其能夠自動銷毀以及為其渲染貼圖。

(6)但是大家是否覺得我們的遊戲背景太單調了,沒關係,unity3d為我們提供了skyboxes-天空盒子,讓我們的背景一秒變為燦爛的藍天!(有關天空盒子的詳細內容請參閱參考文獻中關於天空盒子的介紹,這裡不再闡述)這裡我們向場景中新增乙個sunny的天空盒子:

①在assets處單擊滑鼠右鍵,選擇import package->skyboxes,在彈出的選擇框中選擇sunny1的mat、與sunny1有關的tif資源。這裡注意不要將全部的天空盒子都導進來,那樣檔案會很大!

②點選主選單欄edit->render settings,在右側的屬性欄中找到skybox material:

單機右側的選擇按鈕,在彈出的選擇框中即可看到我們剛剛匯入的sunny1這個天空盒子,雙機選中它,這樣我們就讓遊戲背景一秒變為陽光燦爛的藍天,是不是心曠神怡啊!

(6)現在,我們再來看看遊戲效果:是不是變為藍天啦?這樣,我們的crazysphere v1.0就開發好了!

不知不覺之間,已經寫了四篇關於unity3d的學習筆記了,同時這也是我的第乙個系列的博文,對我的部落格生涯具有重要的意義,再次感謝給我鼓勵的園友們,讓我作為乙個新人倍感榮幸。另外,本文是基於傳智播客的unity3d的兩次公開課為基礎,整理而成的,衷心感謝傳智播客以及楊中科的分享,還有老楊的鼓勵。馬上就要開學了,又要回成都了,苦逼的研究生生涯還得繼續,好想早點畢業啊!被學校派到外邊實習,老師(實驗室指導老師,非我的導師,我的導師還是蠻不錯的)也不准時發工資,每天還幹的累死累活的。但是,還是想在此祝願各位園友碼年吉祥,2014越碼越健康

明天就是我外婆70歲的生日了,在此也祝願她老人家生日快樂,身體健康!

(1)傳智播客unity3d公開課:

(2)xiexuan2007,《unity3d天空盒》:

(3)丁小未,《unity3d開發類似保齡球遊戲》:

出處:

Unity3D遊戲開發

入門級unity安裝教程 一 unity五大面板 unity3d的介紹 1 介面 選單 面板 元件 unity5.x 編輯器介紹 unity開啟篇 一 滑鼠右鍵 wsadeq前後左右上下移動 shift加速移動 滑鼠右鍵旋轉檢視 滑鼠中鍵移動檢視 alt 右鍵縮放 alt 左鍵旋轉物體視角 q移動場...

Unity 3D遊戲開發導學

策劃 美工軟體工程師 測試工程師 客服等.unity是一款遊戲引擎 遊戲引擎 一款遊戲最最最核心的 程式框架。包含以下系統 渲染引擎,物理引擎,碰撞檢測系統,音效,指令碼引擎,動畫系統,人工智慧,網路引擎,以及場景管理。使用遊戲引擎,開發者可以重用已有的核心技術,將精力集中在遊戲邏輯和設計上,從而簡...

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...