U3D基礎(chǔ)
void OnCollisionEnter(Collision coll ) //碰撞開始的時候執(zhí)行一次
void OnCollisionExit(Coollision) //當(dāng)碰撞結(jié)束的時候結(jié)束一次
void OnCollisionStay(Collision) //當(dāng)碰撞執(zhí)行中時,會持續(xù)調(diào)用該方法
void OnTriggerEnter(Collider) //當(dāng)進(jìn)入觸發(fā)范圍時開始時調(diào)用,只會調(diào)用該方法一次
void OnTriggerExit(Collider) //當(dāng)入觸發(fā)范圍時結(jié)束一次
void OnTriggerStay(Collider) //當(dāng)入觸發(fā)范圍中時,會持續(xù)調(diào)用該方法
GameObject.Find(String): [靜態(tài)方法] 通過名字查找游戲物體
GameObject.FindGameObjectWithTag(String):[靜態(tài)方法] 通過特定的標(biāo)簽,查找到所有””貼有改標(biāo)簽的游戲物體,返回一個數(shù)組
U3D進(jìn)階
GameObject.Instantiate(Object,Vector3,Quaternion); [靜態(tài)函數(shù)] //創(chuàng)建游戲物體
//參數(shù)說明
Object :用于實(shí)例化的預(yù)制體
Vector3 :實(shí)例化后生成的物體所在的位置
Quaternion[四元數(shù)]:實(shí)例化后生成的物體的旋轉(zhuǎn)狀態(tài);
Quaternion.identity:無旋轉(zhuǎn)
GameObject.Destroy(Object,float); //定時銷毀某個游戲物體
//參數(shù)說明
Object : 要銷毀的游戲物體;
float : 時間,多少秒后銷毀;
Invoke(String,float) ; //多少秒后執(zhí)行某個函數(shù)[只會調(diào)用一次];
//參數(shù)說明
String : 要執(zhí)行的函數(shù)的名稱
float :秒數(shù),倒計(jì)時的時間
InvokeRepeating(String,float,float); 多少秒后執(zhí)行某個函數(shù),并且以后每隔多少秒都會執(zhí)行該函數(shù)一次[重復(fù)調(diào)用N次];
//參數(shù)說明:
String:要執(zhí)行的函數(shù)的名稱
Float:秒數(shù),準(zhǔn)備時間,預(yù)熱時間;
Float:秒數(shù),重復(fù)調(diào)用的間隔時間;
CancelInvoke(); 取消這個腳本中所有的Invoke調(diào)用;
gameObject.SendMessage(String);通知這個游戲物體身上的腳本文件中的”指定方法”執(zhí)行.
//參數(shù)說明
String : 方法名,要執(zhí)行的方法的名稱
OnClick(); 按鈕的點(diǎn)擊事件
IEnumerator Task3()
{
yield return new WaitForSeconds (2);
Debug.Log ("任務(wù)3");
}
參數(shù)說明:
IEnumerator:協(xié)同程序的返回值類型;
yield return:協(xié)同程序返回 xxxxx;
new WaitForSeconds (秒數(shù)):實(shí)例化一個對象械哟,等待多少秒后繼續(xù)執(zhí)行蝉绷。 這個 Task3()的作用就是等待兩秒后俊抵,繼續(xù)執(zhí)行任務(wù) 3.
2.開啟協(xié)同程序
StartCoroutine(“協(xié)同程序方法名”);
這個 StartCoroutine 有三種重載形式辐烂,目前先只介紹這一種辛块。
3.停止協(xié)同程序
StopCoroutine(“協(xié)同程序方法名”);
這個 StopCoroutine 也有三種重載形式彻犁,目前先只介紹這一種。
腳本的生命周期:
1.Awake() ※
喚醒事件,只執(zhí)行一次恩脂。
2.OnEnable()
啟用事件,只執(zhí)行一次趣斤。當(dāng)腳本組件被啟用的時候執(zhí)行一次俩块。
3.Start() ※
開始事件,只執(zhí)行一次浓领。
4.FixedUpdate() ※
固定更新事件玉凯,執(zhí)行 N 次,0.02 秒執(zhí)行一次联贩。 所有物理組件相關(guān)的更新都在這個事件中處理漫仆。
5.Update() ※
更新事件,執(zhí)行 N 次泪幌,每幀執(zhí)行一次盲厌。
6.LateUpdate()
稍后更新事件,執(zhí)行 N 次祸泪,在 Update 事件執(zhí)行完畢后再執(zhí)行吗浩。
7.OnGUI()
GUI 渲染事件,執(zhí)行 N 次没隘,執(zhí)行的次數(shù)是 Update 事件的兩倍懂扼。
8.OnDisable()
禁用事件,執(zhí)行一次右蒲。在 OnDestroy 事件前執(zhí)行阀湿。 或者當(dāng)該腳本組件被“禁用”后,也會觸發(fā)該事件瑰妄。
9.OnDestroy() ※
銷毀事件陷嘴,執(zhí)行一次。當(dāng)腳本所掛載的游戲物體被銷毀時執(zhí)行翰撑。
10.注意事項(xiàng)
生命周期事件罩旋,全部是由系統(tǒng)定義好的,且系統(tǒng)會自動調(diào)用眶诈。
系統(tǒng)調(diào)用這些事件的順序涨醋,和我們代碼里面的書寫順序無關(guān)。
常用 API 之工具類:
一 . Screen 屏幕類
1.作用
這個類中包含屏幕相關(guān)的數(shù)據(jù)信息逝撬。
2.類中常用屬性
Screen.width:靜態(tài)只讀屬性浴骂,屏幕的寬度。 Screen.height:靜態(tài)只讀屬性宪潮,屏幕的高度溯警。
備注:在 Unity 的開發(fā)模式下趣苏,這兩個值取的是 Game 窗口的寬度和高度。
在項(xiàng)目編譯打包后梯轻,再運(yùn)行食磕,就是具體的設(shè)備的屏幕的寬度和高度。
二. Time 時間類
1.作用
這個類中包含時間相關(guān)的數(shù)據(jù)信息喳挑。
2.類中常用屬性
Time.time
靜態(tài)只讀屬性彬伦,游戲時間。從游戲開始到現(xiàn)在所經(jīng)過的秒數(shù)伊诵。
Time.deltaTime
靜態(tài)只讀屬性单绑,時間增量。渲染完上一幀畫面所消耗的時間曹宴。 [可以用于實(shí)現(xiàn)倒計(jì)時效果]
Time.timeScale
靜態(tài)屬性搂橙,時間縮放。[可以用于暫停游戲]
當(dāng)值為 1 時笛坦,游戲是正常狀態(tài);為 0 時区转,游戲是暫停狀態(tài);為 0.5 時,游戲是 處于慢放 0.5 倍的狀態(tài)弯屈。
三. Mathf 數(shù)學(xué)類
1.作用
這個類(其實(shí) Mathf 是結(jié)構(gòu)體類型)中包含了各種各樣的數(shù)學(xué)運(yùn)算相關(guān)的函數(shù)蜗帜。
2.常用函數(shù)
Mathf.Abs() 取絕對值
Mathf.Max() 取最大值
Mathf.Min() 取最小值
Mathf.Round() 四舍五入
3.插值運(yùn)算函數(shù)
Mathf.Lerp(float a,float b资厉,float t) :插值運(yùn)算
基于浮點(diǎn)數(shù) t 返回 a 到 b 之間的插值厅缺,t 限制在 0~1 之間。 當(dāng)t=0返回a宴偿,當(dāng)t=1 返回b湘捎。當(dāng)t=0.5 返回a和b的平均值。 演示:一個數(shù)從 0窄刘,插值到 10窥妇。
備注:Lerp()這個函數(shù),在很多類中都存在娩践,插值運(yùn)算的目的基本都是為了 “平滑過渡”活翩。
射線:
一:物理射線相關(guān)方法:
1.通過攝像機(jī)創(chuàng)建射線
演示:按下鼠標(biāo)左鍵發(fā)射射線。
Camera.main
代表 tag 設(shè)置為“MainCamera”的攝像機(jī)的 Camera 組件的引用翻伺。
m_Camera.ScreenPointToRay(Vector3)
攝像機(jī)組件(對象)下的一個方法材泄。
屏幕點(diǎn)轉(zhuǎn)化為射線,這個方法會返回一個 Ray 類型的射線吨岭。 這個屏幕點(diǎn)通常寫鼠標(biāo)的點(diǎn)擊位置拉宗,這樣的話,就代表從攝像機(jī)的位置開始,往 鼠標(biāo)點(diǎn)擊點(diǎn)這個方向旦事,發(fā)射一根射線魁巩。
Input.mousePosition
鼠標(biāo)所在的位置值。
Ray
射線姐浮,一個結(jié)構(gòu)體谷遂。
代碼完整格式:
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
2.檢查射線與其他物體的碰撞
RaycastHit
一個結(jié)構(gòu)體,用于存儲射線的碰撞信息单料。
Physics.Raycast(Ray, out RaycastHit)
物理類下面有一個靜態(tài)方法叫做 Raycast()埋凯,射線檢查点楼。
這個方法有 16 個重載方式扫尖,我們現(xiàn)在使用第 3 種重載方式。
第 3 種重載: 檢查這根射線掠廓,如果射線與場景中的物理碰撞了换怖,返回值為真,并且將碰撞信息 存儲到 RaycastHit 類型的變量中蟀瞧。
設(shè)置游戲物體顏色
brick.GetComponent<MeshRenderer>().material.color = new Color(Random.Range(0,1.0f),Random.Range(0,1.0f),Random.Range(0,1.0f));
主攝像機(jī)發(fā)射射線沉颂,與場景中的物體碰撞,獲取一個碰撞點(diǎn)悦污,然后手臂“朝向”
這個點(diǎn)铸屉。
Transform.LookAt(Vector3):朝向(面向)世界中的一個點(diǎn)。
4.Debug 繪制測試線
槍口到碰撞點(diǎn)直接繪制一根測試線切端。
Debug.DrawLine(Vector3, Vector3, Color):繪制線 和 Debug.DrawRay()用法一樣彻坛。
Transform.FindChild(string):在當(dāng)前物體的子物體中查找游戲物體。
2.槍口添加激光特效
1.槍口位置添加 LineRenderer 組件
在槍口這個空游戲物體上添加 LineRenderer 組件踏枣,設(shè)置相關(guān)屬性昌屉。
LineRenderer.SetPosition(int,Vector3):設(shè)置線的位置茵瀑。 int:位置的索引值;
Vector3:該位置所在的坐標(biāo)值;
2.飛盤射擊
鼠標(biāo)碰到飛盤间驮,并且此時按下鼠標(biāo)左鍵,就立刻將飛盤干掉马昨。
Transform.parent:屬性竞帽,當(dāng)前物體的父物體。
Transform.GetComponentsInChildren<T>();
獲取所有子物體的某個組件鸿捧。
GameObject.AddComponent<T>():給游戲物體添加組件屹篓。
Transform.SetParent(Transform);
將當(dāng)前的物體設(shè)置為另一個物體的子物體。
SetActive(BOOL) 是否隱藏游戲物體
void OnMouseDown() 自動捕捉鼠標(biāo)左鍵被點(diǎn)擊事件
Vector3.Distance(a,b) a向量和b向量之間的數(shù)值長度
collision.relativeVelocity.magnitude 獲取兩個碰撞體之間的相對速度
int a = list.indexof("元素名"); //查找指定元素在list下的下標(biāo)
憤怒的小鳥遇到的函數(shù)
Time.timeScale = 0; //暫停游戲場景
Time.timeScale = 1; //開啟游戲場景
SceneManager.LoadScene(0); //加載指定場景 要寫出調(diào)用class名 using UnityEngine.SceneManagement;
Mathf.Clamp 限制
static function *Clamp* (*value* : float, *min* : float, *max* : float) : float
*Description*描述
Clamps a value between a minimum float and maximum float value.
限制value的值在min和max之間笛谦, 如果value小于min抱虐,返回min。 如果value大于max饥脑,返回max恳邀,否則返回value
PlayerPrefs.SetString(key , value); //U3D官方存儲數(shù)據(jù)方法,鍵值對存儲 ,還有SetInt 和SetFloat
string value = PlayerPrefs.GetString(key); //獲取value值 ,還有GetInt 和 GetFloat
int.Parse(string) //把string類型的字符轉(zhuǎn)換成int類型的
///異步場景加載法
SceneManager.LoadSceneAsync( );
///設(shè)置分辨率
Screen.SetResolution(800,500,是否全屏);
///去掉發(fā)布之后u3d默認(rèn)啟動動畫
File>>Build Settings...>>Player Settings...>>Splash Image>>不勾選Show Unity Splash Screen