AR Design
UBC EML collab with UBC SALA - visualizing IoT data in AR
ObjectButton.cs
Go to the documentation of this file.
1 // Copyright (c) Microsoft Corporation. All rights reserved.
2 // Licensed under the MIT License. See LICENSE in the project root for license information.
3 
4 using UnityEngine;
5 using System;
6 using System.Collections;
7 using HoloToolkit.Unity;
8 
9 namespace HoloToolkit.Unity.Buttons
10 {
16  public class ObjectButton : Button
17  {
21  [Serializable]
22  public class ObjectButtonDatum
23  {
27  public ObjectButtonDatum(ButtonStateEnum state) { this.ActiveState = state; this.Name = state.ToString(); }
28 
32  public string Name;
40  public GameObject Prefab;
44  [HideInInspector]
45  public GameObject Instance;
49  public Vector3 Offset;
53  public Vector3 Scale = Vector3.one;
54  }
55 
59  [Header("Game Object Button")]
60  [Tooltip("Button State information")]
61  public ObjectButtonDatum[] ButtonStates = new ObjectButtonDatum[]{ new ObjectButtonDatum((ButtonStateEnum)0),
64 
68  protected void Start()
69  {
70  for (int i = 0; i < ButtonStates.Length; i++)
71  {
72  if(ButtonStates[i].Prefab != null)
73  {
74  if(ButtonStates[i].Prefab.scene.IsValid())
75  {
76  ButtonStates[i].Instance = Instantiate(ButtonStates[i].Prefab, this.transform.position, this.transform.rotation) as GameObject;
77  ButtonStates[i].Instance.transform.parent = this.transform;
78 
79  // Remove Clone Name
80  ButtonStates[i].Instance.name = ButtonStates[i].Instance.name.Substring(0, ButtonStates[i].Instance.name.Length - 7);
81  }
82  else
83  {
84  ButtonStates[i].Instance = ButtonStates[i].Prefab;
85  }
86 
87  ButtonStates[i].Instance.transform.localScale = Vector3.Scale(ButtonStates[i].Instance.transform.localScale, ButtonStates[i].Scale);
88  ButtonStates[i].Instance.transform.localPosition = ButtonStates[i].Instance.transform.localPosition + ButtonStates[i].Offset;
89 
90  // Now set inactive till state change
91  ButtonStates[i].Instance.SetActive(false);
92  }
93 
94  OnStateChange(ButtonStateEnum.Observation);
95  }
96  }
97 
104  public override void OnStateChange(ButtonStateEnum newState)
105  {
106  for (int i = 0; i < ButtonStates.Length; i++)
107  {
108  if(ButtonStates[i].Instance != null)
109  {
110  ButtonStates[i].Instance.SetActive(i == (int)newState);
111  }
112  }
113 
114  base.OnStateChange(newState);
115  }
116  }
117 }
ButtonStateEnum
State enum for buttons.
Vector3 Scale
New scale for prefab in button state
Definition: ObjectButton.cs:53
Vector3 Offset
Offset to translate prefab to in active state
Definition: ObjectButton.cs:49
ButtonStateEnum ActiveState
Button State association
Definition: ObjectButton.cs:36
GameObject Prefab
Button prefab for new state
Definition: ObjectButton.cs:40
ObjectButtonDatum(ButtonStateEnum state)
Constructor for prefab datum
Definition: ObjectButton.cs:27
GameObject Instance
Spawned instance from the prefab
Definition: ObjectButton.cs:45
Prefab button has a set of prefabs of linked objects created or linked to the different states...
Definition: ObjectButton.cs:16
override void OnStateChange(ButtonStateEnum newState)
Callback override function to change prefab enabled on button state change
void Start()
On start create all the instances if the referenced object is a prefab
Definition: ObjectButton.cs:68