Unity的學習(二):打磚塊

一、新建項目

在這裏插入圖片描述

創建成功後,進入瞭如下界面。
在這裏插入圖片描述

二、場景的設計

在Hierarchy中鼠標右鍵創建Plane(地面)遊戲物體,將其Transform組件重置,並將遊戲物體重命名爲Ground,如下圖所示。
在這裏插入圖片描述

調整地面的大小。
在這裏插入圖片描述

在Assets下創建文件夾Materials,並在其中創建Ground的Material(材質)並在Ground(地面)遊戲物體上設置材質。如下圖所示。(Smoothness爲光滑度)
在這裏插入圖片描述

三、創建磚塊和磚塊的prefab(預製體)

右鍵創建Cube,並給該遊戲物體添加Rigidbody(剛體)組件,然後創建在Assets下創建Prefabs文件夾,將Cube拖入到Prefabs文件夾下將Cube遊戲物體設置爲prefab(預製體)。如下圖所示。
在這裏插入圖片描述

Rigidbody:當遊戲物體添加了剛體組件,會有物理效果,如重力。
prefab:預製體,相當於模板,當修改預製體時,由此prefab生成的實例也會進行相同的變化。

四、創建牆

通過預製體來創建牆,在Unity中距離的單位爲米,而Cube的長度爲1,即是1米,當移動時,我們可以按住ctrl鍵然後通過按住箭頭來移動固定的距離。創建牆如下圖所示。
在這裏插入圖片描述

五、創建子彈

通過預製體來創建子彈的實例,因爲子彈會有很多個,所以需要用到預製體,並且通過代碼來控制子彈的生成。創建子彈如下圖所示。
在這裏插入圖片描述

六、創建C#腳本

在Assets下創建Scripts文件夾,並且創建命名爲Shoot的C#腳本文件,然後將腳本文件拖入Main Camera作爲一個腳本組件。如下圖所示。
在這裏插入圖片描述

七、子彈的生成

打開Shoot腳本,並定義一個屬性public GameObject bullet;,保存,回到Unity,可以看到Main Camera遊戲物體中的腳本組件出現了變化,這時可以將Prefabs中的Sphera預製體拖入其中,給其賦值。具體如下圖所示。
在這裏插入圖片描述

在Shoot的Update方法中加入實例化代碼用於控制子彈的生成。

// 每幀調用一次
    void Update() {
        //Input.GetMouseButtonDown(0):鼠標左鍵按下
        if (Input.GetMouseButtonDown(0)) {
            //transform:當前腳本所在遊戲物體的transform組件
            //transform.position:這裏取得的是當前遊戲物體(Camera)的位置
            //transform.rotation:當前遊戲物體的旋轉角度
            GameObject.Instantiate(bullet, transform.position, transform.rotation);//生成bullet實例
        }
    }

此時運行,點擊左鍵,觀察Hierarchy發現,有Sphere實例生成。如下圖所示。但是觀察Game視圖發現,子彈並沒有發射出去。
在這裏插入圖片描述

八、給子彈生成初速度,使其能夠發射出去。

我們可以通過Rigidbody(剛體)來給子彈施加速度,這樣就可以發射了。
在這裏插入圖片描述
在Shoot中定義一個屬性public float speed=5;
並在Update方法中獲取Rigidbody組件,並賦予向前的速度。

//獲得Rigidbody(剛體)
Rigidbody rgd = b.GetComponent<Rigidbody>();
//給其賦一個向前的初速度
rgd.velocity = transform.forward * speed;

這時我們運行下看看效果,如下圖所示。
在這裏插入圖片描述
通過運行,我們發現,相機的距離過近需要調整相機距離,並且子彈發射出去進行了翻滾,我們可以通過鎖定它的y軸來讓它不進行翻滾。如下圖所示。
在這裏插入圖片描述

九、控制相機的上下左右移動

創建C#腳本Movement,並將其掛載到Main Camera上。如下圖所示。
在這裏插入圖片描述

在Movement腳本中添加屬性public float speed = 3;
並且在Update方法中添加上下左右移動代碼

void Update() {
        //獲取左右鍵的按下
        float h = Input.GetAxis("Horizontal");

        //獲取上下鍵的按下
        float v = Input.GetAxis("Vertical");
        //移動
        //Time.deltaTime:時間修正值
        transform.Translate(new Vector3(h, v, 0) * Time.deltaTime * speed);
    }

十、運行

對子彈速度進行一個調整。
在這裏插入圖片描述

運行效果如下圖所示。
在這裏插入圖片描述

十一、代碼

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shoot : MonoBehaviour {

    public GameObject bullet;

    public float speed = 5;

    // 在第一幀更新之前調用Start
    void Start() {
        
    }

    // 每幀調用一次
    void Update() {
        //Input.GetMouseButtonDown(0):鼠標左鍵按下
        if (Input.GetMouseButtonDown(0)) {
            //transform:當前腳本所在遊戲物體的transform組件
            //transform.position:這裏取得的是當前遊戲物體(Camera)的位置
            //transform.rotation:當前遊戲物體的旋轉角度
            GameObject b=GameObject.Instantiate(bullet, transform.position, transform.rotation);//生成bullet實例

            //獲得Rigidbody(剛體)
            Rigidbody rgd = b.GetComponent<Rigidbody>();
            //給其賦一個向前的初速度
            rgd.velocity = transform.forward * speed;
        }
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Movement : MonoBehaviour {

    public float speed = 3;

    // Start is called before the first frame update
    void Start() {

    }

    // Update is called once per frame
    void Update() {
        //獲取左右鍵的按下
        float h = Input.GetAxis("Horizontal");

        //獲取上下鍵的按下
        float v = Input.GetAxis("Vertical");
        //移動
        //Time.deltaTime:時間修正值
        transform.Translate(new Vector3(h, v, 0) * Time.deltaTime * speed);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章