?
?
1.注意第一個(gè)GetMouseButton()方法只要檢測(cè)到鼠標(biāo)處于按下?tīng)顟B(tài),那么該方法就會(huì)一直返回 true,鼠標(biāo)沒(méi)按下時(shí)調(diào)用該方法返回的是 false
2.而第二個(gè)方法 --- GetMouseButtonDown() 方法只會(huì)在你按下鼠標(biāo)的第一幀返回一個(gè) true,然后就一直返回false,GetMouseButtonUp()則是在你送開(kāi)鼠標(biāo)的那一幀返回 true,然后一直返回false
?
1.在KeyCode中ctrl這種左右堆成布局的按鍵對(duì)應(yīng)的屬性有兩個(gè),分別是 LeftCtrl 和 RightCtrl
2.有沒(méi)有down / up ,取決于你想在按下對(duì)應(yīng)按鍵后方法只執(zhí)行一次還是執(zhí)行多次。
(執(zhí)行一次的話就有down/up,反之則沒(méi)有)
?
1. 按照操作點(diǎn)開(kāi)虛擬按鈕面板之后,就能夠看到18個(gè)Unity自帶的虛擬按鈕,如果我們將虛擬按鈕個(gè)數(shù)(size)改為大于18的個(gè)數(shù)的話(如19個(gè)),則Unity會(huì)自動(dòng)創(chuàng)建新的虛擬按鈕來(lái)補(bǔ)齊數(shù)目
1.一個(gè)虛擬按鈕分為正負(fù)兩極,且一個(gè)虛擬按鈕能夠綁定四個(gè)真實(shí)按鍵,其中四個(gè)真實(shí)按鍵分為了兩類(lèi):正向(positive)按鈕和負(fù)向(negative)按鈕
按了正向按鈕綁定的真實(shí)按鍵后就會(huì)返回一個(gè)正值,負(fù)向按鈕則是返回一個(gè)負(fù)值
?1.這兩個(gè)輸入框是用來(lái)描述正向按鈕和負(fù)向按鈕的功能的 --- 沒(méi)有negative的是用來(lái)描述正向按鈕的,有nagetive就是描述負(fù)向按鈕
1.Gravity --- 復(fù)位速度
2.Sensitivity --- 靈敏度?
虛擬按鈕有三個(gè)值 --- 1? - 0? - -1 ,當(dāng)我們沒(méi)有按到虛擬按鈕對(duì)應(yīng)的任何真實(shí)按鈕時(shí),虛擬按鈕對(duì)應(yīng)的值是0,按了正向按鈕就會(huì)變到1,按負(fù)向就是變到-1,松開(kāi)按鍵則值都會(huì)回到0
要注意的是這個(gè)變化不是跳躍式變化的,而是逐漸由0變1或者是由0變負(fù)1,而這個(gè)由0變化到其它值的速度就是由Sensitivity(靈敏度)決定的
而從1/-1變回0的速度則是由Gravity(復(fù)位速度)決定的
虛擬按鈕除了可以綁定傳統(tǒng)的鍵盤(pán)和鼠標(biāo)按鍵之外,還可以綁定Mouse Movement(鼠標(biāo)移動(dòng))
綁定鼠標(biāo)移動(dòng)的時(shí)候具體設(shè)置如上圖:
1.
比較關(guān)鍵的是決定鼠標(biāo)移動(dòng)所綁定的移動(dòng)軸,在上面這個(gè)設(shè)置中為x軸
2.綁定X移動(dòng)軸之后,鼠標(biāo)向右移動(dòng)則虛擬按鍵值偏向1,向左移動(dòng)偏向-1,保持不動(dòng)則為0?
(MouseY則是對(duì)應(yīng)鼠標(biāo)的Y軸運(yùn)動(dòng) --- 上為正,下為負(fù))
這一個(gè)虛擬軸對(duì)應(yīng)的是鼠標(biāo)滾輪 --- (Joysticks --- 操作桿,Scrollwheel --- 鼠標(biāo)滾輪)?
1.虛擬軸在綁定像 ctrl , shift 這種具有左右對(duì)稱(chēng)排布特點(diǎn)的按鍵時(shí),必須寫(xiě)明綁定的是 left 還是 right(綁定時(shí)不能用大寫(xiě)格式,只能用小寫(xiě)格式)?
2.綁定按鍵時(shí),空格對(duì)應(yīng)的是 space
前面三個(gè)方法能夠起到的作用如下:
1.任何與給定虛擬軸綁定的真實(shí)按鍵處于按下?tīng)顟B(tài)的話,則該方法會(huì)一直返回 true
2.任何與給定虛擬軸綁定的真實(shí)按鍵被按下的那一幀,該方法會(huì)返回一次true
3.任何與給定虛擬軸綁定的真實(shí)按鍵被抬起的那一幀,該方法會(huì)返回一次true
后面兩個(gè)方法則是
1.沒(méi)按下與虛擬軸綁定的真實(shí)按鍵時(shí)調(diào)用該方法后會(huì)返回0,按下綁定的正向按鍵時(shí)會(huì)返回一個(gè)從0到1不斷變化的單精度浮點(diǎn)數(shù),按下綁定的負(fù)向按鍵則是從0到-1的一個(gè)單精度浮點(diǎn)數(shù)
2.沒(méi)按下返回0,按了正向按鍵返回1,按了負(fù)向按鍵返回-1
3.有了虛擬軸之后,作為程序員的我們以后就不用再去找固定的按鍵了,只需要找到虛擬軸即可
4.對(duì)于綁定鼠標(biāo)移動(dòng)軸的虛擬軸 “Mouse X” 和 “Mouse Y”來(lái)說(shuō),由于我們?cè)谝苿?dòng)鼠標(biāo)的時(shí)候并沒(méi)有按下按鈕,所有上面三個(gè)GetButton方法獲得這兩個(gè)虛擬軸的任何反饋的,只有兩個(gè)GetAxis方法可以獲得反饋(右下正,左上負(fù))
1.有Raw,沒(méi)Raw的區(qū)別就是是否應(yīng)用平滑過(guò)渡
1.寫(xiě)攝像頭沿著鼠標(biāo)移動(dòng)的腳本的時(shí)候要注意一個(gè)問(wèn)題 --- 我們的鼠標(biāo)左右移動(dòng)時(shí),攝像頭是沿著世界坐標(biāo)系的y軸旋轉(zhuǎn)的,如果我們直接寫(xiě)下面這種類(lèi)型的代碼的話:
則都是沿自身坐標(biāo)系旋轉(zhuǎn),因此如果想沿世界坐標(biāo)系旋轉(zhuǎn)的話,必須再給方法加一個(gè)參數(shù):
指明沿哪一個(gè)坐標(biāo)系旋轉(zhuǎn)(攝像頭上下擺動(dòng)是沿著自身坐標(biāo)系旋轉(zhuǎn)的,而不是沿著世界坐標(biāo)系,否則的話會(huì)導(dǎo)致上下擺動(dòng)并不是我們想要的效果)?
?插值法
1.插值法是類(lèi) ---- Mathf 中的一個(gè)方法 --- Lerp方法
?
1.Lerp方法需要三個(gè)參數(shù),分別是數(shù)據(jù)變化的起點(diǎn),終點(diǎn)以及數(shù)據(jù)返回比例,該方法的工作邏輯如下:
一.確定當(dāng)前數(shù)據(jù)起點(diǎn)和數(shù)據(jù)終點(diǎn)所在的數(shù)據(jù)段
二.按照第三個(gè)參數(shù) --- 數(shù)據(jù)返回比例,從起點(diǎn)開(kāi)始像終點(diǎn)前進(jìn)對(duì)應(yīng)比例(該比例的取值范圍是0到1,如果取0.1的話則表示從起點(diǎn)開(kāi)始,向終點(diǎn)前進(jìn)整個(gè)段的0.1倍)
三.前進(jìn)到指定位置后,將指定位置的數(shù)值返回
比如 --- Lerp(20,60,0.1)
1.數(shù)據(jù)段 = 60 - 20 = 40 , 前進(jìn)段 = 數(shù)據(jù)段 * 0.1 = 4
2.返回值 =??起點(diǎn) +? 前進(jìn)段 = 20 + 4 = 24
知道了這個(gè)方法的執(zhí)行邏輯后,我們就能夠?qū)崿F(xiàn)一個(gè)數(shù)值在一定數(shù)據(jù)段的由塊到慢(或者反過(guò)來(lái))的變化,具體的實(shí)現(xiàn)方式如下:
一.確定起點(diǎn),終點(diǎn),比例
二.令變化量等于起點(diǎn),并調(diào)用Lerp方法,然后將調(diào)用后的返回值傳給變化量,接著重復(fù)執(zhí)行步驟2
按照上面這兩步走,就能夠得到一個(gè)以越來(lái)越慢的速度接近終點(diǎn),且只能無(wú)限接近終點(diǎn)而到達(dá)不了終點(diǎn)的變化量
1.但是無(wú)限接近并不是我們希望出現(xiàn)的情況(不停的調(diào)用方法占用內(nèi)存空間),因此我們可以對(duì)變化量進(jìn)行一個(gè)判斷 --- 即當(dāng)變化量與終點(diǎn)的差值小于一定數(shù)的時(shí)候,直接令變化量等于終點(diǎn)值并結(jié)束調(diào)用方法,這樣就能夠使得無(wú)限接近結(jié)束掉。
2.使用上面這個(gè)方法還需要處理一個(gè)問(wèn)題 --- 作差之后的值的正負(fù)問(wèn)題 --- 可以通過(guò)調(diào)用 Mathf 中的 Abs方法來(lái)解決 --- Abs(參數(shù)) --- 調(diào)用后返回參數(shù)的絕對(duì)值
3.不要忘了浮點(diǎn)數(shù)在計(jì)算機(jī)中并不是精確存儲(chǔ)的,而是采用近似存儲(chǔ)的方式,因此對(duì)浮點(diǎn)數(shù)作判斷的時(shí)候盡量不要使用 == 這種過(guò)于絕對(duì)的判斷
1.在Unity腳本中創(chuàng)建一個(gè)具有 Public 權(quán)限的數(shù)組引用,并將腳本掛載到游戲物體上后,該游戲物體的Inspector界面處會(huì)出現(xiàn)如下參數(shù)輸入窗口
這個(gè)Size指的是數(shù)組元素個(gè)數(shù),填入后腳本會(huì)自動(dòng)創(chuàng)建一個(gè)數(shù)組實(shí)例(該數(shù)組的元素個(gè)數(shù)與Size相同),并將具有Public 權(quán)限的數(shù)組引用指向該數(shù)組,同時(shí)Inspecor界面會(huì)出現(xiàn)如下變化:
即填入元素個(gè)數(shù)后,又會(huì)出現(xiàn)對(duì)應(yīng)的元素賦值窗口,我們可以直接在窗口處對(duì)元素進(jìn)行賦值。?這行代碼能夠?qū)崿F(xiàn)當(dāng)index從0開(kāi)始不停的+1,加到等于zoomLevel.Length時(shí)又變回0的功能文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-771294.html
(其原理就是取余的特性 ---- a%b , a < b 時(shí) a%b = a ; a = b 時(shí) a%b =0)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-771294.html
到了這里,關(guān)于Unity腳本類(lèi) ---- Input類(lèi),虛擬軸與插值方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!