Ejemplo n.º 1
0
    void InstantiateModelObject(XElement info, TrackableBehaviour tb, out UnityEngine.Object asset)
    {
        GameObject buttonCanvasPrefab = null, buttonPrefab = null;
        string     prefabName = Xml.Attribute(info, "prefab");

        asset = GetAsset(prefabName);
        var        buttonNodes = info.Elements();
        GameObject bPanel      = null;
        List <ToggleButtonShowHide> buttons = new List <ToggleButtonShowHide> ();

        foreach (XElement n in buttonNodes)
        {
            if (buttonCanvasPrefab == null)
            {
                buttonCanvasPrefab = Resources.Load("Prefabs/ScanButtonCanvas") as GameObject;
            }
            if (buttonPrefab == null)
            {
                buttonPrefab = Resources.Load("Prefabs/ScanButton") as GameObject;
            }
            if (bPanel == null)
            {
                bPanel = Instantiate(buttonCanvasPrefab) as GameObject;
                bPanel.transform.SetParent(tb.gameObject.transform, false);
            }
            GameObject button = Instantiate(buttonPrefab) as GameObject;
            button.AddComponent <ToggleButtonShowHide> ();
            ToggleButtonShowHide tgsh = button.GetComponent <ToggleButtonShowHide> ();
            tgsh.label          = Xml.Attribute(n, "label");
            tgsh.defaultShowing = Xml.Attribute(n, "show") == "false";
            //tgsh.target = asset as GameObject;
            tgsh.targetName = Xml.Attribute(n, "id");
            button.transform.SetParent(bPanel.transform.GetChild(0), false);
            buttons.Add(tgsh);
        }
        CustomTrackableEventHandler cte = tb.gameObject.GetComponent <CustomTrackableEventHandler> ();
        GameObject obj = InstantiateObject(tb, asset);

        obj.name = "model";
        TouchRotate touchrotate = obj.AddComponent <TouchRotate> ();

        //TouchRotate touchrotate = obj.GetComponent<TouchRotate> ();
        touchrotate.scalable       = Xml.Boolean(info, "scalable", true);
        touchrotate.upEnabled      = Xml.Boolean(info, "upEnabled", true);
        touchrotate.upDireciton    = Xml.Attribute(info, "upDirection", "x");
        touchrotate.rightEnabled   = Xml.Boolean(info, "rightEnabled", true);
        touchrotate.rightDirection = Xml.Attribute(info, "rightDirection", "-z");
        ITrackableController[] controllers = obj.GetComponents <ITrackableController> ();
        cte.controllers.AddRange(controllers);
        for (int i = 0; i < buttons.Count; i++)
        {
            buttons [i].target = obj;
            cte.controllers.Add(buttons [i]);
        }
    }
Ejemplo n.º 2
0
    void InstantiateVideoObject(XElement info, TrackableBehaviour tb, out UnityEngine.Object asset)
    {
        asset = planePrefab;
        CustomTrackableEventHandler cte = tb.gameObject.GetComponent <CustomTrackableEventHandler> ();

        cte.videoPath = GetAssetsPath(Xml.Attribute(info, "videosrc"), true);
        GameObject obj    = InstantiateObject(tb, asset);
        bool       showBg = Xml.Boolean(info, "showbg", false);

        if (showBg)
        {
            GameObject           videoPlane = obj.GetChildByName("plane");
            Vector3              scale      = videoPlane.transform.localScale;
            ImageTargetBehaviour itg        = (ImageTargetBehaviour)tb;
            Vector3              size       = itg.GetSize();
            Logger.Log(size.ToString(), "blue");
            float imageTargetRatio = size.x / size.y;
            if (imageTargetRatio > 1)
            {
                obj.transform.localScale = new Vector3(1, 1, 1 / imageTargetRatio);
            }
            else
            {
                obj.transform.localScale = new Vector3(imageTargetRatio, 1, 1);
            }
            float ratio = Xml.Float(info, "ratio", 1);
            if (ratio > size.x / size.y)
            {
                videoPlane.transform.localScale = scale.SetZ(scale.z * size.x / size.y / ratio);
            }
            else
            {
                videoPlane.transform.localScale = scale.SetX(scale.x * size.y / size.x * ratio);
            }
        }
    }