public void Setup(SyncObject obj) { this.obj = obj; material = new PhysicMaterial(); if (obj.HasTag("cube")) { var collider = gameObject.AddComponent <BoxCollider>(); collider.sharedMaterial = material; RegisterCollider(collider); } else if (obj.HasTag("sphere")) { var collider = gameObject.AddComponent <SphereCollider>(); collider.sharedMaterial = material; RegisterCollider(collider); } else if (obj.HasTag("model")) { GetComponent <ModelSync>().LoadComplete += AddMeshCollidersForModel; } else if (obj.HasTag("plane") || obj.HasTag("cylinder")) { // For primitives that use MeshCollider var collider = gameObject.AddComponent <MeshCollider>(); collider.sharedMaterial = material; RegisterCollider(collider); } else if (GetComponent <Collider>() != null) { // If the object already has a Unity Collider component (e.g. hands, player avatar) // Note: // At this time, the default Collider created by CreatePrimitive may not destroyed. // To ignore this collider, "GetComponent<Collider() != null" has to be the last of else-if. var collider = GetComponent <Collider>(); collider.sharedMaterial = material; RegisterCollider(collider); } // TODO: support mesh tag obj.RegisterFieldUpdateHandler("friction", HandleUpdate); obj.RegisterFieldUpdateHandler("restitution", HandleUpdate); obj.RegisterFieldUpdateHandler("isTangible", HandleUpdate); obj.RegisterFieldUpdateHandler("isStatic", HandleUpdate); HandleUpdate(); }