Intro to Unity DOTS Physics
Full workflows and code on how to get started with Unity DOTS Physics
Last updated
Full workflows and code on how to get started with Unity DOTS Physics
Last updated
Github branch link: https://github.com/moetsi/Unity-DOTS-Multiplayer-XR-Sample/tree/Updating-Bullets-to-Destroy
Unity DOTS Physics
Using FixedStepSimulationGroup for custom systems
Physics Body
Adjusting PhysicsVelocity programmatically
Physics Shape
Updating shape type to prefab
Physics Categories
Custom categories for collisions and interactions
Triggers on collisions
Changing stateless triggers to buffer of stateful triggers
Acting on triggers to change materials and destroy entities
Unity's 2019 overview of physics in DOTS: https://www.youtube.com/watch?v=tI9QfqQ9ATA Recommended to watch.
Unity's 2020 update of physics: https://www.youtube.com/watch?v=n_5RGdF7Doo If interested in the latest and greatest.
Link to Unity's DOTS Physics samples: https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/UnityPhysicsSamples/Documentation/samples.md Good place to see the contents of the Physics Samples without opening Unity Editor (ReadMe is missing some samples that are contained in the repo so a little misleading)
Unity's DOTS Physics v0.50.0-preview.43 documentation overview: https://docs.unity3d.com/Packages/com.unity.physics@0.50/manual/getting_started.html. Key to get an understanding
Unity DOTS Physics forum: https://forum.unity.com/forums/dots-physics.422/ Helpful to find answers to questions.
🔑 Major Key Alert 🔑
A good way to approach implementing DOTS Physics is by checking out the DOTS Physics samples and finding an example similar to what you're looking to implement, and then copying, pasting, and modifying to your needs. This is the approach we will use in this section.
The current Physics documentation is difficult and trying to build these functionalities from scratch is a Sisyphean task. It's much simpler to grab code from Unity's samples since there's a lot of "boilerplate" for a majority of the Physics interactions.
Checkout how Code Monkey follows this technique in his "Getting Started with Unity DOTS Physics" video: https://www.youtube.com/watch?v=B3SFWm9gkL8
Go to https://github.com/Unity-Technologies/EntityComponentSystemSamples and download the repository for Unity's ECS Samples (if you haven't already)
Or you could use:
git clone https://github.com/Unity-Technologies/EntityComponentSystemSamples.git
in terminal to download the repository
Open the downloaded repository navigate to PhysicsSamples > Assets > Demos > 2. Setup > 2d. Events > 2d1. Events - Triggers.unity
This will warn you that our Unity version (2020 LTS) is different than the sample version
This is okay and will not cause issues so click Continue
This is a good sample because it shows both triggers and collisions
Breaking the translucent red cubes triggers gravity to switch
The balls collide with each other
Navigate into the "2d1. Triggers" folder and open "2d1a. Triggers - Change Material"
We will base our Physics updates to our project on this sample
The balls change colors when passing through the colored prisms and collide with the block objects
Our bullets will pass through and change the material of asteroids and players (similar to how the balls pass through the prisms)
Bullets passing through an asteroid or player will also trigger adding a DestroyTag to those entities which will cause them to be destroyed
Select different prefab GameObjects in the Hierarchy (ex: "Floor" under Physics Scene Basic Elements), and notice the Physics Shape component in the Inspector
Under "Collision Filter" in the Material section (still in the Physics Shape component) check out the "Belongs To" and "Collides With" fields
If you can't find Collision Filter, expand the Physics Shape component section
Different GameObjects in the Hierarchy have different values set for "Belongs To" and "Collides With"
This is how we tell Unity Physics what entities interact with each other
Scroll to the bottom of the "Collides With" drop down list and select "Edit Physics Category Names" to be taken to PhysicsCategoryNames in the main Assets folder
Take a look at the different categories for all the samples in the repo
We can see that in DOTS Physics, the Physics Shape component on our prefabs will decide what the prefab interacts with
Also in the Physics Shape component under "Material" there is a field called "Collision Response" with 4 options:
Collide (bang together, which our players and asteroids will do)
Collide and Raise Collision Events (bang together and cause an event; we will not be using this in this gitbook only because we do not want to over-complicate things by doing too much)
Raise Trigger Events (not bang together but cause a trigger event, like our bullets will do to players and asteroids)
None (nothing happens from collisions)
To best prepare for the following DOTS Physics code-alongs, we recommend you complete the following check-list: