public EditorModel(GameObject assetPrefab)
        {
            prefab = assetPrefab;

            saveAssetFolder = System.IO.Path.GetDirectoryName(AssetDatabase.GetAssetPath(prefab));

            assetInstance = GameObject.Instantiate(assetPrefab) as GameObject;
            assetInstance.name = assetPrefab.name;
            assetInstance.SetActive(true);

            // Check for LocalSettings on the prefab and use that if possible
            LocalSettings = assetInstance.GetComponentInChildren<LocalSettings>();
            if (LocalSettings != null) {
            UseLocalSettings = true;
            BlobModel = assetInstance.AddComponent<ABlobModel>().InitWithExistingBlob(LocalSettings.gameObject);
            } else {
            Mesh blobMesh = AssetDatabase.LoadAssetAtPath("Assets/BlobOMatic/BlobMesh.asset", typeof(Mesh)) as Mesh;
            BlobModel = assetInstance.AddComponent<ABlobModel>().Init(blobMesh);
            if (!ICanHasShadow) return; // Not a valid model, bugger off!

            LocalSettings = BlobModel.BlobRenderer.gameObject.AddComponent<LocalSettings>().CopyGlobalSettings();

            saveAssetFolder +=  "/" + prefab.name + "WithBlob";
            }

            // Collect original layers and set everything to blob layer
            foreach (Transform t in assetInstance.GetComponentsInChildren<Transform>(true))
            originalLayers[t.gameObject] = t.gameObject.layer;
            assetInstance.SetLayerRecursively(BlobOMatic.EditorLayer);

            assetInstance.SetActive(false);
            assetInstance.SetHideFlagsRecursively(HideFlags.HideAndDontSave);

            RenderBlob();
        }
        public void Init(PlaceItemMaster master)
        {
            GameObject hc = new GameObject ("Handle Camera", typeof(HandleCameraSync));
            layer = LayerMask.NameToLayer ("ItemHandle");
            hcs = hc.GetComponent<HandleCameraSync> ();
            hcs.master = master;
            hcs.SetLayer (layer);

            this.master = master;
            this.movePref = master.movePref;
            this.rotatePref = master.rotatePref;
            this.scalePref = master.scalePref;

            float trans = .8f;

            xHandle = GameObject.Instantiate (movePref);
            xHandle.GetComponent<Renderer> ().material.color = new Color (1, 0, 0, trans);
            xHandle.gameObject.name = "X Handle";
            yHandle = GameObject.Instantiate (movePref);
            yHandle.GetComponent<Renderer> ().material.color  = new Color (0, 1, 0, trans);
            yHandle.gameObject.name = "Y Handle";
            zHandle = GameObject.Instantiate (movePref);
            zHandle.GetComponent<Renderer> ().material.color = new Color (0, 0, 1, trans);
            zHandle.gameObject.name = "Z Handle";

            xRotateHandle = GameObject.Instantiate (rotatePref);
            xRotateHandle.GetComponent<Renderer> ().material.color = new Color (1, 0, 0, trans);
            xRotateHandle.gameObject.name = "X Rotate Handle";
            yRotateHandle = GameObject.Instantiate (rotatePref);
            yRotateHandle.GetComponent<Renderer> ().material.color  = new Color (0, 1, 0, trans);
            yRotateHandle.gameObject.name = "Y Rotate Handle";
            zRotateHandle = GameObject.Instantiate (rotatePref);
            zRotateHandle.GetComponent<Renderer> ().material.color = new Color (0, 0, 1, trans);
            zRotateHandle.gameObject.name = "Z Rotate Handle";

            xHandle.SetLayerRecursively (layer);
            yHandle.SetLayerRecursively (layer);
            zHandle.SetLayerRecursively (layer);
            xRotateHandle.SetLayerRecursively (layer);
            yRotateHandle.SetLayerRecursively (layer);
            zRotateHandle.SetLayerRecursively (layer);
        }