本人目前大一,雙非一本,謹以此博客,記錄日后的unity學習程序與演算法訓練,希望能同大家一起進步!也希望三年后回過頭來能看到一個優秀而拼搏的自己!
話不多說,上我的第一個demo(雖然是跟著視頻做的)就是一個簡陋版的貪吃蛇啦!
首先是添加最基礎的scene,我們添加plane,player,再添加幾個cube然后通過改變他們的引數來控制它們的大小及形狀,需要注意的是,為了讓我們的每一個游戲物體都看起來生動,我們需要為他們添加材質,
在Project操作框下面的Assets里面新增一個檔案夾Mretrails來存放我們所有游戲物體所需要使用到的材質,如圖,我已經添加好了player,plane以及food的材質,

我們可以在每個材質的屬性里面更改它們的顏色,光滑度,陰影等引數,設定成我們需要的大小之后,我們需要通過拖拽的方式將我們的每個材質逐一對應地作用到我們的游戲物體上,
之后我們的每個游戲物體就具有自己的顏色跟某些特性啦,

雖然我的很簡陋,不過湊合著看,這就是最簡陋的效果(doge),
而后,我們需要對我們的player給它添加上一個Rigidbody組件,這個組件的意思是3D剛體組件,通過將它添加到我們的某個游戲物體上,那么該物體就能會擁有最基礎的物理屬性,比如重力,
之后,我們就可以通過script來控制我們的剛體組件從而控制我們小球的運動,
控制小球運動有很多種形式,我們可以通過控制unity自帶的軸控制 ,也可以直接賦予小球恒定的速度來控制他的運動,這里的話,我是通過控制軸來控制小球的運動,也就是通過鍵盤的w,s,a,d這四個按鍵來控制,
首先我們需要在Assets里面新增一個scripts的檔案夾來存放我們在游戲開發程序中的代碼,然后我們在scripts檔案夾里面新增一個c#script,命名為player,用它來控制我們的player也就是小球的邏輯表現,
下面就是控制小球運動的代碼,
首先我們定義一個公開變數 public Rigidbody rd,用它來指定我們小球的剛體組件,

然后,我們通過如下代碼來控制小球的運動,

我們在unity自帶的Update方法里面寫進如上代碼,定義一個變數h來獲得我們的水平軸,也就是左右方向,然后定義一個變數v來 獲得我們的垂直軸,控制前后方向,
通過剛體的AddForce組件來獲得力,Vector3表示一個三維向量的力,即vector3(左右,上下,前后),然后將我們的h跟v賦值到Vector3里面,就大功告成了!在這之后,你的player小球就會擁有移動的能力啦,是不是很厲害呢(bushi
因為我們需要做的是一個類似于貪吃蛇的小游戲demo,所以在這之后,我們應該做什么呢?沒錯,就是創建一些食物來供我們的player吃,我們將其稱為food,由于博主也是剛剛入門,所以food就是用一些完全一致的cube來充當,在這里,我們又將接觸到新的概念——預制體,
什么是預制體呢?
在Unity3D里面我們叫它Prefab;我們也可以這樣理解:當制作好了游戲組件(場景中的任意一個gameobject),我們希望將它制作成一個組件模版,用于批量的套用作業,例如說場景中本質上要重復使用的東西,比如:敵人、士兵、子彈或者一個磚塊完全相同的墻體,這里說本質是因為默認生成的prefab其實和模版是一模一樣的,就像是克隆體,但生成的位置、角度或者一些屬性不同(這個就好像c++里邊的類一樣);
這樣看來,Prefab對于我們開發unity3d相當重要,
好了,下邊開始介紹如何制作Prefab,
首先我們要在Assets里面新建一個空的檔案夾,將它命名為Prefabs,然后在Scene里面新建我們需要的游戲物體,將它拖拽到我們的Prefabs里,就建成一個預制體了,之后我們可以直接在我們的Prefab里面將我們放進去的游戲物體拖到我們的場景中,就形成一個個擁有相同屬性的food啦,如下圖,

所有黃色的小方塊就是我們的food,之后我們對它們在場景界面進行的所有操作,只需要更改Prefabs里面的food就可以了 ,非常方便,為了在對它們書寫腳本時一致,我們還需要將Prefabs里面的food的標簽添加為Food,這樣我們在書寫腳本時,只需要獲取到預制體上面的Food標簽,就可以對他們所有進行控制了,

如上圖,我們將預制體的Tag定義為Food,
在游戲中,大部分具有效果的道具它們都是比較特別的,比如會旋轉,具有光效,由于剛入門,在這里我們就只設定了旋轉效果,新建一個代碼頁,命名為Food,我們用它來控制我們的食物,我們通過transform類來獲取到Rotate這一函式,也就是自身的旋轉函式,Transform.Rotate傳入了一個歐拉角三元組,只有一個引數“角度”,我們用它來使物體每秒自己旋轉一定的角度,代碼如下:

這個代碼的效果就是讓我們的食物每幀順時針地旋轉5° ,
解決了player的移動,food的動效,接下來我們要考慮的,就是游戲最核心的部分,控制我們的player吃到食物后并且消除它,這里又要引入unity API的兩個重要組件:碰撞器與觸發器,
要產生碰撞必須為游戲物件添加剛體(Rigidbody)和碰撞器,剛體可以讓物體在物理影響下運動,碰撞體是物理組件的一類,它要與剛體一起添加到游戲物件上才能觸發碰撞,如果兩個剛體相互撞在一起,除非兩個物件有碰撞體時物理引擎才會計算碰撞,在物理模擬中,沒有碰撞體的剛體會彼此相互穿過,
物體發生碰撞的必要條件:兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體,
碰撞器是觸發器的載體,而觸發器只是碰撞器身上的一個屬性,
- 當Is Trigger=false時,碰撞器根據物理引擎引發碰撞,產生碰撞的效果,可以呼叫OnCollisionEnter/Stay/Exit函式;
- 當Is Trigger=true時,碰撞器被物理引擎所忽略,沒有碰撞效果,可以呼叫OnTriggerEnter/Stay/Exit函式,
如果既要檢測到物體的接觸又不想讓碰撞檢測影響物體移動或要檢測一個物件是否經過空間中的某個區域這時就可以用到觸發器,
例子:
碰撞器:汽車被撞飛、皮球掉在地上又彈起效果,
觸發器:人站在靠近門的位置門自動打開效果,
那在這里,很明顯我們需要我們的食物變成觸發器,即:在發生碰撞后,沒有碰撞效果,直接吃掉食物,那食物又該怎么吃,我們采用最簡單的辦法,直接將這個物體銷毀,就能讓我們的food看起來是被吃掉一樣啦,
所以我們的代碼設計思路是:在player與food發生碰撞時,利用觸發檢測,銷毀掉食物,我們的吃小球方法就完成啦,代碼如下,

具體的語法就不再詳細解釋啦,這里我們呼叫unity自帶的方法OnTriggerEnter,在發生觸發時,如果觸發物體的標簽是食物,就用Destory這一函式摧毀掉該物體,over~
在游戲中,還有一個相當重要的API,就是我們的main camera,它控制著我們進行游戲時的主視角,在這個游戲中,我們需要讓我們的游戲物體始終處在視野中央,于是我們又需要用新的腳本來控制我們的相機的移動,這里其實是一個很簡單的數學演算法,保證我們相機跟游戲物體的坐標相對不變,就可以實作讓我們的player始終處在視野中央,新建代碼頁,來控制我們主相機的跟隨,

最后的部分,為了讓我們的demo更像一個真正的游戲,我們給它添加兩個UI文本,一個來顯示分數,一個顯示勝利條件,
代碼如下,


至此,我們這個極簡版的貪吃蛇demo就算完成啦,說難不難,但對于剛接觸unity的同學來說,這種入門demo其實是很適合新手的,這也是本博主的第一個游戲demo,大喊一聲:好耶!
也希望以后能做出更多更優質的demo,跟大家一起進步,干巴爹!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398519.html
標籤:其他
下一篇:【Unity 優化篇】| 優化的基本概念/意義,Unity Profiler工具的使用 以及 性能分析的方法【精華收藏】
