通過C#腳本實現旋轉的立方體


一、介紹

目的:通過一個簡單的例子(鼠標點擊,使立方體旋轉和變色)熟悉Unity中C#腳本的編寫。

軟件環境:Unity 2017.3.0f3 、 VS2013。

 

二、C#腳本實現

1,啟動Unity,創建游戲場景。【關於Unity基本操作請點擊 Unity入門教程(上)進行了解】

 

2,在Assets目錄下創建文件夾,用於存放游戲的各種資源。

3,創建一個名為CubeRotate的C#腳本並拖放到場景的方塊上,調整好相機位置。

4,雙擊打開腳本,在腳本中加入鼠標相關函數

 

5,設定一個功能:當鼠標光標移動到物體上時,物體材質色彩變為黃色。

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

public class CubeRotate : MonoBehaviour {

    private bool bCube1 = false;
    private bool bCube2 = false;
    private Color OldColor;

    // Use this for initialization
    void Start () {
        OldColor = this.gameObject.GetComponent<Renderer>().material.color; //獲取物體的原始顏色
    }
    
    // Update is called once per frame
    void Update () {
        
    }

    void OnMouseOver()
    {
        this.gameObject.GetComponent<Renderer>().material.color = Color.yellow; //立方體變為黃色
        bCube1 = true;
    }
    void OnMouseExit()
    {
        this.gameObject.GetComponent<Renderer>().material.color = OldColor; //立方體變為原始顏色
        bCube1 = false;
    }
    void OnMouseDown()
    {
        if(bCube1)
        {
            bCube2 = true;
        }
    }

}

 

代碼解讀:當鼠標光標移動到物體上時,物體變為黃色,同時將一個初始值為false的bCube1的值變為true;當鼠標光標離開后,物體材質色彩還原,bCube1為false;當按下鼠標左鍵,且bCube1的值為true,bCube2的值為真。

注:OnMouse函數都是執行一次的函數,因此不能將與動畫有關的控制函數放於其內執行,所以通常會用布爾值開關來控制Update函數中的動畫函數。

 

6,在Update函數里實現Cube轉動

    void Update () {
        if(bCube2) //當Cube為真時
        {
            this.gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 200);  //Cube轉動
        }
    }

 

因為Cube轉動是持續性的,所以把旋轉腳本寫在Update函數里面實現Cube轉動。

 

7,更改Spotlight的強度

    // Use this for initialization
    void Start () {
        OldColor = this.gameObject.GetComponent<Renderer>().material.color; //獲取物體的原始顏色
        GameObject.Find("Spotlight").GetComponent<Light>().intensity = 1.0F;  //獲取Spotlight的強度屬性
    }
    
    // Update is called once per frame
    void Update () {
        if(bCube2) //當Cube為真時
        {
            this.gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 200);  //Cube轉動
            if(GameObject.Find("Spotlight").GetComponent<Light>().intensity < 8.0F)
            {
                GameObject.Find("Spotlight").GetComponent<Light>().intensity += 0.05F;
            }
        }
    }

 

8,UGUI的使用->添加Text組件

 

9,添加控制Text顯示的腳本

使用UGUI組件必須在C#腳本中添加UI的命名空間,這樣我們才能引用。當bCube2的值為真時,Text組件顯示“Cube正在旋轉中...”,所以在Update函數的if語句里面應添加以下腳本

            GameObject.Find("Text").GetComponent<Text>().text = "Cube正在旋轉...";

 

10,點擊“Play”按鈕,運行游戲

鼠標點擊前:

鼠標點擊后:

 

11,完整腳本代碼

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  //添加UI的命名空間

public class CubeRotate : MonoBehaviour {

    private bool bCube1 = false;
    private bool bCube2 = false;
    private Color OldColor;

    // Use this for initialization
    void Start () {
        OldColor = this.gameObject.GetComponent<Renderer>().material.color; //獲取物體的原始顏色
        GameObject.Find("Spotlight").GetComponent<Light>().intensity = 1.0F;  //獲取Spotlight的強度屬性
    }
    
    // Update is called once per frame
    void Update () {
        if(bCube2) //當Cube為真時
        {
            this.gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 200);  //Cube轉動
            GameObject.Find("Text").GetComponent<Text>().text = "Cube正在旋轉...";

            if(GameObject.Find("Spotlight").GetComponent<Light>().intensity < 8.0F)
            {
                GameObject.Find("Spotlight").GetComponent<Light>().intensity += 0.05F;
            }
        }
    }

    void OnMouseOver()
    {
        this.gameObject.GetComponent<Renderer>().material.color = Color.yellow; //立方體變為黃色
        bCube1 = true;
    }
    void OnMouseExit()
    {
        this.gameObject.GetComponent<Renderer>().material.color = OldColor; //立方體變為原始顏色
        bCube1 = false;
    }
    void OnMouseDown()
    {
        if(bCube1)
        {
            bCube2 = true;
        }
    }

}

 

三、總結

通過學習我們了解了C#腳本對於游戲對象的作用,中間還學習了UGUI的使用。

Unity腳本語言的綜合應用並不是通過一個實例就能夠達到熟練的程度,還需要自己不斷地練習和探索,不斷的嘗試bug和及時總結。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM