首先了解unity相關概述,快速認識unity編輯器,然後抓住重點的學:遊戲物件、元件|C#指令碼、預製體、UI
☺ 學習過程你會發現,其實Unity中主要是用c#進行開發。
因為在這個過程中,無非就是,對遊戲物件通過掛載的C#指令碼,修改一下元件的一些屬性,控制一下啟用之類的操作。到了UGUI,同樣,也是通過掛載的C#指令碼,監聽到事件發生後,呼叫一下C#指令碼定義的方法處理一下事件。
unity、visual studio
Unity是一套具有完善體系與編輯器的跨平臺遊戲開發工具,也可以稱之為遊戲引擎遊戲引擎是指一些編寫好的可重複利用的程式碼與開發遊戲所用的各功能編輯器Unity目前已超過50%的遊戲引擎市場佔有率。
遊戲引擎=可複用程式碼+各種開發工具
易上手、高安全性
的特性面向元件
遊戲開發思想讓遊戲開發更加簡單易複用所見即所得開發編輯器
良好生態圈
,商城中包含大量成熟的功能指令碼與資源管理Unity專案,當電腦中有多個unity不同版本的專案的時候,管理就比較麻煩,可以通過unity hub 對各個不同的unity hub專案管理。
進入手的模式,快捷方式,直接按住滑鼠滾輪
和右鍵-眼睛環繞一樣,都是為了更好地全面觀察遊戲物件
在unity 中將圖片、模型檔案[字尾是.fbx]等素材進行打包
打包完的檔案型別是 Unity package file
元件就是功能,需要給遊戲物件新增什麼功能就只需給它新增上元件。
在Unity中,遊戲物體是不具備任何功能的,如果想要為其新增功能,那麼就需要為它新增該功能的元件,而每一個元件其實就是一個引擎內部的元件指令碼
或是由自己編寫的元件指令碼
。也就是說,一個遊戲物體(GameObject)會包含多個元件(Component),每一個元件又是一個元件指令碼。
每個遊戲物件之所以表現形式不同,是因為繫結到他們身上的元件指令碼不同!
▪ 啟用OnEnale和取消啟用OnDisable:
如果有多個指令碼,test1.cs、test2.cs、test3.cs
指令碼的執行順序是:會想把test1.cs、test2.cs、test3.cs 的所有Awake方法執行完[如果有手動寫Awake方法的情況!],接著是從test1.cs到test2.cs最後到test3.cs 執行下一個生命週期-啟用OnEanale[如果有手動寫OnEanale方法的情況!],然後又是從從test1.cs到test2.cs最後到test3.cs 執行下一個生命週期Start......
▷ 現階段的生命週期從Awake開始,每次都是從專案中第一個指令碼到最後一個指令碼,執行。
▷ 接著進入下一個生命週期,所有的指令碼也是從專案中第一個指令碼到最後一個指令碼,執行當前的生命週期!
如果想要更改專案中指令碼之間的生命週期的執行順序,可以在編輯->專案設定->指令碼執行順序設定一下
預製件變體:對當前的遊戲物件,生成一個變體,變體會依賴舊的預製體。
當舊的預製體發生改變,變體也會跟著一起改變。但是變體改變,預製體不會發生改變。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* EmptyTest 類是繫結在場景SamepleScene下的遊戲物件Empty身上
* 補充,課外小知識,C#的 Debug.Log 方法,其實就是相當於 前端專案的 console.log 方法,也就是開發過程中用於列印紀錄檔的
*/
public class EmptyTest : MonoBehaviour
{
public GameObject Cube;
//預製體
public GameObject Prefab;
// Start is called before the first frame update
void Start()
{
//當前類的屬性gameObejct就對應了unity當前指令碼所繫結的遊戲物件
GameObject gameObject = this.gameObject;
Debug.Log("gameObject: " + gameObject);
Debug.Log("gameObject的名稱:" + gameObject.name);
Debug.Log("gameObject的標籤:" + gameObject.tag);
Debug.Log("gameObject的圖層:" + gameObject.layer);
Debug.Log("Empty下的Cude的name:" + Cube.name);//子物體的名稱
Debug.Log("Empty下的Cude的繼承的父類別的啟用狀態:" + Cube.activeInHierarchy);//子物體繼承關係的啟用狀態【看所繼承的父物體的啟用狀態】
Debug.Log("Empty下的Cude的自身的啟用狀態:" + Cube.activeSelf);//子物體自身的啟用狀態
Debug.Log("Empty的transform:" + transform.position);//位置
Debug.Log("Empty下的Cude的transform:" + transform.Find(Cube.name).position);//位置
//給遊戲物件新增上元件,通過拿到遊戲物件.AddComponent方法
gameObject.AddComponent<MeshFilter>();
Cube.AddComponent<AudioSource>();
//獲取其他元件【這個其他元件,其實就是排除掉Transform這個必須的元件後的其他元件】
Debug.Log("Empty獲取其他元件:" + GetComponent<BoxCollider>());
Debug.Log("Cube獲取其他元件:" + Cube.GetComponent<BoxCollider>());
//從子物體身上獲取元件
// GetComponentInChildren<BoxCollider>();
//從父物體身上獲取元件
//GetComponentInParent<BoxCollider>();
//全域性查詢--細節,就是首字母大寫了,小寫的是屬性
//所謂的全域性查詢,其實就是對當前的C#指令碼所處的場景SamepleScene下進行全域性查詢
GameObject testGameObject = GameObject.Find("TestGameObject");
//還可以通過標籤名獲取到遊戲物件
GameObject testGameObejct2 = GameObject.FindWithTag("enemy");
Debug.Log("testGameObject:" + testGameObject);
Debug.Log("testGameObject2:" + testGameObejct2);
//還可以設定遊戲物件是否啟用
testGameObject.SetActive(false);//取消啟用
//需求:通過預製體,在場景中範例化出遊戲物件
//預製體的型別也是GameObject
// Instantiate(Prefab);
// 範例化出遊戲物件,並且是當前掛載了C#指令碼的遊戲物件的子物體
GameObject capsule = Instantiate(Prefab, transform);
// 銷燬遊戲物件
Destroy(capsule);
}
// Update is called once per frame
void Update()
{
}
}
遊戲物件的父子級關係,其實是通過transform 維持的
......
GUI:Graphical User Interface 圖形化使用者介面或圖形使用者介面。
GUI,是平面的,在2d下操作
UI 最基本的是 畫布Canvas
,相當於螢幕。
UI 另外最基本的是 事件系統EventSystem
,其實就是把很多常見的事件,比如點選事件,封裝起來。
第一層的子控制元件做適配:
錨點是設定在父物體身上的。
控制元件錨點的作用:控制元件永遠會和錨點保持一定的距離。
① 在畫布Canvas 下新增UI-Button,在專案下建立一個C#指令碼,然後把C#指令碼掛載到Button身上
② 接著在C# 方法,寫一個點選事件發生時的處理方法 BtnClick()
③ 最後在Button 元件下面的On Click() 新增上C# 指令碼中,點選事件發生時的處理方法 BtnClick()
如果本文對你有幫助的話記得給一樂點個贊哦,感謝!
本文來自部落格園,作者:一樂樂,轉載請註明原文連結:https://www.cnblogs.com/shan333/p/17312311.html