Awesome
yuka-babylonjs-examples
Yuka Game AI + 3D rendering with Babylon.js.
Live examples at https://yuka.babylonpress.org/examples/
Yuka library source: https://github.com/Mugen87/yuka
Babylon.js 3D engine source: https://github.com/BabylonJS/Babylon.js
Installation
VS Code extensions to install
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode
https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer
How to run the examples
Open the index.html
file located in examples/js/example_dir
with LiveServer in VS Code.
Best practices
- try to avoid parented
TransformNodes
with YUKA. YUKA will place your object in world space.Use YUKA's parenting instead. - you must scale, rotate and position your mesh before registering it as a YUKA
renderComponent
and bake the transformations into the vertices and freeze the world matrix of your mesh before doing so. - you must register your Mesh/TransformNode/Camera on the YUKA entity by setting it as a
renderComponent
and pass thesyncFunction
which will take care of syncing your BabylonJS object's position/rotation/scaling into with the YUKA world's position.
const entity = new YUKA.GameEntity()
entity.setRenderComponent(mesh, syncFunction)
syncFunctions
: For syncing aTransformNode
with the YUKA entity use this method:
private _sync(entity, renderComponent) {
Matrix.FromValues(...entity.worldMatrix.elements).decomposeToTransformNode(renderComponent)
}
If it doesn't work for you try this one:
renderComponent.getWorldMatrix().copyFrom(BABYLON.Matrix.FromValues(...entity.worldMatrix.elements))
For the camera
use this:
private _syncCamera(entity, camera) {
camera.getViewMatrix().copyFrom(Matrix.FromValues(...entity.worldMatrix.elements).invert())
}
- you must register your YUKA entity in the
YUKA.EntityManager
with it'sadd
function - you must update the YUKA EntityManager's time (make steps in YUKA world) to make things moving like this:
private _time = new YUKA.Time()
this._scene.onBeforeRenderObservable.add(() => {
const delta = this._time.update().getDelta()
this._entityManager.update(delta) // YUKA world step
})
License
All these examples are open source, MIT License.
Babylon.js: Apache-2.0 License
Yuka.js: MIT License
3D Models: CC Attribution License (see readme.md in relevant folders)