In this chapter, we'll cover how to add ConjureKit entities to a shared session for each cube that the participants create.
Follow these steps to add an ^Entity^ to the session and instantiate a Primitive Cube that would appear in the same location in AR for all participants in the session:
1. Create a method, ^CreateCubeEntity^
, that adds an ^Entity^ to the session
public void CreateCubeEntity()
{
if (_conjureKit.GetState() != State.Calibrated)
return;
Vector3 position = arCamera.transform.position + arCamera.transform.forward * 0.5f;
Quaternion rotation = Quaternion.Euler(0, arCamera.transform.eulerAngles.y, 0);
Pose entityPos = new Pose(position, rotation);
_conjureKit.GetSession().AddEntity(
entityPos,
onComplete: entity => CreateCube(entity),
onError: error => Debug.Log(error));
}
Calling ^AddEntity^ adds a new ^Entity^ to the ^Session^ and invokes the ^onComplete^
callback, ^CreateCube^
, with the newly created entity.
_conjureKit.GetSession().AddEntity(
entityPos,
onComplete: entity => CreateCube(entity),
onError: error => Debug.Log(error));
7. We need something to visualize the Entities. Declare a public GameObject variable to reference a cube prefab. Implement the ^CreateCube^
method that instantiates a cube with a Pose.
[SerializeField] private GameObject cube;
private void CreateCube(Entity entity)
{
if (entity.Flag == EntityFlag.EntityFlagParticipantEntity) return;
var pose = _conjureKit.GetSession().GetEntityPose(entity);
Instantiate(cube, pose.position, pose.rotation);
}
We first check that the entity is not the special participant entity that is created automatically when a participant joins a session.
3. Declare a Button
variable to reference the button that will invoke CreateCubeEntity
method.
[SerializeField] private Button spawnButton;
We want this button to be interactable only when the session state is calibrated. Add a ^ToggleControlsState^
method and invoke it in ^_conjureKit.OnStateChanged^
callback.
_conjureKit.OnStateChanged += state =>
{
sessionState.text = state.ToString();
ToggleControlsState(state == State.Calibrated);
};
4. Create a primitive cube by selecting GameObject -> 3D Object -> Cube. Change the scale of the cube to ^0.1^
so it appears as a 10cm cube in AR. Drag and drop it into the Assets folder in the Project window to create a prefab and delete the cube from the scene. Drag the cube prefab to the field you declared in step 2.
5. Add a Button
to the scene, configure the on click callback to invoke ^CreateCubeEntity^
method. Drag the button game object to the field you declared in step 3.
If you run the project now you should see the cube in front of the camera.
Apply for a grant of AUKI tokens to get your project off the ground, and work directly with the Auki Labs team to get your creation to market. Successful applicants may be granted up to 100k USD worth of AUKI tokens, and development and marketing support from the Auki Labs team.