iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
自我挑戰組

從0開始的UnityAR手機遊戲開發系列 第 9

[第九天]從0開始的UnityAR手機遊戲開發-介紹Unity寫程式的基本語法。

現在的Unity插件五花八門,現在自己寫出一個簡單的遊戲甚至不用自己寫腳本,利用Asset Store商店的插件即可完成,但還是會有需要自己寫腳本的時候,本章節將會介紹Unity所使用的C#語法。


在Project點擊右鍵新增Create→C# Script並取名
https://ithelp.ithome.com.tw/upload/images/20210923/20140569eV3XyjhM7o.png

如果Project的C# Script有改名,必須把腳本打開把名稱改為一樣的不然會出Bug。
新增好後滑鼠左鍵點擊Script兩下開啟Script。
https://ithelp.ithome.com.tw/upload/images/20210923/201405692Mztol8DDX.png

Unity常用的C#語言介紹

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

public class ScriptA : MonoBehaviour
{
    //這邊通常是寫要放入此腳本的物件或UI、腳本......等
   
    [Header("這是註解的其中一種,增加腳本可讀性")]
    public GameObject TestOBJ02;

    [Space(20)]
    [Header(" [Space(要間隔多遠的數字)]是用來增加間距的")]
    public GameObject TestOBJ03;
 

    [Header("public公開變數,GameObject可以放入Prefab物件或Hierarchy的物件")]
    public GameObject TestOBJ01;
    //沒有加public只能在腳本內使用,元件列會看不到
    GameObject TestOBJ001;

    [Header("在物件後面加上中括弧會變為陣列")]
    public GameObject[] TestOBJS;
    [Header("在後面加上=new GameObject[數字]陣列會變為[]的值")]
    public GameObject[] TestObjects=new GameObject[5];

    [Header("Int為整數,不能有小點數")]
    public int TestInt;

    [Header("float為浮點數,可以有小點數,需在數字後面加上f\n例如3.25f")]
    public float TestFloat;

    [Header("string為字串")]
    //需在字串前後加上""
    public string Teststring;

    [Header("bool為布林,布林值只有true和false")]
    //通常用來開啟或關閉物件
    public bool Testbool;

    [Header("Vector3為一組三維值(x,y,z)")]
    //通常用來移動或旋轉物件
    public Vector3 TestVector3;

    [Header("Vector2為一組二維值(x,y)")]
    //通常用來移動或旋轉物件,使用在2D遊戲
    public Vector2 TestVector2;

    [Header("Button為UI的按鈕")]
    //開始遊戲或設定按鍵通常由Button做成
    public Button TestButton;

    [Header("Image為UI的畫布")]
    //遊戲的背景圖通常由Image做成
    public Image TestImage;

    #region 這是可以縮小region到endregion間的程式,管理程式碼非常方便
    #endregion
    //兩條斜線為單排註解
    /*
     斜線星號為
     多排註解
     */
    /// <summary>
    /// 3條斜線也是註解的一種
    /// 通常會有<summary>包住
    /// </summary>

    ////這邊通常是寫要執行的函式
    // 遊戲開始時會執行此函式內的程式
    void Start()
    {
        //執行AB()協程
        StartCoroutine(AB());
    }

    // 每一幀執行一次,通常在一直偵測或物件一直執行動昨時使用
    void Update()
    {

        // if 判斷式:if(要執行的事){}else{}
        //要執行的事發生就會執行此段函式,沒發生就會執行else後的函示。
        #region 這是範例,按下S鍵後會發生的事情
        if (Input.GetKey(KeyCode.S)) {
            //Debug.Log()裡的字串或值會在Console內出現
            Debug.Log("按下按鍵,這個會一直觸發");
        }
        else {
            Debug.Log("沒按或是按下其他鍵");
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            Debug.Log("按下按鍵,按下去的剎那觸發");
            //執行EFGH函式
            EFGH();
        }
        if (Input.GetKeyUp(KeyCode.S))
        {
            Debug.Log("GetKeyUp放開按鍵,放開按鍵時觸發");
            //執行ABCD函式
            ABCD();
        }
        #endregion
    }

    //public公開變數,可以給其他腳本讀取
    public void ABCD() 
    {
        //For迴圈
        //int i=0;給整數i的起始值為0,i < TestOBJS.Length當i值小於TeseOBJS陣列值時,i++ i+1加到大於陣列值 
        //當i加到大於陣列值時,就會跳出迴圈
        for (int i = 0; i < TestOBJS.Length; i++) {
           
            Debug.Log("這是Debug.Log印的:" +i); 
        }
    }

    //private私有變數,只能在自己腳本使用
    //如果前面未加Public會被默認為private歐
    private void EFGH()
    {
        Debug.Log("執行EFGH");
    }

    //IEnumerator協程
    //需要在其他函式添加(StartCoroutine(函式標題);)才能執行此協程
    IEnumerator AB()
    {
        yield return 0;
    }

  }

寫好後將腳本按住左鍵拖曳給物體,可以看到TestOBJ001沒在上面
https://ithelp.ithome.com.tw/upload/images/20210923/20140569QKL2j09rKK.png

按開始測試時Console會跳出Debug.Log內容
https://ithelp.ithome.com.tw/upload/images/20210923/20140569Hfhi6gUuvF.png

下一張章節會教多張圖卡辨識


上一篇
[第八天]從0開始的UnityAR手機遊戲開發-如何將模型設置在圖卡上和腳本解說
下一篇
[第十天]從0開始的UnityAR手機遊戲開發-Vuforia多張圖卡辨識
系列文
從0開始的UnityAR手機遊戲開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言