最近用unity發(fā)布webgl程序時(shí),出現(xiàn)了一個(gè)挺蛋疼的問題就是,webgl里面的程序他會接受js的鍵盤監(jiān)聽事件,這樣就導(dǎo)致了webgl程序可以使用出入框,讓后js程序的輸入框就無效了,為了解決這個(gè)問題,我也找了一些資料,不過看了以后感覺大部分不能用,后來通過自己研究總結(jié)得出了下面的代碼,親測可用,廢話不多說,直接上代碼。
從事資陽移動(dòng)機(jī)房,服務(wù)器租用,云主機(jī),虛擬空間,國際域名空間,CDN,網(wǎng)絡(luò)代維等服務(wù)。
//初始化頁面禁用unity的鍵盤監(jiān)聽事件。
function hackWebGLKeyboard(str) {
RemoveEventClick( );
}
//給unity鍵盤添加監(jiān)聽事件
function AddEventClick(){
for (var i in JSEvents.eventHandlers) {
var event = JSEvents.eventHandlers[i];
if (event.eventTypeString == 'keydown' || event.eventTypeString == 'keypress' || event.eventTypeString == 'keyup') {
window.addEventListener(event.eventTypeString, event.eventListenerFunc, event.useCapture);
}
}
}
//移除unity鍵盤監(jiān)聽事件
function RemoveEventClick( ){
for (var i in JSEvents.eventHandlers) {
var event = JSEvents.eventHandlers[i];
if (event.eventTypeString == 'keydown' || event.eventTypeString == 'keypress' || event.eventTypeString == 'keyup') {
window.removeEventListener(event.eventTypeString, event.eventListenerFunc, event.useCapture);
}
}
}
//判斷當(dāng)前是否點(diǎn)擊到了unity的畫布
document.addEventListener('click', function(e) {
if (e.target.id == "canvas") {
AddEventClick();
} else {
RemoveEventClick();
}
這段代碼的原理就是在webgl程序開始啟動(dòng)的時(shí)候先把webgl的鍵盤監(jiān)聽事件給注銷掉,后面在判斷鼠標(biāo)觸摸的是webgl界面還是js界面,來啟用和禁用webgl的鍵盤監(jiān)聽事件。
需要源碼的朋友可以給我留言。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。