C# 更改全息镜头MRTK中的UI按钮颜色

C# 更改全息镜头MRTK中的UI按钮颜色,c#,unity3d,hololens,mrtk,C#,Unity3d,Hololens,Mrtk,我需要一些帮助来制作全息透镜的简单原型 我在场景中有9个UI接近交互的可触摸按钮,比如移动键盘。我希望他们一个接一个地随机突出显示。我将按下突出显示的按钮,下一个随机按钮将突出显示,依此类推。我已经成功地为VR制作了相同类型的应用程序,但在MRTK中,很难突出显示按钮。如果有人帮助我编写示例代码,我将非常感激 我还附加了我的场景视图。 我已经使用了下面的代码来突出显示VR中的代码,但是如何在MRTK中使用该代码呢。它不起作用 using System.Collections; using Sys

我需要一些帮助来制作全息透镜的简单原型

我在场景中有9个UI接近交互的可触摸按钮,比如移动键盘。我希望他们一个接一个地随机突出显示。我将按下突出显示的按钮,下一个随机按钮将突出显示,依此类推。我已经成功地为VR制作了相同类型的应用程序,但在MRTK中,很难突出显示按钮。如果有人帮助我编写示例代码,我将非常感激

我还附加了我的场景视图。 我已经使用了下面的代码来突出显示VR中的代码,但是如何在MRTK中使用该代码呢。它不起作用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Diagnostics;
using UnityEngine.UI;

public class Randomcolor : MonoBehaviour
{
    public static GameObject B1, B2, B3, B4, B5, B6, B7, B8, B9, BX, ST;
    public static int r, r_prev;

    void Start()
    {
        B1 = GameObject.Find("Button1");
        B2 = GameObject.Find("Button2");
        B3 = GameObject.Find("Button3");
        B4 = GameObject.Find("Button4");
        B5 = GameObject.Find("Button5");
        B6 = GameObject.Find("Button6");
        B7 = GameObject.Find("Button7");
        B8 = GameObject.Find("Button8");
        B9 = GameObject.Find("Button9");
        ST = GameObject.Find("ButtonSRT");

        B1.GetComponent<Button>().interactable = true;
        B2.GetComponent<Button>().interactable = true;
        B3.GetComponent<Button>().interactable = true;
        B4.GetComponent<Button>().interactable = true;
        B5.GetComponent<Button>().interactable = true;
        B6.GetComponent<Button>().interactable = true;
        B7.GetComponent<Button>().interactable = true;
        B8.GetComponent<Button>().interactable = true;
        B9.GetComponent<Button>().interactable = true;
    }

    public void clickB1()
    {
        Color_Highlight();
    }

    public void Color_Highlight()
    {
        System.Random random_number = new System.Random();
        r = random_number.Next(9) + 1;
        while (r == r_prev)
        {
             r = random_number.Next(9) + 1;
         }
        r_prev = r;

        if (r == 1) { BX = B1; }
        if (r == 2) { BX = B2; }
        if (r == 3) { BX = B3; }
        if (r == 4) { BX = B4; }
        if (r == 5) { BX = B5; }
        if (r == 6) { BX = B6; }
        if (r == 7) { BX = B7; }
        if (r == 8) { BX = B8; }
        if (r == 9) { BX = B9; }

        var colors = BX.GetComponent<Button>().colors;
        colors.normalColor = Color.cyan;
        BX.GetComponent<Button>().colors = colors;
    }

    public void Color_Reset()
    {
        var colors = BX.GetComponent<Button>().colors;
        colors.normalColor = new Color32(69, 154, 43, 255);
        BX.GetComponent<Button>().colors = colors;
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用系统诊断;
使用UnityEngine.UI;
公共类:单一行为
{
公共静态游戏对象B1、B2、B3、B4、B5、B6、B7、B8、B9、BX、ST;
公共静态int r,r_prev;
void Start()
{
B1=游戏对象。查找(“按钮1”);
B2=游戏对象。查找(“按钮2”);
B3=游戏对象。查找(“按钮3”);
B4=游戏对象。查找(“按钮4”);
B5=游戏对象。查找(“按钮5”);
B6=游戏对象。查找(“按钮6”);
B7=游戏对象。查找(“按钮7”);
B8=游戏对象。查找(“按钮8”);
B9=游戏对象。查找(“按钮9”);
ST=游戏对象。查找(“按钮nsrt”);
B1.GetComponent().Interactiable=true;
B2.GetComponent().Interactiable=true;
B3.GetComponent().interactiable=true;
B4.GetComponent().interactiable=true;
B5.GetComponent().interactiable=true;
B6.GetComponent().interactiable=true;
B7.GetComponent().interactiable=true;
B8.GetComponent().interactiable=true;
B9.GetComponent().interactiable=true;
}
公开作废clickB1()
{
彩色突出显示();
}
公共空白颜色_突出显示()
{
System.Random_number=新System.Random();
r=随机数。下一个(9)+1;
while(r==r_prev)
{
r=随机数。下一个(9)+1;
}
r_prev=r;
如果(r==1){BX=B1;}
如果(r==2){BX=B2;}
如果(r==3){BX=B3;}
如果(r==4){BX=B4;}
如果(r==5){BX=B5;}
如果(r==6){BX=B6;}
如果(r==7){BX=B7;}
如果(r==8){BX=B8;}
如果(r==9){BX=B9;}
var colors=BX.GetComponent().colors;
colors.normalColor=Color.cyan;
BX.GetComponent().colors=颜色;
}
公共无效颜色_重置()
{
var colors=BX.GetComponent().colors;
colors.normalColor=newcolor32(6915443255);
BX.GetComponent().colors=颜色;
}
}

我们看到您在代码中修改了按钮的
normalColor
,因此MRTK控件中的相应属性可能是您所期望的。脚本的方向正确,您的屏幕截图显示它已添加到按钮中

实际上,在MRTKv2中,在可交互组件中定义了交互阶段,如按下或观察,并且随附的MRTK开箱即用包含四种状态:默认、焦点、按下、禁用。视觉主题将响应这些状态转换。它可能涉及改变按钮的颜色、根据焦点调整元素的大小等

因此,要根据现有代码逻辑更改MRTK按钮控件的默认颜色,需要修改的颜色属性处于可交互组件中应用的主题的默认状态

以MixedRealityToolkit.Examples/Demos/UX/interactiables/Scenes中的InteractiablesSamples场景为例,以下代码是更改默认状态下全息按钮对象颜色的最简单方法:

var colorTheme = this.GetComponent<Interactable>().ActiveThemes[0];
colorTheme.StateProperties[0].Values[0].Color = Color.green;
var colorTheme=this.GetComponent().ActiveThemes[0];
colorTheme.StateProperties[0]。值[0]。颜色=颜色。绿色;

非常感谢您的回复。这几天来,我都被这件事搞糊涂了。你是唯一一个回答我的人。我试着应用你的建议,但现在甚至没有玩给出以下错误。如果有简单的方法,我可以改变整个按钮的结构和代码。请推荐我。”NullReferenceException:Object reference未设置为对象Timer.Start()的实例(位于Assets/Scripts/Timer.cs:37)@Hernando msft您需要研究这两个文档(&)并正确配置可交互组件,然后可以在代码中修改主题的颜色。此外,MRTKv2提供的InteractiablesExamples场景是熟悉可交互组件的极好开端。因此,强烈建议您参考此示例来修复项目。上面的代码也是基于示例的。