接出來我們使用unity制做第一個小游戲,我恐怕這也是所有unity開發者都十分熟悉的一個類似“HelloWorld”標致的游戲了——滾動小球
一、創建項目(名子自取),創建場景,起名為
二、創建一個地面對象(滑鼠右鍵->3D->Plane),并將其設置為0,0,0,之后把其長寬擴大1倍(即Scale設置為2,1,2)
之后我們想要改變地面對象的顏色須要這樣做:首先在目錄下新建一個文件夾,之后右鍵如圖創建一個并命名為
之后鍵盤拖動此材質到對應的游戲對象上
下邊介紹下Plane游戲對象的組件構成,組件用于指定對象的位置、旋轉、縮放;Mesh組件用于指定該對象是一個哪些類型對象;Mesh用于設置對象形態屬性;Mesh用于設置碰撞檢查(通常會做兩套建模,一套拿來顯示對象具體形象,另一套會簡化用于碰撞測量的模型,比如RPG游戲,人物會用軟膏體作為碰撞測量模型,但FPS類游戲就不行)。我們在點擊Gound步入到設置界面,之后單擊這個位置都會彈出選色卡,最后選擇自己喜歡的顏色就可以了
實現邏輯:
悉心的人會發覺在Plane對象中也會把材質展示下來,這顯然是為了便捷我們快速對應材質并更改(當材質和對象好多時這樣是很便捷的)
三、創建小球,并命名為,指定為0,3,0,同時我們給之前的Plane也起個名子命名為,同時根據相同的方式創建另一個命名為給小球著色
設置小球光滑程度(不讓它反光太厲害)
同樣的方式地面也可以設置
最終療效如圖:
unity引擎外置了碰撞估算和測量,我們只須要指定碰撞后須要做哪些(如主角扣血或死亡)
四、為小球添加鋼體組件(即重力、摩擦力、彈力)
點擊小球對象->Add->->
之后運行游戲即可見到小球落在了地板上
五、給小球添加滾動風波
兩種方式創建:
法一:點擊小球->Add->New->填入文件名->點擊創建,即可在下創建對應,且早已與小球對象關聯
法二:在下新建文件夾,右鍵->->C#->命名,之后將此拖到小球對象上即可邦定
注意:組件前有一個打鉤選項,代表組件是否要使用,請保證使用時是選中狀態
雙擊創建的文件即可用vs打開(確保此文件名與類名一致),代碼中start方式用于游戲開始前的初始化工作,方式用于游戲運行中的更新操作(每幀調用一次,每秒60幀)
添加測試代碼:
將鋼體組件與腳本關聯,便于后續進行業務邏輯的操作
方式一:使用代碼
rd = GetComponent();
方式二、拖動鋼體組件到簡本,即拖動到如圖位置(但這些方式使用較少)
之后我們再給鋼體添加一個往右的力(不指定大小默認是1N),注意要再中添加此代碼,這樣小球就會仍然運動
假如定義鋼體時設為則不會顯示對應設置,同時也未能通過拖放綁定鋼體
為小球設置一個自定義大小的力
rd.AddForce(new Vector3(10, 0, 0));
六、通過鼠標控制小球的滾動
獲取鼠標左右方向輸入(按下A或方向左鍵,返回0~-1之后仍然為-1;按下D或方向右鍵,返回0~1之后仍然為1;為何要有一個從0到1的過程?由于數學中物體運動時有一個加速度的療效)
float h = Input.GetAxis("Horizontal");
Debug.Log(h);
之后我們將鼠標輸入值形參到力中
float h = Input.GetAxis("Horizontal");
rd.AddForce(new Vector3(h, 0, 0));
同理獲取按鍵前后方向輸入(按下W或方向上鍵,返回返回0~-1,按下S或方向下鍵,返回0~1)
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
rd.AddForce(new Vector3(h, 0, v));
假如認為小球滾動的太慢,可以改變力的大小,如
rd.AddForce(new Vector3(h, 0, v)*10);
若果不想用WASD去控制上下左右,可以在這兒設置:->Input->Axes->/(其中與我們代碼中floath=Input.("")的相對應)
七、調整單反位置(使視野愈發寬闊)且追隨小球
如圖,在Scene面板下調整單反的高度和旋轉度(即帶動紅色箭頭往上一些,旋轉黃色環使單反朝下一些),之后將小球置于地板上(不要一開始增長了,注意小球本身半徑為1m,所以設座標為0,0.5,0)
給單反添加腳本(Add)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowTarget : MonoBehaviour
{
public Transform playTransform;
public Vector3 offset;
// Start is called before the first frame update
void Start()
{
playTransform = GameObject.Find("Player").GetComponent();//獲取小球的初始位置
offset = transform.position - playTransform.position;//獲取初始時小球和相機間的距離
}
// Update is called once per frame
void Update()
{
transform.position = playTransform.position + offset;//相機的位置隨小球的位置改變
}
}
可以看見滾動小球時單反會隨著一起動
八、添加院墻避免小球落到地面以外的地方
新建Cude,起名為Wall(注意位置為0,0.5,0),并拉伸使其布滿一邊(如這兒縮放比是1,1,20),之后放在地面的各邊(位置變為:10,0.5,0),并設置(不光滑、顏色)
之后我們ctrl+d進行復制,制造另外的墻,對邊直接聯通過去即可,領邊設置旋轉讀書為90°即可
假如認為邊上的棱角不好看可設值任意兩個對邊寬度為21
這樣小球在滾動時就不會掉到外邊去了
為了便捷,我們將所有和場景有關的對象放在一個空對象下滾動摩擦力方向判斷,便捷后期對象的管理,我們新建一個鍵盤右鍵->Empty,命名為Env,之后reset一下(這一步很重要,不做會造成場地錯亂),之后將Wall和放在此對象之下
八、制作一個最簡單的類似貪吃蛇的游戲,小球類比貪吃蛇,六面體類比食物
新建Cude,命名為Food,縮放比為0.5,0.5,0.5,旋轉度數隨便,設置(不光滑、顏色)。創建預制體文件夾,將剛剛創建好的Food拖到該文件夾中,這樣此Food就可以作為模板多次使用且更改配置只需更改此模板即可
使用預制體創建相同類型游戲對象滾動摩擦力方向判斷,技巧一:在面板,直接拖到游戲場景中;方式二:直接復制面板的Food(推薦,由于可以保留位置等屬性)(預制體和其子對象,可以理解為類和對象的關系)
更改面板下預制體屬性會影響所有Food屬性,但更改下某Food屬性只會更改該對象的屬性
假如想讓一個子對象的屬性賦給預制體,可旋轉如圖ApplyAll
為預制體設置腳本,便于實現Food旋轉的功能,設置Food旋轉(1s旋轉60此,每次向下旋轉1°)
查看文檔:Help->Unity/API
英文文檔:Unity用戶指南2020.3(LTS)-Unity指南
為小球()設置碰撞檢查邏輯,在腳本下新建三個方式,如圖:
:碰撞發生了(即兩個物體剛才接觸)
:碰撞進行中(即兩個物體接觸中)
:碰撞結束了(即兩個物體脫離接觸)
添加一個Food標簽,之后將預制體的Tag設置因此標簽(設置標簽是為了批量處理某一些相同標簽的對象,如這兒是為了判定小球碰撞到了什么物體)
當小球碰撞到標簽為Food的物體時,銷毀被碰撞物體
但我們在實際操作過程中會發覺,當碰撞后小球會被Food抵擋一下,特別影響游戲體驗,所以我們改用觸發檢查(即不會發生碰撞,小球會穿過物體)
將預制體的碰撞器更改為觸發器,這樣就不會執行方式了
并將邏輯代碼改為在中調用
九、計分(每吃一個Food計1分)和勝利提示
在腳本中添加計數變量
創建UI組件以顯示分數,右鍵->UI->->Text即可,之后切換到2D模式下,雙擊隨后,如圖,所有的UI組件就會置于下,用于UI的風波處理(如點擊等)
調整文字居中顯示
調整文本框位置為右上角(右側的設置是為了保證不管屏幕寬度多長一直都在右上角)調整字體大小和文本內容
之后在代碼中定義一個Text對象,并在小球吃食后將分數復制到Text
使用代碼將對象與之前創建的文本框綁定
創建勝利提示:再創建一個Text(同上),置于屏幕中央,調整下字體顏色,之后編碼如下
十、打包發布
File->Build->AddOpen,假如右多個場景則將其拖到大文本框中,默認顯示第一各場景,其他場景須要代碼調整才能跳轉
選擇發布平臺:
之后點擊Build即可,之后會生成如下文件
游戲運行后默認是全屏顯示
假如想窗口顯示,可在中設置
假如想在聯通端發布,須要下載相關模塊,打開,勾選相關模塊下載
后續操作同理