GoogleVR实现一个视选的等待数秒触发的实现例子

  Gvr的一个视选等待时间的例子,这里我想达到让视选等待几秒的作用,通过UGUI显示一个Load图标,类似于技能的冷缩倒计时,当计时完成的时候,才触发一定的事件,达到视选等待数秒的交互效果。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class WaitFor : MonoBehaviour
{

    public static float timeDuration { get; set; }
    public float duration=0.01f;
    // Use this for in  itialization
    bool isFill = true;

    //当视选进入的时候触发
    public void FillIn()
    {
        if(isFill)
        {
            gameObject.SetActive(true);
            isFill = false;
            StartCoroutine(WaitForit());
        }
    }

    public void FillOut()
    {
        gameObject.SetActive(false);
        isFill = true;
        Debug.Log("111");
        this.gameObject.GetComponent<Image>().fillAmount = 0f;

    }

    //这里设置一个协程来控制UI 的显示
    IEnumerator  WaitForit()
    {
        for(float i=0;i<=100;i++)
        {
            this.gameObject.GetComponent<Image>().fillAmount =0.01f*i;
            yield return new WaitForSeconds(duration);
            Debug.Log("3333");
        }
        timeDuration = this.gameObject.GetComponent<Image>().fillAmount;
        isFill = true;
    }

    public static bool IsGo()
    {
        if (timeDuration == 1)
        {
            return true;
        }
        else
            return false;

    }
}
  这里主要有三个方法,主要用到的有两个,下面我粗略做一下说明,代码写的还是有点简单的,可能还存在一些可优化的地方,以后有机会再改正。
//当视选进入的时候触发
    public void FillIn()
    {
        if(isFill)
        {
            gameObject.SetActive(true);//这里将此gameobject的SetActive设置为true,重新接收事件 的触发
            isFill = false;
            StartCoroutine(WaitForit());//开启一个协程
        }
    }

//当视选离开物体的时候触发,并且使协程立刻停止,之前试过了StopCoroutine(WaitForit)但是发生了一个问题,无法立刻停止协程的执行,这是我开发过程遇到过的问题,希望以后开发过程中遇到此问题可以起到借鉴的作用
public void FillOut()
    {
        gameObject.SetActive(false);//这里可以将SetActive设置为false,立刻停止协程的执行
        isFill = true;
        Debug.Log("111");
        this.gameObject.GetComponent<Image>().fillAmount = 0f;

    }

下面是我写的协程的代码,主要原理是通过是指imageUI下面的fiiAmount属性来达到慢慢填充的目的,最终达到等待的效果
   IEnumerator  WaitForit()
    {
        for(float i=0;i<=100;i++)
        {
            this.gameObject.GetComponent<Image>().fillAmount =0.01f*i;//fillAmount属性的设置
            yield return new WaitForSeconds(duration);
            Debug.Log("3333");
        }
        timeDuration = this.gameObject.GetComponent<Image>().fillAmount;
        isFill = true;
    }

这里是image上组件的设置

时间: 2024-08-05 18:07:33

GoogleVR实现一个视选的等待数秒触发的实现例子的相关文章

【C语言】输入一个整数,输出该数二进制表示中1的个数(三种方法)

输入一个整数,输出该数二进制表示中1的个数.如输入32,输出1. 代码实现: 方法1:与运算 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOneNumber(unsigned int num) {     int numberofOne = 0;     while (num)     {         num = num & (num - 1);         

用Vue实现一个全选指令

最近用vue做了两个项目,都需要实现全选反选的功能,两个项目用了两种实现方法,第一个项目用vue的computed,第二个项目用指令来实现,用起来,发觉指令更加方便. 第一次做全选的时候是刚开始接触vue不久,全选的实现参考了知乎(链接:https://www.zhihu.com/question/37833194/answer/91812053)上的实现方法:1.从服务器拿到数据,为每个item设置checked属性2.计算选中的数量selectCount,如果选中的数量与selectItem

GridView全局仅能选择一个复选框

//全局仅能选择一个复选框 function CheckLimit(check) {            var inputs = document.getElementsByTagName("input");            for (var i = 0; i < inputs.length; i++) {                if (inputs[i].type == "checkbox") {                    in

22、输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: n &(n-1)把n的最右边的1去掉,用count++计算1的个数  eg: 101 & 100 = 100   1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int count = 0; 5             while(n!=0){ 6                 count++; 7                 n = n&

js做全选,用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false

用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false,当所有checkbox都被选中时,全选按钮也被选中. 详解: 有两种方式使<input type="checkbox" />中的复选框被选中. 方法一:直接在HTML行间中添加checked属性.   eg:<input type="checkbox" checked /> 方法二:使用javascript使in

牛牛有一个数组,里面的数可能不相等,现在他想把数组变为:所有的数都相等。问是否可行。 牛牛可以进行的操作是:将数组中的任意一个数改为这个数的两倍。 这个操作的使用次数不限,也可以不使用,并且可以对同一个位置使用多次。

牛牛有一个数组,里面的数可能不相等,现在他想把数组变为:所有的数都相等.问是否可行.牛牛可以进行的操作是:将数组中的任意一个数改为这个数的两倍.这个操作的使用次数不限,也可以不使用,并且可以对同一个位置使用多次.输入描述: 输入一个正整数N (N <= 50) 接下来一行输入N个正整数,每个数均小于等于1e9. 输出描述: 假如经过若干次操作可以使得N个数都相等,那么输出"YES", 否则输出"NO" 输入例子: 2 1 2 输出例子: YES

判断一个整数是否是平方数

367. Valid Perfect Square 题意:不用api,判断一个整数是否是平方数. 开始的想法是直接用二分法判断是否是平方数. 错误的代码: 1 public boolean isPerfectSquare(int num) { 2 // binary search 3 int i=0; 4 int n=num; 5 while(i<=n){ 6 int mid=i+(n-i)/2; 7 int square=mid*mid; 8 if(square==num) return tr

在10万以内判断,一个整数加上100后是一个完全平方数,再加上168又是一个完全平方数,求该数

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的结果满足如下条件,即是结果. 程序源代码: #include<stdio.h> #include<math.h> int main() { long int i, x, y; for (i = 1; i<100000; i++) { x = sqrt(i + 100); y = sq

6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现

6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少? 10 = 6 + 4         4 18 = 10 + 8        4 + 4 32 = 18 + 14       8 + 6 ? = 32 + 22       14 + 8 ? = 54 + 32       22 + 10 ? = 86 + 44       32 + 12 分析特点就是 f(x) = f(x-1)+ M; 其中M又是可递归的 4 8 14 22 f(N)=f(N-1)+2*N f(1)