owl-bt는 행동 트리의 편집자입니다. 데코레이터 및 서비스와 같은 특수 노드 항목을 지원하는 방식으로 Unreal 엔진 비헤이비어 트리에서 영감을 받았습니다. 이렇게 하면 트리가 더 작아지고 훨씬 더 읽기 쉬워집니다.
owl-bt는 실시간 npc 동작에 초점을 맞추고 있는 Tendril: Echo Receiverd 게임에 대한 동작 트리 편집기가 필요했기 때문에 만들어졌습니다.
기존 솔루션 중 일부를 시도했지만 다음과 같은 요구 사항을 충족하지 못했습니다.
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에는 세 가지 유형의 항목이 있습니다.
ctrl+shift+p
통해 접근할 수 있습니다. 프로젝트 파일( owl-bt.json
)은 트리에서 사용할 수 있는 모든 노드와 노드 항목 유형을 정의합니다.
fa-
접두사가 없는 글꼴 멋진 아이콘 이름){{PropertyName}}
속성에 대한 자리 표시자가 포함될 수 있습니다.fa-
접두사가 없는 Font-Awesome의 아이콘 이름){{PropertyName}}
속성에 대한 자리 표시자가 포함될 수 있습니다.fa-
접두사가 없는 글꼴 멋진 아이콘 이름){{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
사용할 수 있습니다. 배열의 경우 기본 항목 유형이 지정된 순서로 적용됩니다. 즉, 나중 항목 유형이 이전에 지정된 항목을 재정의함을 의미합니다.
Eq 우리는 기본 노드를 생성할 수 있습니다:
{
"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
- 트리 객체(tree json 파일에 따름)path
- 트리 파일 경로project
- 프로젝트 객체( owl-bt.json
파일에 따름)projectPath
- 프로젝트 파일 경로return
- 반환 값이 false
이거나 문자열인 경우 저장이 방지되고 클라이언트에 오류가 반환됩니다.onTreeLoad
- 디스크에서 tree json 파일을 로드한 후 실행됩니다. tree
개체의 수정만 허용됩니다.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'
)