天天看點

Unity3d學習 第一天 使用Unity3d的實體引擎制作 小球打磚塊 遊戲

做一個打磚塊的遊戲,最終的結果是如下圖所示

Unity3d學習 第一天 使用Unity3d的實體引擎制作 小球打磚塊 遊戲

這個遊戲很簡單,主要就是利用了Unity3d的實體引擎,有興趣的朋友可以先自己做一下,遊戲雖然簡單,但我中間遇到很多坑,看看有沒有人能一下做好。

一、建立四個面cube

Unity3d學習 第一天 使用Unity3d的實體引擎制作 小球打磚塊 遊戲

這個注意

(1) 不要設定剛體(RigidBody屬性,這個屬性會導緻剛體之間的碰撞)

二、設定四個面Materials為彈性材料,全反射

定義好材質Material為彈性材料 Assets->右鍵->Create->Physic Meterial

屬性設定如下:

Unity3d學習 第一天 使用Unity3d的實體引擎制作 小球打磚塊 遊戲

Bounciness=1 按照我的了解就是籃球自由落體到地面的會彈高度,如果是1就是和原來一樣高。

Friction是摩擦力,這裡都設為0

三、小球的材料以及其他的磚塊的材料也使用上面定義的材質。

Unity3d學習 第一天 使用Unity3d的實體引擎制作 小球打磚塊 遊戲

Box Collider裡面設定的是碰撞的彈性材質

RigidBody裡面的Mass是品質的意思,原來的數值是1,這裡改成100000,不然後面會遇到小球碰撞多次後,速度會逐漸慢下來的效果。這個原因我找了很久。

其原因是碰撞後,磚塊就會有一點速度,這個速度就來自于小球,是以小球會越來越慢。

磚塊設定好以後,拖入Assets中變成預制體(prefabs)

四、建立剛體小球

屬性如下圖所示

Unity3d學習 第一天 使用Unity3d的實體引擎制作 小球打磚塊 遊戲

主要就是彈性材質

然後編寫初始化小球的代碼,主要就是給小球增加一個初始的力

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class InitBall : MonoBehaviour

{

    private Rigidbody rbody;

    public float x ;

    public float y ;

    // Start is called before the first frame update

    void Start()

    {

        rbody = GetComponent<Rigidbody>();

        Vector3 force = new Vector3(x, y, 0);

        rbody.AddForce(force);

    }

    // Update is called once per frame

    void Update()

    {

    }

}

x,y需要在小球屬性那裡初始化

五、初始化場景,自動生成磚塊的位置,使用預制體prefabs

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class InitScene : MonoBehaviour

{

    public GameObject obj; //傳入的預設

    // Use this for initialization

    void Start()

    {

        for (int i = 0; i < 5; i++)

        {

            for (int j = 0; j < 8; j++)

            {

                Vector3 vec = new Vector3(i * (float)1.5, 3 - j * (float)1.1, 0);

                //參數一:是預設 參數二:執行個體化預設的坐标  參數三:執行個體化預設的旋轉角度

                GameObject instance = (GameObject)Instantiate(obj, vec, transform.rotation);

                instance.GetComponent<Renderer>().material.color = RandomColor();

                //這裡 transform.position,transform.rotation分别代表的是相機和坐标和 旋轉角度

            }

        }

    }

    public Color RandomColor()

    {      //r、g、b分别随機從0-1之間取值

        float r = Random.Range(0f, 1f);

        float g = Random.Range(0f, 1f);

        float b = Random.Range(0f, 1f);

        //執行個體化一個color,并把r,g,b傳進去

        Color color = new Color(r, g, b);

        //傳回一個color值

        return color;

    }

    // Update is called once per frame

    void Update()

    {

    }

}

這個代碼可以拖入到Main Camera中,一啟動就會被執行

Unity3d學習 第一天 使用Unity3d的實體引擎制作 小球打磚塊 遊戲

六、檢測碰撞和計分,這個代碼也要加到磚塊預制體上面

右鍵可以直接建立UI->Text,自己調整坐标到遊戲界面上

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class brick : MonoBehaviour

{

    private static int score = 0;

    private void OnCollisionEnter(Collision other)

    {

        GameObject TextObj = GameObject.Find("Canvas/Text");

        if (TextObj != null)

        {

            Text obj = TextObj.GetComponent<Text>();

            obj.text = "Score:" + ++score;

            Debug.Log("score is"+score);

        }

        Destroy(gameObject);

    }

}

有問題可以加QQ群交流 824815540

Unity3d學習 第一天 使用Unity3d的實體引擎制作 小球打磚塊 遊戲