Exemplo n.º 1
0
    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();
    }