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]); } }
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); } } }