我們先看一下游戲效果:
第一步:製作桌面效果
分析:
-
grand 創建
Hierarchy面板下,右鍵->3D Object->Plane;改名爲grand
添加Material
默認大小爲10m -
Material 材質球
在Project面板下,右鍵->Create->Material
注:將創建的材質球放在Assets文件夾下的Materials文件夾內方便管理,Materials是自己創建的 -
Cube
Hierarchy面板下,右鍵->3D Object->Cube;
按CTRL+D可以快速複製
默認大小爲1m
根據Plane的大小,4個Cube的參數分別爲:
-
Cubes
爲了方便管理,在 Hierarchy面板下,右鍵->Create Empty
將所有的Cube放在Create Empty下
第二步:製作小球
在Hierarchy面板下創建一個Sphere。
添加剛體組件。
我們先了解一下什麼是剛體組件
剛體:通過物理模擬改變物體的位置。
意思是,讓遊戲物體有了物理的一些性質,我們來演示一下,當一個物體添加剛體組件後,會怎樣。
我們可以看到,遊戲運行後小球會擁有重力而落下。
剛體組件在設計遊戲物體之間的碰撞,移動等物理效果時,會提供很大的便利。
第三步:讓小球移動
在Script文件夾下添加一個c#腳本,並讓它賦給小球。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ball : MonoBehaviour {
private Rigidbody rd; //創建一個剛體
// Use this for initialization
void Start () {
rd = GetComponent<Rigidbody>(); //得到當前遊戲物體的剛體組件
}
// Update is called once per frame
void Update () {
//水平移動(左右)
float h=Input.GetAxis("Horizontal");
//垂直移動(前後)
float v = Input.GetAxis("Vertical");
//給剛體一個力,可以使遊戲物體前後左右移動
rd.AddForce(new Vector3(h, 0, v));
}
}
注:控制運動的鍵,就是我們平時玩遊戲時a \ d \ w \ s鍵
第四步:創建食物,並令其旋轉
1.創建一個Cube創建材質改爲黃色,使其旋轉,立在地面上。
將Transform中的Rotation屬性全改爲45即可。
2.另Cube稱爲預製體。
- 預製體創建,在Assets文件夾下創建Prefabs文件夾,將創建的Cube拖入即可。
- 預製體特性:可以創建多個一摸一樣的物體,更改預製體,所有的物體也會跟着發生改變
3.在預製體文件夾內的Cube上添加一個腳本,並編寫。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rate : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//使用Transform.Rotate以多種方式旋轉游戲對象。旋轉通常作爲歐拉角,而不是四元數。
//new Vector3(0, 0, 3)使物體以z爲軸心旋轉,數值越大旋轉越快
transform.Rotate(new Vector3(0, 0, 3));
}
}
4.CTRL+D就會複製多個預製體,另這些預製體移動到小球周圍。
注意,當Cube旋轉後的座標系也會跟着旋轉,這是我們只需要調整它的座標系爲世界座標系即可。
演示一下:
現在小球與食物碰撞並沒有發生任何變化,下面我們讓它們產生一些變化。
第五步:碰撞檢測
首先我們將預製體的標籤改爲“eat”;
然後在代碼中添加
void OnCollisionEnter(Collision collision)
{
//如果標籤爲eat
if (collision.collider.tag=="eat")
{
//就銷燬這個遊戲物體
Destroy(collision.collider.gameObject);
}
}
效果演示:
我們發現相機並沒有跟着小球一起運動,這樣容易找不到球的位置,這時我們就需要相機跟着球運動。
第六步:相機跟隨
在Main Camera上添加一個腳本組件。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class follow : MonoBehaviour {
public GameObject followed;
private Vector3 d;
// Use this for initialization
void Start () {
//計算相機與小球的相對位置 利用高中數學的向量知識來計算
d = followed.transform.position - transform.position;
}
// Update is called once per frame
void Update () {
//利用相對位置不變,使相機跟着小球移動
transform.position = followed.transform.position - d;
}
}
演示效果:
現在離我們的目標越來越近了,不過還差一步,就是沒有“喫“的效果。
碰撞檢測,運用的是物理效果的碰撞,並沒有使小球喫到食物,下面我們來稍微改一下。
第七步:觸發器
將圖中的方框勾選上就會檢測不到碰撞。
注意,這是預製體食物的,不是小球的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ball : MonoBehaviour {
private Rigidbody rd; //創建一個剛體
// Use this for initialization
void Start () {
rd = GetComponent<Rigidbody>(); //得到當前遊戲物體的剛體組件
}
// Update is called once per frame
void Update () {
//水平移動(左右)
float h=Input.GetAxis("Horizontal");
//垂直移動(前後)
float v = Input.GetAxis("Vertical");
//給剛體一個力,可以使遊戲物體前後左右移動
rd.AddForce(new Vector3(h, 0, v));
}
//碰撞檢測
void OnCollisionEnter(Collision collision)
{
//如果標籤爲eat
if (collision.collider.tag=="eat")
{
//就銷燬這個遊戲物體
Destroy(collision.collider.gameObject);
}
}
//觸發檢測 沒有物理效果
void OnTriggerEnter(Collider collider)
{
if (collider.tag == "eat")
{
Destroy(collider.gameObject);
}
}
}
這樣就不會在碰撞時產生物理效果了。
第八步:編輯UI界面
1.計數器
在boll代碼中添加:
2.當小球喫完後會在屏幕中顯示”你贏了!!”
在代碼中添加:
最終展示: