[第九天]从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

下一张章节会教多张图卡辨识


<<:  分散式链路追踪 - Jaeger

>>:  DAY 10:Two-phase Termination Pattern,我就跟你说不要乱拔电源!

[Day 27]粗糙集特徵选择简介-5

上次说到了在特徵子集 Q 之下 被特徵子集 P 细分的程度 如果是 1 则表示 P 可以完全分类 Q...

[Day26] Esp32s + IFTTT + LINE - (程序码讲解)

1.前言 昨天那篇教各位学会使用IFTTT结合Line,当时传输资料时是透过Line Notify的...

DAY23 - 将作品发布出去吧 - 後端篇 (heroku)

为什麽选择 heroku google 的服务下面有 google cloud 可以部属 api,但...

Java学习之路02---Eclipse开发工具

上一节我们谈到JDK的安装以及第一次编译java程序,不过真实软件开发场景,使用IDE会更加有效率,...

C#学习笔记1:C#程序结构 (Visual Studio)

这是我一边学习一边写下的笔记,如果内容有错,恳请在下方留言跟我说,我会非常感谢的!!! 以下我们用主...