C# VR光标每个图像中的附加部分在指针输入时一次一个

C# VR光标每个图像中的附加部分在指针输入时一次一个,c#,unity3d,unity5,C#,Unity3d,Unity5,我在为Oculus设置的VR中使用了一个光标 当与交互对象交互时,光标将通过使用颜色在四个图像组件之一中淡入来作出反应。这表示加载 我通过执行以下操作来设置此选项: 在按钮上设置事件触发器。 事件触发器有一个指针输入部分。 on pointer部分已将光标加载到其中。 光标由一个父项和四个子项组成。 这四个子元素是脚本中的图像列表 当光标悬停在按钮上时,它们一起淡入 这几乎是正确的,但我想他们淡入一旦前一个已经完成淡入 float waitTime=10.00f; bool开关开启=错误; 公

我在为Oculus设置的VR中使用了一个光标

当与交互对象交互时,光标将通过使用颜色在四个图像组件之一中淡入来作出反应。这表示加载

我通过执行以下操作来设置此选项: 在按钮上设置事件触发器。
事件触发器有一个指针输入部分。 on pointer部分已将光标加载到其中。 光标由一个父项和四个子项组成。
这四个子元素是脚本中的图像列表

当光标悬停在按钮上时,它们一起淡入

这几乎是正确的,但我想他们淡入一旦前一个已经完成淡入

float waitTime=10.00f;
bool开关开启=错误;
公共列表游标加载程序=新列表();
无效更新()
{
如果(接通)
{

对于(int i=0;i向IEnumerator函数添加一个延迟。添加延迟非常简单,应该可以正常工作。然后,当您调用此函数的
startcroutine
时,您会告诉该方法哪个片段以及在开始衰减之前等待多长时间(可能是某个值乘以数组索引)

public IEnumerator FadeIn(图像光标、浮点延迟时间)
{
浮动时间=0.0f;
浮动总时间=0.5f;
while(ElapsedTime
向IEnumerator函数添加延迟。添加延迟非常简单,应该可以正常工作。然后,当您调用此函数的
start例程
时,您可以告诉该方法哪个片段以及开始淡入淡出前等待的时间(可能是某个值乘以数组索引)

public IEnumerator FadeIn(图像光标、浮点延迟时间)
{
浮动时间=0.0f;
浮动总时间=0.5f;
while(ElapsedTime
通过执行以下操作,您可以在不受for循环约束的情况下淡入每个图像

void Update()
{
    if (switchOn)
        FadeImages();
}

int counter = 0;
void FadeImages()
{
    ElapsedTime += Time.deltaTime;
    Image CursorPiece = CursorLoaders[counter];
    CursorPiece.color = Color.Lerp(new Color(CursorPiece.color.r, CursorPiece.color.g, CursorPiece.color.b, 0.0f), new Color(CursorPiece.color.r, CursorPiece.color.g, CursorPiece.color.b, 1), (ElapsedTime / TotalTime));

    if (ElapsedTime > TotalTime) //if the image has completely faded, move to the next one
    {
        ElapsedTime = 0; // reset fade timer
        counter++; // increment CursorLoader[] index
    }
    if (counter >= 4) // if you have faded all the elements, stop the method.
        switchOn = false;
}

执行如下操作,您可以在不受for循环约束的情况下淡入每个图像

void Update()
{
    if (switchOn)
        FadeImages();
}

int counter = 0;
void FadeImages()
{
    ElapsedTime += Time.deltaTime;
    Image CursorPiece = CursorLoaders[counter];
    CursorPiece.color = Color.Lerp(new Color(CursorPiece.color.r, CursorPiece.color.g, CursorPiece.color.b, 0.0f), new Color(CursorPiece.color.r, CursorPiece.color.g, CursorPiece.color.b, 1), (ElapsedTime / TotalTime));

    if (ElapsedTime > TotalTime) //if the image has completely faded, move to the next one
    {
        ElapsedTime = 0; // reset fade timer
        counter++; // increment CursorLoader[] index
    }
    if (counter >= 4) // if you have faded all the elements, stop the method.
        switchOn = false;
}

如何为每个部分单独设置淡入淡出方法,并设置/检查一个bool,以查看在移动到下一个图像之前,时间是否足够长,以使上一个图像淡入淡出足够的程度?我在想同样的事情,但我在想,它是否会更干净。然而,也许您在co例程中考虑到了这一点;比如我正在看我能做些什么…为每个部分单独设置一个淡入淡出方法,然后设置/检查一个bool,看看什么时候已经过了足够长的时间,可以在移动到下一个图像之前,使上一个图像淡入淡出。我在想同样的事情,但我在想,会不会它会更干净。然而,也许你在共同例行程序中考虑到了这一点;就像一种在完成之前阻止其他人的方法。我看到了我可以用它做些什么……这非常有效。我想我已经养成了使用协程进行转换的习惯,并且倾向于忘记函数作为解决方案。尽管我和我一样确信进展我将能够使用协同程序解决这个问题。这对我来说是一个教训。再次感谢你。是循环让我立即跳到下一个列表对象-是吗?我认为协同程序可能是更干净的方法,但我发现这样更简单,也同样有效,特别是因为我没有super对协同程序也很满意!在更新中有了您的for循环,我仍然对它的工作原理摸不着头脑。我也需要学习一些东西。这让我感觉更好。我想这是一个通过经验学习的问题。再次感谢!这非常有效。我想我已经养成了使用协同程序进行转换和更新的习惯倾向于忘记函数作为解决方案。虽然我确信随着我的进步,我将能够使用协程解决这个问题。这对我来说是一个教训。再次感谢你。是循环让我立即跳转到下一个列表对象-是吗?我认为协程可能是更干净的方法,但我发现了一些东西像这样更简单,也同样有效,特别是因为我对协同程序也不是非常满意!在更新中有了你的for循环,我仍然对它的工作原理摸不着头脑。我还需要学习一些东西。这让我感觉更好。我想这是一个通过经验学习的问题。再次感谢!我毫不怀疑我能做到这是一个平凡的过程,如果我多做一些工作,它就会成功。谢谢你的努力和洞察力!我毫不怀疑这是一个平凡的过程,如果我多做一些工作,它就会成功。谢谢你的努力和洞察力!
void Update()
{
    if (switchOn)
        FadeImages();
}

int counter = 0;
void FadeImages()
{
    ElapsedTime += Time.deltaTime;
    Image CursorPiece = CursorLoaders[counter];
    CursorPiece.color = Color.Lerp(new Color(CursorPiece.color.r, CursorPiece.color.g, CursorPiece.color.b, 0.0f), new Color(CursorPiece.color.r, CursorPiece.color.g, CursorPiece.color.b, 1), (ElapsedTime / TotalTime));

    if (ElapsedTime > TotalTime) //if the image has completely faded, move to the next one
    {
        ElapsedTime = 0; // reset fade timer
        counter++; // increment CursorLoader[] index
    }
    if (counter >= 4) // if you have faded all the elements, stop the method.
        switchOn = false;
}