• 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上组件的设置

  • 相关阅读:
    【JavaScript】实现队列Queue
    【Leetcode刷题篇】1.两数之和(JS)
    【48个原生JS网页小demo】1.信息切换
    【JavaScript】原生实现call bind apply
    【JavaScript】Interview(精简版)
    【JavaScript】4种常见的内存泄露
    【JavaScript】原型和原型链
    论自作音乐播放器涉及知识点总结
    Android横竖屏切换继续播放视频
    Android上传头像代码,相机,相册,裁剪
  • 原文地址:https://www.cnblogs.com/springword/p/5957964.html
Copyright © 2020-2023  润新知