国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

3D街機游戲系統(tǒng)研究與應用

2017-03-27 14:15鄧增強朱錚濤龍詩軍
電腦知識與技術 2017年3期

鄧增強++朱錚濤++龍詩軍

摘要:針對當前國內(nèi)街機游戲開發(fā)難度大、難以移植、開發(fā)周期長的問題,提出Unity3D引擎結(jié)合Android平臺技術的街機開發(fā)方案。該項目用Unity3D引擎開發(fā)一款游戲,完成Android系統(tǒng)與Unity3D的數(shù)據(jù)交互、添加NGUI事件源,從而實現(xiàn)外部硬件設備控制游戲及游戲中的交互界面。針對廠家生產(chǎn)需求開發(fā)一個安卓系統(tǒng)桌面啟動器并監(jiān)聽Android開機廣播實現(xiàn)開機啟動游戲,預裝游戲軟件實現(xiàn)系統(tǒng)集成。實踐表明該系統(tǒng)完成度高,該開發(fā)方案開發(fā)效率高,在街機游戲開發(fā)和應用方面有一定的推廣應用價值。

關鍵詞:街機游戲;Unity3D;NGUI;Android; 安卓系統(tǒng)桌面啟動器

中圖分類號:TP317 文獻標識碼:A 文章編號:1009-3044(2017)03-0202-04

Research and Application of 3D Arcade Game System

DENG Zeng-qiang1, ZHU Zheng-tao1,LONG Shi-jun2

(1.Guangdong University of Technology, College of Information Engineering,Guangzhou 510006,China;2.Longsys Electronics Company Limited,Shenzhen 518057,China)

Abstract: Consider the difficult of development,transplant and the problem of long development cycle of the current arcade development in China,an arcade development plan by using Unity3D engine combined the technology of the Android platform was proposed.In order to realize external hardware equipment to control the game and the game's interface,data interaction between Android system and Unity3D was completed ,add NGUI event source.Consider the demand for the manufacturers,a launcher was developed to monitor Android broadcast,pre-installed game APK to realize system integration.The result shows that the system is highly completed,the development plan is efficiency,and it has certain value of popularization and application in arcade game development and application.

Key words:arcade games; unity3d; ngui; android; launcher

1 概述

街機是置于公共娛樂場所的經(jīng)營性專用游戲機[1]。1971年麻省理工學院學生諾蘭.布施內(nèi)爾設計了世界上第一個業(yè)務用游戲機開始,街機這一名詞開始出現(xiàn)[2]。20世紀80年代街機游戲開始蓬勃發(fā)展,到21世紀初,期間出現(xiàn)了眾多優(yōu)秀的街機游戲。隨著計算機技術的發(fā)展,各種形式的游戲開始涌現(xiàn),如:PC游戲、手游、電視游戲等,這些新興的游戲方式?jīng)_擊著街機游戲市場。然而,街機游戲的臨場感、操控感和體驗感是PC游戲和手游等無法比擬的[3]。由此,街機游戲還是擁有數(shù)量可觀的玩家用戶。但作為開發(fā)者和廠商來說,街機游戲并不歡迎,其原因主要是開發(fā)方式難、硬件成本高、一臺機器只能運行一個游戲。

隨著Android平臺和Unity3D游戲開發(fā)引擎的出現(xiàn),街機游戲的開發(fā)方式也出現(xiàn)了新的可能。Android平臺是開源系統(tǒng),其開放性和廣泛的硬件支持的特點吸引眾多的開發(fā)者進行游戲開發(fā)[4]。為簡化游戲開發(fā),選用Unity3D游戲引擎,該引擎有良好的跨平臺特性、打包發(fā)布簡單、良好的移植性的特點,開發(fā)者無需了解底層技術即可進行開發(fā),大大縮短了開發(fā)時間周期[5]。Unity3D 中整合如地形創(chuàng)建工具、碰撞檢測和燈光渲染組件、粒子系統(tǒng)、物理引擎、常用腳本等豐富的開發(fā)資源。同時,還在Mono Behavior這個類庫中為開發(fā)者定義了各種實用的方法,從而為開發(fā)提供了更大的方便[6,7]。本項目以Unity3D技術為基礎,實現(xiàn)一款街機游戲,以Android技術為輔助,實現(xiàn)游戲控制和系統(tǒng)集成。該系統(tǒng)為解決街機游戲開發(fā)困境提供一定的引導和參考。

2 設計內(nèi)容概述

該項目為一款針對兒童用戶的安卓平臺游戲,采用三維游戲風格,最終將游戲集成到安卓源碼,實現(xiàn)自定義安卓系統(tǒng)桌面啟動器(launcher)和針對游戲軟件的開機自啟。系統(tǒng)主要模塊包括兩部分:客戶端游戲軟件模塊和安卓系統(tǒng)集成模塊。

2.1 游戲玩法介紹

游戲設置有三個場景:草原、雪地、海島,每個場景跑道都設置有路障。玩家使用操縱拉繩操控馬匹,在限定的時間內(nèi)與電腦馬匹競賽,玩家可以操控馬匹加速,限定時間倒計時結(jié)束判定玩家馬匹在跑道上的位置進行排名。游戲流程如圖1。

圖1 游戲過程展示

游戲操控方式通過馬匹上左右兩條韁繩控制左右移動,同時拉兩根韁繩表示主角跳起,而在交互界面場景中表示“確定”,馬身一個按鍵控制主角加速,機箱處留有投幣處和商家進入后臺參數(shù)設置界面的按鍵。

2.2 主要模塊及功能

客戶端軟件模塊是軟件的主要模塊,是直接影響玩家用戶體驗的重要部分,該模塊使用C#編寫游戲邏輯和交互界面。在Unity3D游戲引擎中導入游戲需要的場景資源:圖片素材、角色模型、場景模型、音樂資源、字體等,編寫腳本代碼控制游戲邏輯,例如:角色行為控制、AI尋路、UI等。

生產(chǎn)廠家在生產(chǎn)中有硬件制作、系統(tǒng)鏡像燒錄、游戲安裝等過程。然而,這樣每次機器運行需要選擇游戲應用圖標進入游戲,大大增加了操作復雜度,不符合街機生產(chǎn)需求。針對這一情況,筆者將游戲APK(Android Package)預裝到Android系統(tǒng)中,并開發(fā)一個launcher替換系統(tǒng)原生launcher,由此launcher啟動游戲?;谝陨厦枋隹傻庙椖筷P鍵模塊框架如圖2。由于篇幅限制,本文對開發(fā)過程中模型導入、粒子系統(tǒng)、Android源碼編譯等不做描述。

圖2 游戲總體框架圖

3 系統(tǒng)關鍵模塊技術及實現(xiàn)

3.1 控制功能模塊

區(qū)別手機游戲觸摸控制和PC游戲的鍵盤控制,本游戲依賴外部硬件設備,通過串口數(shù)據(jù)通信與Android平臺進行數(shù)據(jù)交互。

Unity3D與Android數(shù)據(jù)傳輸?shù)姆绞接卸喾N??梢栽贓clipse中編寫所需的Android平臺功能,以庫文件的形式在Unity3D中使用;也可以將Unity項目導出為Android項目,然后編寫Android程序,兩種方式都可實現(xiàn)數(shù)據(jù)傳輸,只是實現(xiàn)過程有區(qū)別。本項目以Unity3D為主,將Eclipse的功能制作成插件集成到Unity3D中,其原理是使用Android NDK將C/C++編寫的代碼編譯成.so文件后,在Unity3D中用C#代碼進行相互調(diào)用,具體實現(xiàn)方法為:

1)使用Eclipse創(chuàng)建一個庫文件工程;

2)在Eclipse中編寫串口操作,遵循普遍串口操作規(guī)律,實現(xiàn)打開串口、讀寫串口、關閉串口,繼承UnityPlayerActivity實現(xiàn)Activity與Unity對接,并封裝一系列的方法來為Unity3D提供訪問串口讀寫數(shù)據(jù)的接口,然后輸出.jar格式庫文件,代碼片段:

public String getJumpPass()

{return jumpPass;}

public void setJumpPass(String jumpPass) {this.jumpPass = jumpPass;}

3)復制AndroidManifest.xml、.so文件、.jar文件到Unity3D目錄Plugins/Android下,重新設置AndroidManifest.xml中activity名稱,使之與Eclipse工程中activity一致;

4)Unity3D創(chuàng)建SerialPortData.cs腳本訪問.jar庫。在Start()函數(shù)中獲取Android的activity,從而訪問.jar庫文件中傳來的字符串數(shù)據(jù),據(jù)此判斷玩家或商家做出的操作;

void Start(){

AndroidJavaClass jc=new AndroidJava- Class("com.unity3d.player.UnityPlayer"); activity=jc.GetStatic("currentActivity");}

在Update()函數(shù)中每幀刷新一次,檢測是否有新的操作,代碼片段如下:

void Update(){

string coin=":020"; //投幣信號

string jump=":290"; //上跳或者確認

string left=":210"; //左操作

string right=":220"; //右操作

string accelerate = ":230";//加速信號

string bkEnter = ":240"; //后臺信號if(activity.Call(“getJumpPass")==jump)

{activity.Call("setJumpPass","");

isjump = true;}}

其中”:290\n”等是串口通信協(xié)議,利用AndroidJavaObject的Call()方法獲取串口數(shù)據(jù),通過比較字符串確定操作是否成功。

3.2 交互界面實現(xiàn)

游戲中涉及的界面操作有玩家選擇場景界面和商家后臺參數(shù)設置界面,界面設計采用NGUI插件。NGUI[8]是專門針對unity引擎,用C#語言編寫的一套插件,相比較unity3D原生引擎GUI和NewGUI系統(tǒng)功能更強大、操作更方便,它提供了強大的事件機制,通過UICamera監(jiān)聽UI事件并分發(fā)事件,事件覆蓋此camera渲染的GameObject。游戲中玩家投幣達到商家設定的數(shù)量后,游戲進入場景選擇界面如圖3。

圖3 場景選擇界面

UICamera監(jiān)聽的事件源有鼠標、鍵盤、觸屏和手柄。而本游戲控制依賴外部硬件設備,通過串口輸入與Android系統(tǒng)通信,UICamera事件源并不包括串口控制方式。因此,通過UICamera.cs中Update()添加事件源,Notify()分發(fā)事件處理函數(shù)的方式對NGUI做二次開發(fā),左拉韁繩操作事件代碼:

if(SerialPortData.leftpull)

{SerialPortData.leftpull = false;

currentScheme=ControlScheme.Controller; Notify(mCurrentSelection,"OnSignalLeft",null);Notify(editActiveValue,"OnSignalLeft",null);}

其中Notify封裝SendMessage方法分發(fā)事件,參數(shù)一為接收消息的游戲?qū)ο?,參?shù)二為函數(shù)名。為了使操控效果美觀,添加WrapContent腳本實現(xiàn)無限滑動效果,添加UIKeyNavigation定位UI。當監(jiān)聽到控制事件,立即轉(zhuǎn)發(fā)到對應的處理函數(shù),函數(shù)片段:

public class NewUIKeyNavigation : UIKey- Navigation {void OnSignalLeft()

{if (!NGUITools.GetActive(this)) return;

GameObject go = null;

go = GetLeft();

go.GetComponent().O-nClick ();if (go != null)

UICamera.selectedObject = go;}......}

街機游戲每局需要的投幣數(shù)量是商家設定的,此時就需要定制一個后臺參數(shù)設置界面如圖4。參數(shù)包括:中英文切換、游戲時長、每次游戲需投幣數(shù)目、背景音樂開關。

圖4 后臺設置界面

后臺設置使用Unity3D提供的Player- Prefs類持久化保存和讀取數(shù)據(jù),該類以鍵值對的形式將數(shù)據(jù)保存在本地文件中,保存成功后通過“鍵”訪問數(shù)據(jù)值。

3.3 尋路AI

游戲AI設計是評價一個游戲可玩性的一個重要指標,本游戲使用AI是尋路AI。Unity3D中常用的尋路AI算法有A*(A-Star)、導航網(wǎng)格(NavMeshAgent)、路點尋路。

A*算法是目前用來解決靜態(tài)網(wǎng)格求最短路徑問題最有效的算法[9]。普通搜索算法,如廣度優(yōu)先和深度優(yōu)先算法,通過遍歷所有解從而去尋找最優(yōu)解,當解的數(shù)量過多,普通算法效率過低。A*算法使用啟發(fā)式搜索算法,對每個搜索位置進行評估,提高搜索效率。A*算法適用地圖類型為靜態(tài)網(wǎng)格的游戲,所以必須是先設計好屬性固定不變的地圖,且必須已知起點和終點,本游戲角色在場景中起始位置確定,但終點位置不定,所以A*尋路不適用本游戲。

導航網(wǎng)格[10](NavMesh)尋路方法是Unity3D自3.5版本起增加的內(nèi)置插件。其原理是通過烘焙將地形的信息記錄起來, 游戲物體掛載NavMeshAgent組件,導航物體便會自行根據(jù)目標點來尋找最直接的路線,并沿著該線路到達目標點。角色會繞過或者跳躍過各種復雜的障礙,找到一條理論上“最短路徑”。在本游戲中這種方式實現(xiàn)自動尋路會存在很多不定的因素,如場景道路邊界存在拐點,自動尋路時移動角色會緊貼拐點移動,并不適合路徑隨機、移動平滑等需求,導致游戲可玩性不高。

路點尋路方式是在地圖場景中設置一些節(jié)點并且構(gòu)成連通的網(wǎng)絡區(qū)域,每一個節(jié)點表示一個路點(WayPoint)[11],游戲角色沿連通的網(wǎng)絡線移動,該路線由開發(fā)者設定,并不是最優(yōu)路徑,而且游戲角色每次穿過一個路點時產(chǎn)生一個隨機小角度起始方向角度并沿該方向?qū)ふ蚁乱宦伏c。路點尋路方式適合用于大地圖場景,而且對系統(tǒng)消耗更小,實現(xiàn)方法簡單有效。綜上,本游戲選用路點尋路AI,其具體實現(xiàn)流程為:

1)在場景地圖上設置路點,為路點添加sphere碰撞體,并設置tag標簽“playerways”,并將路點對象按順序放進程序定義的public數(shù)組中;

2)通過OnTriggerExit(Collider other)函數(shù)判定當前路點索引值;

3)以一定的速度朝下一路點移動,如果到達最后一個路點并且游戲時間未結(jié)束,則將數(shù)組索引置零,方式如下:

if(NUM==waypoints.Length-1) transform.LookAt(waypoints[0]);else transform.LookAt(waypoints[NUM+1]);

圖5 路點尋路示意圖

3.4 系統(tǒng)集成關鍵技術

Android桌面就是一個應用軟件,管理所有已安裝的應用。實驗中發(fā)現(xiàn),通過系統(tǒng)原生launcher啟動本游戲會在桌面停留,影響系統(tǒng)流暢性。由此,筆者自定義launcher,替換系統(tǒng)原生launcher,并屏蔽桌面界面。Android系統(tǒng)開機會發(fā)送一個開機廣播,在自定義launcher的AndroidManifest.xml文件注冊接收開機廣播,并設置其為開機啟動程序。編寫腳本繼承BroadcastReceiver,實現(xiàn)通過游戲APK包名啟動游戲。

前文提到為廠家生產(chǎn)方便,需將游戲預裝到安卓源碼,并裁剪安卓源碼,縮小系統(tǒng)鏡像包體,加速鏡像燒錄,最終廠家只需要硬件平臺和預裝了游戲APK和launcher的鏡像。預裝中注意將游戲APK中的庫文件放在device/softwinner/fiber-commom/prebuild/-apklib文件中,將游戲APK放入prebuild/ preinstall-apk目錄下,并修改該目錄下的Android.mk,對該apk進行申明。自定義launcher替換原生launcher時應刪除原生launcher,并在當前文件夾下Android.mk文件中聲明添加LOCAL_OVERRIDES_PACKA- GES := launcher2;否則第一次開機需要選擇launcher啟動器,系統(tǒng)不連貫。

4 系統(tǒng)展示

整個街機游戲系統(tǒng)從開啟,如圖6(a)到進入游戲,如圖6(b),總共耗時35秒左右,系統(tǒng)運行流暢,無卡頓閃退等情況,投幣、角色控制、后臺控制等功能準確有效,交互界面簡潔實用,整機如圖6(c)。

圖6 街機游戲整體效果圖

5 結(jié)束語

本文就以往街機開發(fā)方式困難、開發(fā)成本高的問題,提出一種結(jié)合Unity3D游戲引擎和Android平臺技術的街機開發(fā)方案,為突破以往街機開發(fā)方式,提出新的方案,具備一定的推廣應用的價值。整個街機系統(tǒng)符合生產(chǎn)需求和游戲本身的設計需求,達到預期效果。當然,本游戲在游戲內(nèi)容設計和優(yōu)化方面稍顯不足。目前,只有預裝一個游戲。因此,后續(xù)可以開發(fā)更多游戲并開發(fā)一個安卓應用來管理這些游戲,豐富街機內(nèi)容。

參考文獻:

[1]劉卓.電子游戲的娛樂體驗與交互設計[D].無錫:江南大學,2008.

[2]王崢.試論電子游戲與社會的互動[J].哈爾濱工業(yè)大學學報:社會科學版,2005,7(4):26-30.

[3]唐潔.VC++2008開發(fā)網(wǎng)絡百家樂游戲[J].電腦編程技術與維護,2011,13(10):68-78.

[4]壽柏炎.基于Android平臺軟件開發(fā)方法的研究與應用[J].計算機光盤軟件與應用,2013(01):244-245.

[5]袁田琛,胡新榮,趙儉輝.基于Leap Motion和Unity3D的體感游戲開發(fā)與集成[J].電腦知識與技術,2015,11(13):201-204.

[6]劉冬梅,宋平,鄧英芝,等.基于Unity3D的"林大的松鼠”APP的設計與實現(xiàn)[J].智能計算機與應用,2015,5(2):80-85.

[7]谷敏,康雪麗.數(shù)據(jù)驅(qū)動的Unity3D場景約束框架的分析與設計[J].電腦知識與術,2015,11(30):180-183.

[8]相茂英,馬純永,韓勇,等.基于Unity3D的化工設備虛擬培訓系統(tǒng)研究[J].計算機技術與發(fā)展,2014,24(07):196-200.

[9]周小鏡.游戲地圖中尋找路徑的改進算法研究[J].信息技術,2010(12):125-127.

[10]Sturtevant N R,Buro M.Improving Collaborative Pathfinding Using Map Abstrac//AIIDE[C]. Marina del Rey, California: Proceedings of the Second Artificial Intelligence and Interactive Digital Entertainment Conference, 2006:80-85.

[11]臧曉強.手機游戲AI引擎設計[D].延吉:延邊大學,2008.