2017年10月9日 星期一

Unity程式設計初體驗(一)-從MonoBehaviour類別開始

好玩的程式設計

程式設計是一門很好玩的學科,可以訓練邏輯概念,透過指令的排列組合,完成某一個特定任務,最方便是電腦已經成為每個家庭必供的家電用品,對於有些家庭成員來說,花在電腦上的時間可能都比看電視時間還長。學習程式設計自學很重要也很方便,因為只要一部電腦即可,在現在以工業4.0或社會5.0都很重視程式設計,學習程式設計可以指揮機器人的運作,也可發展網路服務軟體,既好玩又有趣。

Unity是學習程式設計非常實作的平台

為什麼我們學習Unity?Unity應用在哪些領域,前景又如何?目前許多知名的遊戲都是使用Unity開發,更重要的是Unity具有很強的跨平台能力,不管是桌機、手機、遊戲機都有支持。Unity具有很好優勢和前景,特別是在3D/AR/VR上。Unity程式語言可以使用C#或JavaScript,目前以C#為主流。

學習Unity程式設計就從MonoBehaviour類別開始

MonoBehaviour是基礎的類別,這個類別有兩個很重要的函式Start()和Update(),Start()只會執行一次,負責初始化的任務,但Update()就會不斷地被呼叫執行,是程式的主函式。以下是我們建立一個新的C#程式的樣版,類別名稱是NewBehaviourScript,繼承MonoBehaviour類別。

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


public class NewBehaviourScript : MonoBehaviour {


   // Use this for initialization
   void Start () {

  }

   // Update is called once per frame
   void Update () {

  }
}

GameObject是遊戲世界的基本物件

GameObject我們稱遊戲物件,它是Unity場景中所有實例的基本的類別。首先我們先介紹Find()函式,該函式可以用來找遊戲物件,例如:要找一個叫Cube的物件,我們可以使用GameObject.Find("Cube");,當找到這個物件時,會傳回GameObject物件指標,因此我們需要先宣告一個GameObject物件,private GameObject cube;採用private是表示該物件是私有的,只能在該類別內使用。找到可以控制的物件後,我們就可以使用GameObject內的translation變數來進行對遊戲物件的轉換控制。translation變數其資料型態是Translation變數,它可以用來控制遊戲物件的位置(Position)、旋轉(Rotation)、大小(Scale)等。首先我們先來學習如何控制遊戲物件的旋轉方向,我們可以呼叫Rotate()函式,三個參數分別是X、Y、Z,我們來控制Y軸的旋量,採用時間物件Time.deltaTime。其完整的程式如下:

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

public class NewBehaviourScript : MonoBehaviour {

    private GameObject cube;

    // Use this for initialization
    void Start () {
       cube = GameObject.Find("Cube");

    }

// Update is called once per frame
void Update () {
        cube.transform.Rotate(0, 100 * Time.deltaTime, 0);
    }
}

使用Prefab預製功能,讓控制更輕鬆

Unity中的Prefab資源類型我們稱它為預製,它可以透過添加組件並將其屬性設置為適當的值,可以方便地在場景中構建一個遊戲物件(GameObject),那兩者之間有何差別呢?Prefab資源類型可以讓您存儲一個完整的組件和屬性的GameObject對象。 預製作為模板,您可以在該模板中在場景中創建新的對象實例。 對預製資產進行的任何編輯都會立即反映在從其生成的所有實例中,但也可以單獨覆蓋每個實例的組件和設置。
我們可以通過選擇Asset->Create Prefab來建立預製,然後再將對象從場景拖動到“空”預製資產上。換句話,場景上的所有物件,都是 GameObject物件,Prefab就是把場景上,製作好的 GameObject 拖曳到 Assets 目錄下保存起來。在使用預製功能要注意,在前面的例子,我們使用到Find()找特定的物件,因此您使用預製功能時,把原本的物件變成三個,一個Cube,其兩個是使用預製Prefab來製造出的兩個Cube,您會發現在轉動的Cube只有一個,要三個都能使用,可以改成下列程式,改用this物件指標。

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

public class NewBehaviourScript : MonoBehaviour {


    // Use this for initialization
    void Start () {

    }

// Update is called once per frame
void Update () {
        this.transform.Rotate(0, 100 * Time.deltaTime, 0);
    }
}


2 則留言: