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