今天開始進行新項目的預研,有關游戲引擎的腳本系統。之前自己對Python有所了解,但也僅僅限于應用層,如今要把一個腳本系統加入到游戲引擎里面,一時還有點不知道如何下手。趕緊上網查資料,逛了大半天的gamedev,現在總算有點眉目了。
首先要明確的是腳本系統在游戲引擎中扮演什么樣的角色。
腳本系統的必要性
游戲作為上層應用程序,是在游戲引擎的基礎上運行的,現在游戲的發展趨勢來看,游戲者(gamer)對游戲的可自我配置性有非常高的需求,特別是在游戲運行時的自我配置,已經不能通過簡單的傳參數來完成這種配置。所以,整個游戲的架構有分成兩大塊的發展趨勢。一塊是kernel,另一塊是configuration。Kernel是游戲的基礎類&Object的集合,而configuration是針對特定的上層應用程序(游戲本身),對kernel的元素進行組織&配置。腳本系統無疑將是configuration的重要組成部分。
游戲引擎需要為腳本系統提供的接口
我們把游戲中的物體(實例)稱為object,把可以作用于object的函數叫action
1、保存全局變量&局部變量
2、得到object(s)的引用
3、得到object(s)的屬性,并調用object的action
4、提供timer進行周期性觸發action
以上4點并不全面,但是卻是最最基本需要支持的部分。如果需要更深入,應該還要提供對靜態場景的配置、設置場景結束條件以及完善的Debug機制等等。
游戲引擎不應該為腳本系統提供的接口
1、畫圖&播放聲音等算法
2、內存管理
以上2點也并不全面,因為目前的項目沒有網絡方面的需求,所以沒有考慮安全等因素進來。
雜七雜八
外設響應
我們把所有的gamer的輸入都歸納為外設輸入。那么在游戲引擎里面,對外設的響應應該是游戲實時反應能力的直接體現,在去年從事的游戲引擎項目中,采用了類似于windows消息隊列的方式,對某種特定外設輸入(比如:游戲手柄左鍵按下),掛上一個寫死的函數。在腳本系統引入以后,應該不再掛上一個編譯式語言編寫的響應函數,而是調用腳本解釋器來運行掛在這個外設上的腳本。所有外設都采用腳本來響應,這一思想是保證游戲可用戶自我配置的關鍵之一。
冗余
腳本的性能總是令人頭疼的。所以在引擎提供給腳本的接口當中(全面所述4點當然在內),不要害怕冗余的情況出現,而是要針對游戲開發者的需求,適當的增加引擎輸出的功能,讓游戲開發者在使用腳本的時候,能用將腳本寫得盡量的簡單。舉例來講:比如需要在某個時刻獲得離主角最近的怪獸,如果只使用前面所提的4種接口,需要在腳本里面枚舉出所有的怪獸,然后一一與主角的坐標進行距離計算,然后才能得到最近的一個怪獸。這是十分低效的。如果這一動作需要頻繁發生,那么勢必影響游戲的整體運行效率。解決辦法就是在游戲引擎里面提供一個類似功能的API,由游戲引擎本身的開發語言(一般是編譯式語言)來完成這項功能,而游戲開發者只需要在腳本里面調用這個API即可完成這項運算。如此做法在效率上應該比前面的做法要高出許多。
posted on 2007-05-30 22:07
tianlinux 閱讀(1054)
評論(1) 編輯 收藏 所屬分類:
腳本語言