owl-bt はビヘイビアツリーのエディターです。これは、ある意味、Unreal エンジンのビヘイビアー ツリーからインスピレーションを受けており、デコレーターやサービスなどの特別なノード項目をサポートしています。これにより、ツリーが小さくなり、読みやすくなります。
owl-bt は、ライブの npc の動作に焦点を当てているゲーム Tendril: Echo Received 用のビヘイビア ツリー エディタが必要だったために作成されました。
既存のソリューションのいくつかを試しましたが、次のような要件を満たしていませんでした。
npm install owl-bt -g
owlbt -h
cd < project-dir >
owlbt i
owlbt c < tree-path >
owlbt o path
owl-bt は、デフォルトではポート8955
でサービスとして実行されます。これは、ユーザーのホーム ディレクトリに作成する必要がある設定ファイル.owlbtrc
で変更できます。
{
"port" : 1234
}
owl-bt には 3 種類の項目があります。
ctrl+shift+p
でアクセスできますプロジェクト ファイル ( owl-bt.json
) は、ツリーで使用できるすべてのノードとノード項目タイプを定義します。
fa-
プレフィックスのない font-awesome からのアイコンの名前){{PropertyName}}
のプレースホルダーが含まれる場合がありますfa-
プレフィックスのない font-awesome からのアイコンの名前){{PropertyName}}
のプレースホルダーが含まれる場合がありますfa-
プレフィックスのない font-awesome からのアイコンの名前){{PropertyName}}
のプレースホルダーが含まれる場合がありますカスタムプロパティタイプを定義できるようにします
例:
{
"types" :{
"myString" : {
"type" : " string " ,
"pattern" : " v[0-9] "
}
},
"nodes" : [
{
"name" : " SetAlertLevel " ,
"icon" : " exclamation " ,
"description" : " Set alert level to " {{Level}} " " ,
"isComposite" : false ,
"properties" : [
{
"name" : " Level " ,
"default" : " None " ,
"type" : " enum " ,
"values" : [
" None " ,
" Investigate " ,
" HighAlert " ,
" Panic "
]
}
]
}
],
"decorators" : [
{
"name" : " HasZoneReportedEnemy " ,
"icon" : " phone " ,
"properties" : [
{
"name" : " MaxReportAge " ,
"default" : 1 ,
"type" : " number "
}
]
}
],
"services" : [
{
"name" : " ReadPlayerPos " ,
"icon" : " pencil " ,
"description" : " Store player pos to " {{BlackboardKey}} " " ,
"properties" : [
{
"name" : " BlackboardKey " ,
"default" : " Target " ,
"type" : " string "
}
]
}
]
}
{
"type" : " Selector " ,
"name" : " rootNode " ,
"childNodes" : [
{
"type" : " Sequence " ,
"services" : [
{
"type" : " Sample service "
}
],
"decorators" : [
{
"type" : " IsBlackboardValueSet " ,
"properties" : [
{
"name" : " Field " ,
"value" : " myValue "
}
],
"periodic" : true
}
]
}
]
}
base
設定を使用して、別のタイプからノード項目タイプを派生させることができます。
base
設定にはstring
またはarray of strings
を使用できます。配列の場合、基本項目タイプは指定された順序で適用されます。つまり、後の項目タイプは、その前に指定された項目をオーバーライドします。
ベースノードを作成できます:
{
"name" : " MyBaseNode " ,
"icon" : " arrow-right " ,
"color" : " red " ,
"isAbstract" : true ,
"properties" : [
{
"name" : " prop-from-base1 " ,
"type" : " string "
},
{
"name" : " prop-from-base2 " ,
"type" : " number "
}
]
},
そして派生ノード:
{
"name" : " MyDerivedNode " ,
"color" : " blue " ,
"base" : " MyBaseNode " ,
"properties" : [
{
"name" : " prop1 " ,
"type" : " string "
},
{
"name" : " prop-from-base2 " ,
"default" : " abc " ,
"type" : " string "
}
]
},
継承を適用した後の結果のノードは次のようになります。
{
"name" : " MyDerivedNode " ,
"icon" : " arrow-right " ,
"color" : " blue " ,
"base" : " MyBaseNode " ,
"properties" : [
{
"name" : " prop-from-base1 " ,
"type" : " string "
},
{
"name" : " prop-from-base2 " ,
"default" : " abc " ,
"type" : " string "
},
{
"name" : " prop1 " ,
"type" : " string "
}
]
},
プロジェクト ファイルowl-bt.json
と同じディレクトリにあるowl-bt.js
ファイルはプラグインとみなされます。プラグイン js ファイルは、プラグイン関数を含むオブジェクトをエクスポートします。
module . exports = {
onTreeSave : ( { tree , path , project , projectPath } ) => {
} ,
onTreeLoad : ( { tree , path , project , projectPath } ) => {
}
}
onTreeSave
- ツリー json ファイルがディスクに保存される前に実行されます。 tree
オブジェクトの変更のみが許可されます。tree
- ツリーオブジェクト (ツリー JSON ファイルによる)path
- ツリーファイルのパスproject
- プロジェクト オブジェクト ( owl-bt.json
ファイルによる)projectPath
- プロジェクト ファイルのパスreturn
- 戻り値がfalse
または文字列の場合、保存は阻止され、クライアントにエラーが返されます。onTreeLoad
- ディスクからツリー JSON ファイルをロードした後に実行されます。 tree
オブジェクトの変更のみが許可されます。tree
- ツリーオブジェクト (ツリー JSON ファイルによる)path
- ツリーファイルのパスproject
- プロジェクト オブジェクト ( owl-bt.json
ファイルによる)projectPath
- プロジェクト ファイルのパスたとえば、 onTreeSave
およびonTreeLoad
使用してカスタム ツリー ファイル形式を作成することができます。プロジェクトのパスをツリー ファイルに保存したい場合は、次のプラグインを作成できます。
module . exports = {
onTreeSave : ( { tree , path , project , projectPath } ) => {
tree . projectPath = projectPath ;
}
}
base
とisAbstract
プロパティを参照してくださいctrl+shift+p
-> 'core:Set Node Type'
またはrmb
-> 'Set Node Type'
)