Simple Shared AR experience: Adding entities

In this chapter, we'll cover how to add ConjureKit entities to a shared session for each cube that the participants create.

Adding an entity

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.

Need a refresher on the essentials?

Check out more lessons, DIY kits and essentials reading material at the developer learning centre homepage.

ポーズメッシュを構築するのにサポートが必要ですか?

プロジェクトをスタートさせるためにAUKIトークンの助成金を申請し、Auki Labsチームと直接連携して、あなたのクリエイションをマーケットへ。選ばれた申請者は最大10万米ドル相当のAUKIトークンの助成を受け、アウキラボチームによる開発、マーケティング支援を受けることができます。