Skip to content
An example of a simple performant sprite renderer using Unity's new ECS system
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Assets Switch to XY plane Oct 26, 2018
Packages Updated to entities version 0.0.12-preview.19 Oct 26, 2018
ProjectSettings Updated to entities version 0.0.12-preview.19 Oct 26, 2018
.gitattributes Initial commit Apr 5, 2018
.gitignore Initial commit Apr 5, 2018
LICENSE Initial commit Apr 5, 2018
README.md Update README.md Oct 26, 2018

README.md

Instanced Sprite Renderer for Unity's ECS

This project is a simple example of how Unity's new Entity Component System (ECS) in 2018.1.14f1 can be used to create a performant instanced sprite renderer. Find out about the new ECS in Unity here.

The assets used in the example are from Kenney's Animal Pack. Thanks to @Shinao for the help.

Quick Start

  1. Make sure you have this version of Unity 2018.1.0b12 installed
  2. Make sure the manifest.json file located at .../[PROJECT FOLDER]/Packages/manifest.json looks like this:
{
  "dependencies": {
      "com.unity.entities": "0.0.12-preview.19",
      "com.unity.package-manager-ui": "1.9.11",
      "com.unity.modules.ui": "1.0.0"
    },
    "testables": [
      "com.unity.collections",
      "com.unity.entities",
      "com.unity.jobs"
    ],
}
  1. Download this .unitypackage file and import it.
  2. Open SpriteRendererScene and press play.

How it Works

By adding SpriteInstanceRenderer to an entity it is rendered using its Position and Rotation as a quad with a texture on it. The SpriteInstanceRender inherits ISharedComponentData meaning any entity using same instance of will be drawn in one draw call. This is possible because of Graphics.DrawMeshInstanced method. In the Example Scene included, 10,000 sprites are drawn. However the before mentioned method only draws a maximum of 1023 instances at once, so it splits up into as many groups necessary to draw all the instances.

Limitations

  • No way to push the matrices from a job
  • No NativeArray API, currently uses Matrix4x4[]

As a result this code is not yet jobified. For now, we have to copy our data into Matrix4x4[] with a specific upper limit of how many instances we can render in one batch.

You can’t perform that action at this time.