Move components to collections

This commit is contained in:
Jan Hohenheim 2024-08-04 02:36:33 +02:00
parent 21ce430628
commit 4c5cebd00a
No known key found for this signature in database
2 changed files with 27 additions and 17 deletions

View File

@ -90,7 +90,7 @@ In general, the best practice is to have a parent object be a rigid body and the
Add the `RigidBody` as follows: Add the `RigidBody` as follows:
- select the object in the viewport, i.e. the cube. - select the collection named `Direct` in the outliner.
- go to the Blenvy menu's component manager. Remember, if are missing the side menu, you can open it with `N`. - go to the Blenvy menu's component manager. Remember, if are missing the side menu, you can open it with `N`.
- type `rigidbody` in the search bar - type `rigidbody` in the search bar
- select `avian3d::dynamics::rigid_body::RigidBody` - select `avian3d::dynamics::rigid_body::RigidBody`
@ -118,7 +118,8 @@ There are three different ways to add primitive colliders to the objects, in ord
### Direct ### Direct
Select the cube we just created and search in the components for `colliderconstructor`. Select `avian3d::collision::collider::constructor::ColliderConstructor` and add it. Select the collection named `Direct` and search in the component manager for `colliderconstructor`.
Select `avian3d::collision::collider::constructor::ColliderConstructor` and add it.
By default, the collider will be of the variant `Sphere`. Change it to `Cuboid`. By default, the collider will be of the variant `Sphere`. Change it to `Cuboid`.
Since the standard cube in Blender is of size 2 m, set the `x_length`, `y_length`, and `z_length` all to `2.0`: Since the standard cube in Blender is of size 2 m, set the `x_length`, `y_length`, and `z_length` all to `2.0`:
<details> <details>
@ -149,10 +150,11 @@ Save the scene to let Blenvy export everything and run the game with `cargo run`
If everything went right, your cube should fall into the void due to gravity. If everything went right, your cube should fall into the void due to gravity.
Note that it phases right through the ground because we have not yet added a rigid body and collider to it yet. Note that it phases right through the ground because we have not yet added a rigid body and collider to it yet.
Click on the ground and add a `RigidBody` component as described before to it, but this time set it to `Static`. Click on the ground object and add a `RigidBody` component as described before to it, but this time set it to `Static`.
This means that the ground itself will not react to forces such as gravity, but will still affect other rigid bodies. This means that the ground itself will not react to forces such as gravity, but will still affect other rigid bodies.
Note that since we are not working with a blueprint here, you'll need to add the component to the object itself rather than a collection.
Add a collider to the ground as before. Make sure that the dimensions of the collider match the dimensions of the ground. Also add a collider to the ground as before. Make sure that the dimensions of the collider match the dimensions of the ground.
<details> <details>
<summary>Ground collider</summary> <summary>Ground collider</summary>
@ -178,11 +180,14 @@ Run your game again with `cargo run` to see the cube landing on the ground.
### With Empty ### With Empty
You'll notice that the last variant does not actually show you a preview of the collider. Let's fix that.
Go back to the `Library` scene. Add a collection named `With Empty`. Go back to the `Library` scene. Add a collection named `With Empty`.
> [!TIP] > [!TIP]
> If you accidentally created a collection as a child of another, simply drag-and-drop them around to reorder them > If you accidentally created a collection as a child of another, simply drag-and-drop them around to reorder them
Click on the `With Empty` collection to select it. Add a `RigidBody` to it as described before, but do not add a collider to it.
With the new collection selected, go to `Add` -> `Mesh` -> `Cube`. Name the new object `Board`. With the new collection selected, go to `Add` -> `Mesh` -> `Cube`. Name the new object `Board`.
This time, scale it until it looks like a flat board: This time, scale it until it looks like a flat board:
@ -207,8 +212,7 @@ The scaling we used was the following:
- Y: `0.5` - Y: `0.5`
- Z: `1.5` - Z: `1.5`
You'll notice that the last variant does not actually show you a preview of the collider. Let's fix that. Now spawn an [*empty*](https://docs.blender.org/manual/en/latest/modeling/empties.html) with `Add` -> `Empty` -> `Cube`.
Click on the `With Empty` collection and then select `Add` -> `Empty` -> `Cube`.
To make its properties a bit nice to work with, go to the `Data` tab of the `Properties` window in the lower right: To make its properties a bit nice to work with, go to the `Data` tab of the `Properties` window in the lower right:
<details> <details>
@ -223,8 +227,10 @@ You'll notice that it says "Size: 1m". This is a little bit misleading, as we've
<img src="img/data.png" width = 50%/> <img src="img/data.png" width = 50%/>
</details> </details>
Add a collider to this empty like you did in the ["Direct" section](#direct). Select the empty in the outliner and add collider to this empty like you did in the ["Direct" section](#direct).
Set its lengths to `1` this time. Note that you are now adding the collider to the empty itself, not the overarching collection.
Set the cuboid collider's lengths to `1` this time.
If you have only the `Empty` set to visible and selected it, your viewport should now look as follows: If you have only the `Empty` set to visible and selected it, your viewport should now look as follows:
@ -233,7 +239,7 @@ If you have only the `Empty` set to visible and selected it, your viewport shoul
<img src="img/empty_selected.png" width = 50%/> <img src="img/empty_selected.png" width = 50%/>
</details> </details>
The important bit here is that the empty's outlines perferctly match the attached collider's size. The important bit to realize here is that the empty's outlines perferctly match the attached collider's size.
Now, drag and drop the empty into the `With Empty` collection. With the empty selected, hold `CTRL` and select the `Board` object. Now, drag and drop the empty into the `With Empty` collection. With the empty selected, hold `CTRL` and select the `Board` object.
@ -297,8 +303,8 @@ You should now see both objects fall to the ground.
### Wireframes ### Wireframes
Add a new collection named `Wireframe`. With it selected, Add a new collection named `Wireframe`. With it selected, add a `RigidBody` to it.
go to `Add` -> `Mesh` -> `Cylinder`. Leave it at the default transform. Then go to `Add` -> `Mesh` -> `Cylinder`. Leave it at the default transform.
The last variant is a bit of a workaround for the fact that empties in Blender cannot have an arbitrary shape. The last variant is a bit of a workaround for the fact that empties in Blender cannot have an arbitrary shape.
For example, a cylinder is not supported. So, we are going to create a new cylinder preview by hand. For example, a cylinder is not supported. So, we are going to create a new cylinder preview by hand.
@ -367,7 +373,8 @@ or just quickly want to test something. For this, we are going to use dynamic co
### Convex ### Convex
Go back to the `Library` scene, add a new collection, and name it `Convex`. Select `Add` -> `Mesh` -> `Torus`. Leave it at the default transform. Add a `RigidBody` to it. Your scene should now look like this: Go back to the `Library` scene, add a new collection, and name it `Convex`. Add a `RigidBody` to it.
Select `Add` -> `Mesh` -> `Torus`. Leave it at the default transform. Your scene should now look like this:
<details> <details>
<summary>A simple torus</summary> <summary>A simple torus</summary>
@ -410,9 +417,9 @@ Go to the `World` scene and add an instance of the `Convex` collection. Save the
### Concave ### Concave
Add a new collection and name it `Concave`. Select `Add` -> `Mesh` -> `Monkey`. Add a new collection and name it `Concave`. Add a `RigidBody` to it. Select `Add` -> `Mesh` -> `Monkey`.
Yes, Blender has a builtin method for creating Suzanne, its monkey mascot. Isn't it great? Yes, Blender has a builtin method for creating Suzanne, its monkey mascot. Isn't it great?
Anyways, add a rigid body to it. Afterwards, just as before, select the *mesh* of the monkey. Anyways, just as before, select the *mesh* of the monkey.
Add a `ColliderConstructor` to it. This time, set the variant to `TrimeshFromMesh`. Add a `ColliderConstructor` to it. This time, set the variant to `TrimeshFromMesh`.
> [!CAUTION] > [!CAUTION]

View File

@ -159,7 +159,8 @@ Save your Blender file by pressing `Ctrl + S` on Windows or Linux and `Cmd + S`
<summary>The newly created level assets</summary> <summary>The newly created level assets</summary>
<img src="img/level_asset.png" width = 50%/> <img src="img/level_asset.png" width = 50%/>
</details> </details>
Run, run your game with `cargo run`. It may crash because the scene is empty, but don't worry. The point is that now will have generated another new file, namely `assets/registry.json`. This file contains the information about all components exported by your game so that Blenvy can pso them in Blender.
Now run your game with `cargo run`. It may crash because the scene is empty, but don't worry. The point is that now will have generated another new file, namely `assets/registry.json`. This file contains the information about all components exported by your game so that Blenvy can pso them in Blender.
<details> <details>
<summary>The final file structure for an empty world</summary> <summary>The final file structure for an empty world</summary>
@ -179,14 +180,16 @@ While still in the `Library` scene, right-click on the `Scene Collection` in the
<img src="img/player_collection.png" width = 50%/> <img src="img/player_collection.png" width = 50%/>
</details> </details>
Now, on the upper left of Blender, click on `Add` -> `Mesh` -> `Cube`. This will be our player. We will now add the `Player` component to it. Go to the Blenvy menu we opened earlier. Select the icon in its upper left corner. This is where components are managed. Now, on the upper left of Blender, click on `Add` -> `Mesh` -> `Cube`. This will be our player.
Select the `Player` collection again. We will now add the `Player` component to it.
Go to the Blenvy menu we opened earlier. Select the icon in its upper left corner. This is where components are managed.
<details> <details>
<summary>The component manager</summary> <summary>The component manager</summary>
<img src="img/component_manager.png" width = 50%/> <img src="img/component_manager.png" width = 50%/>
</details> </details>
If your component manager says "Select an object to edit its components", make sure you have the *Cube* we just created selected by clicking on it in the 3D viewport. If your component manager says "Select an object to edit its components", make sure you have the `Player` collection we just created selected by clicking on it in the outliner.
Click on `Components`. If it says "No results found", we need to explicitly reload the registry. In the Blenvy menu, click on the gear icon (the fourth one from the left). In the submenu, click on the second icon. Your menu should now look like this: Click on `Components`. If it says "No results found", we need to explicitly reload the registry. In the Blenvy menu, click on the gear icon (the fourth one from the left). In the submenu, click on the second icon. Your menu should now look like this: