屬性系統 編輯器和引擎的強力粘合劑

2021-06-01 22:56:07 字數 762 閱讀 9479

很多時候,如果在做引擎的時候,不考慮編輯器怎麼做,將來會是一件極其痛苦的事情。

簡單的舉例如下:

1. 很多物體有很多的屬性要編輯,比如粒子系統的發射器屬性,效果器屬性。這些大量的屬性,如果你沒有一套很好的機制來描述的話,做編輯器的時候,將會是災難。

2. 很多時候,引擎的擴充套件性帶來得乙個問題是,物體的型別是未知的,如何在編輯器裡做編輯?比如你的粒子系統的發射器型別未知,效果器未知(都是可以擴充套件的嘛),這些未知的物體有未知的屬性。另外,材質系統中,shader引數(不同的 shader有不同的引數)的編輯等等。

如果說1是還可以補救的災難,那麼問題2就是無法解決的。

在c#中,可以採用property的方式,給物體暴露出property就可以了。這個property可以被property grid控制項直接識別。

但是在 c++中沒有property關鍵字。但是我們可以自己實現乙個。

具體實現注意以下幾個事情:

1. 如果沒人用到屬性系統,就不要去建立它。就是說預設的物件沒有屬性系統的,只有有人要使用該物件的屬性系統的時候,才會建立property的例項。

2. 描述性盡量強大一些。我的引擎採用xml輔助來描述。

3. 盡量使用的時候簡單一些,比如property->setvalue() 就能直接改變物體的屬性。

4. 訊息通知機制, setvalue完後,可以採用一定的方式通知 物體本身,對屬性的修改做出反應。

5. 將這套property系統和乙個控制項鏈結起來,預設只要把property物件丟給控制項,就可以自動顯示了。

Ogre粒子系統編輯器

在ogre程式中,粒子系統可以利用 實現,但也可以利用指令碼語言。不過,一般情況下,都是利用指令碼語言。在ogre中只要將記事本的字尾名定義為.particle,ogre會自動識別其為粒子指令碼。現在有人製作了乙個particleeditor 可以方便的在其介面中設定我們需要的粒子指令碼,同時將其資...

linux學習 檔案 系統 編輯器

可分享的 不可分享的 不可變的 user 軟體 etc 配置檔案 opt 第三方協力軟體 boot 開機檔案 可變動的 var mail 使用者郵件 var run 程式相關 var spool.news 新聞組 var lock 程式相關 命令說明 stat whohostname 顯示主機名稱 ...

基於屬性的編輯器框架

看了ogitor的 後,自己又實踐了一把,結合n3中學到的一些技巧,在編輯器中得到了驗證.雖說做的是場景編輯器,但是其它編輯器也可以用的,畢竟思想都差不多.對於乙個編輯器,通常是由乙個個的 實體 組成,或者叫 物件 而 物件 又是由各種 屬性 所組成.以場景編輯器為例,我們通常會涉及以下操作 可以看...