亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于XLua的Unity腳本框架的設(shè)計與實現(xiàn)

        2019-05-22 09:27:16李和明
        無線互聯(lián)科技 2019年5期
        關(guān)鍵詞:腳本

        李和明

        摘 要:Unity技術(shù)的迅速崛起,讓3D移動游戲逐漸流行。隨著游戲系統(tǒng)的不斷豐富,游戲開發(fā)迭代速度迅速加快。但Unity的原生C#開發(fā)效率較慢,而且在部分平臺上無法進(jìn)行熱更新,無法滿足游戲開發(fā)商的需求。文章旨在將Unity與騰訊開源項目XLua結(jié)合,設(shè)計并實現(xiàn)Unity腳本框架,讓游戲開發(fā)商專注于游戲設(shè)計與邏輯開發(fā),加快游戲開發(fā)效率,減少開發(fā)成本。

        關(guān)鍵詞:游戲開發(fā);Unity;XLua;腳本

        全球手機用戶數(shù)量已經(jīng)超過50億[1]。隨著通信信息技術(shù)的快速發(fā)展與智能手機的普及,以及手游在渲染和表現(xiàn)力上的優(yōu)化,越來越多的智能手機用戶選擇手機游戲作為新的娛樂方式[2]。由于Unity技術(shù)的迅速崛起,移動3D游戲逐漸流行起來,大量的開發(fā)人員與團(tuán)隊投入到開發(fā)3D游戲的行列。隨著移動游戲的玩法越來越豐富,產(chǎn)品的迭代越來越快,如何保持用戶的新鮮感成為游戲開發(fā)的核心。直接使用C#的開發(fā)效率較慢,成本高,且在部分平臺較難進(jìn)行熱更新的問題逐漸暴露出來。如何提高開發(fā)效率、減少開發(fā)成本并讓游戲更簡便的熱更新成為游戲開發(fā)商的迫切需求。

        Unity的腳本化不僅可以大幅提高開發(fā)效率,減低開發(fā)成本,還能使用熱更新讓用戶可以直接更新游戲而不用重新下載安裝包,可以滿足游戲項目研發(fā)的實際需求?,F(xiàn)在有許多游戲開發(fā)商都在進(jìn)行游戲腳本化的研究,但由于成本問題只進(jìn)行了部分腳本化,即只有少部分經(jīng)常需要改動的功能采用腳本開發(fā),大部分功能依然是使用C#開發(fā)。部分腳本化效率提升有限,且項目中的邏輯代碼分散在C#部分和腳本部分中,不易于管理。本文嘗試結(jié)合騰訊公司的開源項目XLua,設(shè)計并實現(xiàn)Unity的腳本框架。

        1 Unity開發(fā)技術(shù)

        1.1 Unity游戲開發(fā)

        Unity也稱作Unity 3D,是近幾年非常流行的一款3D游戲開發(fā)引擎,其特點就是跨平臺能力強,移植便捷[3]。Unity 3D幾乎已經(jīng)成為快速開發(fā)3D游戲的必備工具。Unity開發(fā)分為原生開發(fā)與腳本開發(fā)。

        原生開發(fā)是指使用Unity官方提供的C#環(huán)境進(jìn)行開發(fā)。使用C#語言進(jìn)行開發(fā)可以直接調(diào)用官方提供的各種接口,且官方和民間均提供了大量的文檔[4],學(xué)習(xí)門檻較低。

        而腳本開發(fā)是指通過Unity插件,可以讓Unity支持使用Lua語言進(jìn)行開發(fā),把一個C#實現(xiàn)替換成Lua實現(xiàn),并通過與C#交互的方式調(diào)用官方接口。官方雖然沒有提供Lua腳本的相關(guān)文檔,但Lua插件均已經(jīng)在腳本運行環(huán)境提供了完善的方法去調(diào)用官方接口,且使用方式基本與C#一致,沒有學(xué)習(xí)障礙。

        1.2 Lua腳本開發(fā)與C#開發(fā)對比

        1.2.1 熱更新

        熱更新可以讓用戶只用下載容量較小的熱更新包即可進(jìn)行游戲內(nèi)容的更新,由于APP Store等一些平臺不允許Unity游戲熱更新C#程序庫,必須使用Lua等腳本語言開發(fā)來實現(xiàn)熱更新功能。

        1.2.2 代碼權(quán)限管理

        完善的代碼權(quán)限管理可以讓業(yè)務(wù)層的開發(fā)者接觸不到核心引擎的代碼權(quán)限,不僅方便進(jìn)行代碼權(quán)限管理,還可以防范核心引擎代碼泄露。

        1.2.3 崩潰情況

        錯誤的C#代碼有可能導(dǎo)致游戲崩潰,而Lua代碼出錯一般只影響局部邏輯,可以上報腳本錯誤,方便后續(xù)解決問題。

        1.2.4 反破解

        反編譯等黑客技術(shù)讓一個C#開發(fā)的程序幾乎沒有秘密,而使用Lua腳本后,腳本部分的代碼可以使用加密并在運行時動態(tài)解密等技術(shù),保證在進(jìn)程空間內(nèi)幾乎沒有完全代碼存在。

        1.2.5 開發(fā)效率

        C#開發(fā)過程中,項目中的任何改動均需要進(jìn)行重新編譯,隨著項目體量的增大,會浪費大量時間在編譯上。使用Lua開發(fā),任何改動均可直接運行項目看結(jié)果,不需編譯,大幅提高開發(fā)效率。

        綜上所述,使用Lua進(jìn)行開發(fā)可以大幅提高開發(fā)效率與項目的安全性[5]。

        2 基于XLua的Unity腳本框架設(shè)計與實現(xiàn)

        2.1 XLua介紹

        XLua是由騰訊公司維護(hù)的一個開源項目,使用XLua不僅可以實現(xiàn)Unity腳本化,更可以在C#層出現(xiàn)BUG后通過熱補丁的方式將C#實現(xiàn)替換為Lua實現(xiàn)從而達(dá)到僅熱更新Lua腳本即可修復(fù)C#層BUG的目的。

        2.2 Unity腳本框架的設(shè)計與實現(xiàn)

        Unity腳本框架由主要由4個部分組成:腳本運行環(huán)境(由XLua提供)、腳本管理器、腳本組件、腳本對象。

        為了提高運行效率,腳本管理器采用單例模式,即游戲程序的生命周期內(nèi),只有一個腳本管理的實例。

        腳本管理器主要負(fù)責(zé)創(chuàng)建腳本運行環(huán)境,管理C#環(huán)境與腳本環(huán)境交互的接口。為了讓C#環(huán)境與腳本環(huán)境交互,還需要使用到XLua提供的CSharpCallLua標(biāo)簽。使用該標(biāo)簽的對象可以將腳本環(huán)境中的對象映射到C#環(huán)境中。

        利用標(biāo)簽CSharpCallLua的特性,將Unity中需要使用的方法封裝在一個使用CSharpCallLua標(biāo)簽的接口ILua中,并在腳本管理器中實現(xiàn)這個接口,讓Unity基礎(chǔ)組件的內(nèi)置方法通過ILua與腳本環(huán)境進(jìn)行交互。

        除了實現(xiàn)接口ILua外,還需要設(shè)計一個腳本組件去處理C#環(huán)境與腳本環(huán)境的交互。其核心功能是將Unity內(nèi)置的回調(diào)方法通過ILua與腳本環(huán)境交互。

        為了提高運行效率,C#環(huán)境中并不保存腳本環(huán)境的實例,而是通過腳本組件的名字、通過ILua去獲取對應(yīng)腳本環(huán)境中的實例,并通過ILua進(jìn)行交互。

        同時,還需要在腳本環(huán)境中設(shè)計一個與腳本組件對應(yīng)的映射對象LuaObject,并通過腳本對象管理器進(jìn)行管理。在創(chuàng)建Unity的GameObject時,腳本對象管理器會自動創(chuàng)建一個對應(yīng)的LuaObject映射到腳本組件上,LuaObject會通過ILua與C#環(huán)境交互。LuaObject在腳本組件被銷毀時自動銷毀并從管理器中移除。

        3 腳本框架性能測試評估

        我們通過一系列的試驗對Unity原生C#開發(fā)與各種Lua腳本插件實現(xiàn)的腳本框架進(jìn)行測試評估。我們測試的內(nèi)容如下:屬性讀寫、成員方法調(diào)用、靜態(tài)方法調(diào)用并返回、純屬性設(shè)置、構(gòu)造valuetype返回。

        3.1 時間消耗測試

        首先,測試時間消耗。為此我們通過相同的測試用例分別運行Unity mono(Unity C#),XLua,ulua,cstolua。得到結(jié)果如表1所示。

        從測試結(jié)果可以看出,所有腳本框架的時間效率都不如直接使用C#開發(fā)。但對比3種腳本框架,XLua插件的時間效率最好,與C#開發(fā)的差距較小。相差較大的是屬性讀取與寫入和構(gòu)造valuetype返回值。但這兩項均可以通過優(yōu)化代碼邏輯去避免使用。

        3.2 空間消耗測試

        接下來我們進(jìn)行了空間消耗的測試。由于所有插件實際操作的均為Unity的對象,因此這里只對比不同插件所需的額外空間消耗。測試結(jié)果如表2所示。

        從測試結(jié)果可知,XLua是3種腳本插件中空間消耗最小的。對比各項測試,空間消耗最大的是屬性讀取與寫入以及構(gòu)造valuetype返回。因此,使用腳本框架時需要謹(jǐn)慎使用屬性讀寫與構(gòu)造valuetype返回。

        經(jīng)過上述測試,我們可以發(fā)現(xiàn),使用XLua實現(xiàn)Unity腳本框架無論是空間消耗還是時間消耗,均可以滿足項目實際使用的要求。

        4 結(jié)語

        本文基于XLua設(shè)計并實現(xiàn)了Unity的腳本框架,犧牲少許運行效率,大幅提高開發(fā)效率與項目安全,讓游戲開發(fā)商無需花費大量成本去進(jìn)行引擎的腳本化,專注于游戲設(shè)計與邏輯編寫,加快開發(fā)速度,減少開發(fā)成本,具有實際參考價值。

        [參考文獻(xiàn)]

        [1]趙靚,張彥.淺析手機媒體娛樂化趨勢產(chǎn)生的原因[J].消費導(dǎo)刊,2010(4):205.

        [2]大鵬.基于Unity引擎的手機游戲客戶端的研究與實現(xiàn)[D].西安:西安電子科技大學(xué),2014.

        [3]趙靚,張彥.基于Unity3D的飛行小鳥游戲的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2018(30):65-66.

        [4]宣雨松.UNITY3D游戲開發(fā)[M].北京:人民郵電出版社,2012.

        [5]EBERLY D H.3D Game engine architecture: engineering real-time applications with wild magic[J].3D Game Engine Architecture,2004(7):699-701.

        猜你喜歡
        腳本
        人生腳本
        酒駕
        此去人海茫茫,各自風(fēng)雨燦爛
        安奇奇與小cool 龍(第二回)
        數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
        電子測試(2018年14期)2018-09-26 06:04:24
        自動推送與網(wǎng)站匹配的腳本
        電腦愛好者(2018年6期)2018-04-23 16:53:16
        快樂假期
        神奇的數(shù)學(xué)
        愚人節(jié)大作戰(zhàn)
        小編的新年愿望
        中學(xué)生(2017年1期)2017-03-24 09:54:28
        亚洲av无码乱码国产麻豆穿越| 久久久久久夜精品精品免费啦| 国产精品久久久久精品一区二区| 依依成人精品视频在线观看| 日韩在线视精品在亚洲| 日本黄色特级一区二区三区| 久久综合噜噜激激的五月天| 99精品一区二区三区无码吞精| 无码人妻专区免费视频| 亚洲一区二区三区资源| 久久国语露脸国产精品电影| 人人澡人人澡人人看添av| 日韩欧美亚洲中字幕在线播放| 青青草绿色华人播放在线视频 | 国产午夜三级一区二区三| 在线观看精品视频一区二区三区| 亚洲肥婆一区二区三区| 精品国品一二三产品区别在线观看| 亚洲 高清 成人 动漫| 少妇特殊按摩高潮惨叫无码| 黄色影院不卡一区二区| 无码人妻人妻经典| 正在播放亚洲一区| 久久婷婷夜色精品国产| 久久天天躁夜夜躁狠狠85麻豆| 久久久噜噜噜www成人网| 加勒比黑人在线| 精品麻豆一区二区三区乱码| 18禁裸男晨勃露j毛网站| 欧韩视频一区二区无码| 久久国产劲爆内射日本| 成年女人免费v片| 亚洲成色www久久网站夜月| 无码专区亚洲avl| 亚洲视频免费在线观看| 少妇aaa级久久久无码精品片 | 人妻av无码系列一区二区三区| 亚洲ⅤA中文字幕无码| 免费在线亚洲视频观看| 狠狠精品久久久无码中文字幕 | 国产人妻熟女高跟丝袜图片|