如何在 MRTK 中以编程方式分配可交互事件
How to assign programmatically an Interactable Event in MRTK
我正在 Unity3D 中创建要在 Hololens 2 中显示的地图。我正在使用 MRTK 编写可交互功能的代码。
由于地图包含许多独立国家,它们的响应 onClick
可能会随时间变化,因此我决定以编程方式添加所需的组件。例如:
public Transform worlmap;
public Microsoft.MixedReality.Toolkit.UI.Theme mTheme;
public Microsoft.MixedReality.Toolkit.UI.States mStates;
List<Microsoft.MixedReality.Toolkit.UI.Theme> themes;
void Start()
{
themes = new List<Microsoft.MixedReality.Toolkit.UI.Theme>();
if (mTheme)
{
themes.Add(mTheme);
}
// Looping through all the countries in worldMap
foreach (Transform country in worldMap)
{
// Adding the 4 components which make a GameObject interactable in Hololens
country.gameObject.AddComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>();
country.gameObject.AddComponent<Microsoft.MixedReality.Toolkit.UI.PressableButton>();
country.gameObject.AddComponent<Microsoft.MixedReality.Toolkit.Input.NearInteractionTouchable>();
country.gameObject.AddComponent<MeshCollider>();
// Assigning State
country.gameObject.GetComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>().States = mStates;
// Assigning the Profiles (Will definine the colors based on the State)
Microsoft.MixedReality.Toolkit.UI.InteractableProfileItem mProfile = new Microsoft.MixedReality.Toolkit.UI.InteractableProfileItem();
mProfile.Themes = themes;
mProfile.Target = country.gameObject;
country.gameObject.GetComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>().Profiles.Add(mProfile);
// Assigning Events
// TODO
}
}
下面的部分有效,但我无法在同一循环中将事件分配给不同的国家。
我可以在编辑器中定义这些事件,例如:
但由于它是一个重复的 activity,可能会随着时间的推移而略有变化,我试图在上面的脚本循环中以编程方式实现相同的目的。
这是我尝试过的方法,但它不起作用:
// Creating an Event
Microsoft.MixedReality.Toolkit.UI.InteractableEvent mEvent = new Microsoft.MixedReality.Toolkit.UI.InteractableEvent();
// Assigning the method to be executed during onClick
mEvent.Event.AddListener(country.gameObject.GetComponent<CountrySelected>().printName)
// Assigning the Event to Interactable
country.gameObject.GetComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>().InteractableEvents.Add(mEvent);
在 MRTK 中以编程方式向可交互对象添加事件的正确方法是什么?
要在运行时为 Interactable 组件分配 OnClick 事件,请尝试以下代码:
this.GetComponent<Interactable>().OnClick.AddListener(MyFun1);
Unity Editor 中的 Interactable 组件配置文件可能不会在运行时显示新方法,但在场景中确实有效。
我正在 Unity3D 中创建要在 Hololens 2 中显示的地图。我正在使用 MRTK 编写可交互功能的代码。
由于地图包含许多独立国家,它们的响应 onClick
可能会随时间变化,因此我决定以编程方式添加所需的组件。例如:
public Transform worlmap;
public Microsoft.MixedReality.Toolkit.UI.Theme mTheme;
public Microsoft.MixedReality.Toolkit.UI.States mStates;
List<Microsoft.MixedReality.Toolkit.UI.Theme> themes;
void Start()
{
themes = new List<Microsoft.MixedReality.Toolkit.UI.Theme>();
if (mTheme)
{
themes.Add(mTheme);
}
// Looping through all the countries in worldMap
foreach (Transform country in worldMap)
{
// Adding the 4 components which make a GameObject interactable in Hololens
country.gameObject.AddComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>();
country.gameObject.AddComponent<Microsoft.MixedReality.Toolkit.UI.PressableButton>();
country.gameObject.AddComponent<Microsoft.MixedReality.Toolkit.Input.NearInteractionTouchable>();
country.gameObject.AddComponent<MeshCollider>();
// Assigning State
country.gameObject.GetComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>().States = mStates;
// Assigning the Profiles (Will definine the colors based on the State)
Microsoft.MixedReality.Toolkit.UI.InteractableProfileItem mProfile = new Microsoft.MixedReality.Toolkit.UI.InteractableProfileItem();
mProfile.Themes = themes;
mProfile.Target = country.gameObject;
country.gameObject.GetComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>().Profiles.Add(mProfile);
// Assigning Events
// TODO
}
}
下面的部分有效,但我无法在同一循环中将事件分配给不同的国家。
我可以在编辑器中定义这些事件,例如:
但由于它是一个重复的 activity,可能会随着时间的推移而略有变化,我试图在上面的脚本循环中以编程方式实现相同的目的。
这是我尝试过的方法,但它不起作用:
// Creating an Event
Microsoft.MixedReality.Toolkit.UI.InteractableEvent mEvent = new Microsoft.MixedReality.Toolkit.UI.InteractableEvent();
// Assigning the method to be executed during onClick
mEvent.Event.AddListener(country.gameObject.GetComponent<CountrySelected>().printName)
// Assigning the Event to Interactable
country.gameObject.GetComponent<Microsoft.MixedReality.Toolkit.UI.Interactable>().InteractableEvents.Add(mEvent);
在 MRTK 中以编程方式向可交互对象添加事件的正确方法是什么?
要在运行时为 Interactable 组件分配 OnClick 事件,请尝试以下代码:
this.GetComponent<Interactable>().OnClick.AddListener(MyFun1);
Unity Editor 中的 Interactable 组件配置文件可能不会在运行时显示新方法,但在场景中确实有效。