Home > Tags > Scripting

Scripting

開始實作引擎的基本類別

話說之前想做 Collada 滙入,便最基本要有一個內部存放 Collada 滙入後的資料。這個「雙休日」(內地常用語) 就留在家中乖乖寫程式……寫不出的時候也看了十幾集動畫。

架構上參考了之前看過的 Unity,採用 Component 型式。目前實現的幾個類別的關係如下圖:

採用 Component 架構的一個好處是,減少了傳統 Scene Graph 的類別繼承和節點 (node) 數目。一個實體 (entity, 有些引擎稱為 Game Object) 可以有 Mesh 元件,也可以同時加入腳本、碰撞物件等元件。

實作過程中出現許多問題,和大家 (及將來的自己) 分享一下。

Continue reading

解構 CryEngine2 的 Script 物件模型(一)

這幾天看了一點 Crysis 的 Script。CryEngine2 和 CryEngine 一樣是使用 Lua 為 Script 語言。CryEngine2 把 Lua 升級上 5.x 的版本。

雖然 CryEngine2 的功能實在比 CryEngine 進步許多,可是,有點失望的是 Crysis 的說明文檔比 Farcry 少,甚至最近才釋出的 SDK 也沒有 Script 的 API 參考文檔。暫時只看了一篇官方的 “Creating a new entity”文章和 Crysis 遊戲裡的 Script,所以很多以下的內容是未經証實的猜想。

這是部份 Script 物件模型的 UML 類別圖:

crysis.png

由於 CryEngine 的 Script 是 loosely typed,實際上並沒有真正的 Base、EntityBase 等類別和繼承存在。這圖所顯示的,只是我從例子中找到的一些共同部分,把它組合成類別及繼承。由於時間關係,我需要分開數天研究不同的「類別」,今天主要集中看 Entity。

Continue reading

解構Unity的Script物件模型

Unity 是一個以 Mono 為基礎的遊戲開發環境,能同時支持三種腳本語言,包括 C#、Javascript 和 Boo (類似 Python)。

由於 Unity 的開發工具暫時只有 Mac 的版本,所以暫時未能測試。但是它有很詳細的文檔,看上來很易用,所以就從文字上學習它的 Script 使用方式。

跟據一些 Tutorial參考手冊,我用 Graphviz 畫了一個 (我認為) 最核心的 UML 類別圖:

unity1.png

從這個類別圖我們可以理解它的結構,及如何把一些常用功能映射至這系統裡,以下分節討論。

Continue reading

Immediate Mode GUI

今晚主要在思考 GUI 的問題。因為之前看 mono 提及 Unity 這個引擎,便去看 Unity 對 GUI 的部份,參考它支持甚麼功能和如何跟 Script 結合。

一看之下,竟然是這種奇異的寫法:

function OnGUI () {
    if (GUI.Button (Rect (10,10,150,100), "I am a button")) {
        print ("You clicked the button!");
    }
}

Continue reading

混合語言的遊戲開發系統架構

用甚麼程式語言來做軟件是一個大問題,思考了一個周末,現時想做一個混合語言的遊戲開發系統架構。暫時只考慮三種程式語言: C++、C# 及 Lua。以下首先分析這三種語言的特性,之後再提出一個系統架構科案。

Continue reading

試驗SWIG (一) C++ 連接C#和Lua

今晚初次嘗試使用 SWIG (Simple Wrapper Interface Generator)。SWIG 是一個能為 C/C++ 程式生成各種 Script 語言 Wrapper 的工具。簡單地說,就是有了一個 C++ 程式,用 SWIG 來連結這個程式和 Script,使腳本語言可以呼叫 C++ 的函數及類別等等。

SWIG 支持大部份 C++ 的功能,甚至 template 也能支持。同時可以生成十數種腳本語言的 wrapper,包括我正在考慮使用的 Lua、Python 和 C# 等。

跟據我的目標,先做一個 3D Vector 的測試。以下是一部份C++代碼 (Vector3.h):

Continue reading

Home > Tags > Scripting

Search
Feeds
Meta

Return to page top