Skip to main content

Thing-max Overview

Thing-max is a Thing created in the Dev Kit that creators can control its usage in Experiences.

Terminology

A Thing-max is comprised of many different components and the terminology is important to learn.

  • Thing-max: This is a Thing that can be created in the Dev Kit and has customizable usage in Experiences.
  • Thing-asset: This is an asset required by the Thing-max such as a 3D model.
  • Protocol: This is an action that dictates how Things should be used in Experiences. An example protocol is the "Poke protocol" that allows a user to poke the Thing.
  • Property Providers: These are components or assets needed by protocols. An example property provider could be "Poke animations" that are triggered by the "Poke protocol".

Creating a Thing-max

A Thing-max can be created by importing a 3D model asset into a Unity Dev Kit project and then adding the asset to a Thing-max prefab.

tip

Check out the Thing-max tutorial to learn how to create a Thing-max.

Thing-max Prefab

You can create a Thing-max prefab by clicking the plus sign button at the top left of the Project window and selecting Genies SDK > Thing-Max-Template.

Thing Template

Using a Thing-max

Once a Thing-max is created, it needs visual scripting to load and use the Thing in an Experience. This requires a User Thing component.

tip

Check out the Thing-max tutorial to learn how to use a Thing-max.

User Thing Component

A User Thing component needs to be attached to the Game Object that will be will be the parent to the loaded Thing. It has properties for which Thing-max prefabs it will attempt to load.

UserThing Component

Testing a Thing-max

The Dev Kit provides two scenes to check if a Thing-max prefab is working properly. They can be found in the Assets > GeniesSdk > ThingCheckerTools folder.

Checker Scene

Publishing a Thing-max

Once created, a Thing-max must be exported and then submitted for review on the Genies Workshop.

tip

Check out the Submitting & Publishing Things page to learn how to submit a Thing-max.

3D Model Requirements

The 3D model for a Thing-max requires the following:

  • The file type needs to be a .fbx or .usd file type.
  • Root object needs to "sitting on the ground plane", centered at 0 for X and Z axis but the bottom bounds should be at 0 for Y axis.
  • The mesh objects needs a Skinned Mesh Renderer component.
  • Source mesh needs skin weight information configured and a specific bone joint hierarchy.
tip

Check out the Thing model tutorial for directions on how to turn a 3D model into a Thing ready model.

Bone Joint Hierarchy

A 3D model needs to have this hierarchy for bone joints:

  • Root: The world origin which is always at (0, 0, 0).
  • Cog: Stands for "center of gravity" and is placed at the object's bound center.
  • Bind: Coincident with the Cog. All vertices on the mesh are skinned to the Bind. This joint is intended to never hold keyframe animation, so it acts as a buffer for custom positional offsets.

3D Model

Protocols

Protocols are behaviors describing how a Thing can be used in an Experience.

Poke Protocol

The Poke protocol allows a Thing to be poked resulting in a two part animation. The Poke Protocol Component requires a reference to an Animation Property Provider for the Poke In and Poke Out animation.

Poke Protocol

Idle Protocol

The Idle protocol allows a Thing to have an idle animation. This has two different types of components. The first is a Animated Idle Protocol Component that needs an Animation Property Provider. The second is a Floating Idle Protocol Component that uses properties to create a simple floating animation.

Idle Protocol

Move and Fit Protocol

The Move and Fit protocol allows for a Thing to move and fit into a specific bounding box. The Move and Fit Protocol Component requires a Bounding Box Property Provider and a default orientation/scale.

Move and Fit Protocol

Grab Protocol

The Grab protocol allows for a Thing to be grabbed. The Grab Protocol Component requires a transform named Grab Point.

Grab Protocol

Property Providers

Property providers are components and assets required by protocols.

Transforms Provider

The Transforms Provider component stores a list of Transforms using key names.

Transforms Provider

Bounding Box Provider

The Bounding Box Provider component stores a list of bounding boxes using key names. Each bounding box is merged from a list of Colliders and Renderers.

Bounding Box Provider

Animations Provider

The Animations Provider component stores a list of animations using key names. Each animation is merged from a list of Transform animations and Blend Shape animations.

Animations Provider

info

Blend Shapes are custom animations that can be created in 3D modeling softwares such as Blender.

Check out the Blend Shapes tutorial for more information on adding custom animations.