欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity3D實現(xiàn)待機狀態(tài)圖片循環(huán)淡入淡出

 更新時間:2020年04月16日 09:10:36   作者:柒月丶楓  
這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)待機狀態(tài)圖片循環(huán)淡入淡出,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Unity3D實現(xiàn)圖片循環(huán)淡入淡出的具體代碼,供大家參考,具體內(nèi)容如下

1、說明

由于近期項目需求,在網(wǎng)上找了淡入淡出的代碼,但都是兩張圖片淡入淡出結(jié)束后就沒有了(可能我沒找到其他好的作品)。所以我做了簡單的擴展

2、簡單思路

既然待機狀態(tài)下的圖片淡入淡出切換,所以,首先要判斷何時為待機狀態(tài)(即屏幕沒有任何操作的情況下);其次,圖片靜止一段時間后,開始淡入淡出,第一張圖片淡入,第二張淡出;接著圖片再次靜止一段時間,然后接著下次的淡入淡出,但因為是循環(huán)淡入淡出,所以要考慮重新加載第一張照片(再下一次淡入淡出要重新加載第二張照片)。還有在淡入淡出的循環(huán)中還要考慮圖片alpha值從1到0然后從0到1的循環(huán)(可以避免閃爍淡入淡出,有種自然的感覺);最后判斷進入非待機狀態(tài),即有操作。

3、代碼實現(xiàn)及分析

引入UI命名空間,用UI做淡入淡出效果;

using UnityEngine.UI;

public Image nobody_Img1;
public Image nobody_Img2;//淡入淡出的兩張圖片
public float fadeTotalTime=5f;//淡入淡出的時間
public float imageStaticTime=3f;//圖片靜止時間
public float runningTime=10f;//程序運行時間
public int StandbyTime=5;//無操作時間
/*
[HideInInspector]
public bool standby=false;
*/

private bool standby=false;//是否處于待機狀態(tài)
private float startTime=0;//開始待機時間
private int imgIndex=2;//圖片索引(圖片名字)
private float remainder=0//下一次待機開始時間
private bool hasStartNext=false;//是否已經(jīng)加載過下一張待機圖片
private bool canLoad=true;//是否可以加載圖片
private bool startCountTime=false;//是否可以統(tǒng)計待機時間
private int standbyTime=0;//待機時間
private int time=0;//幀數(shù),用于統(tǒng)計待機時間
private Vector3 prevMousePos=Vector3.zero;//鼠標(biāo)上一幀所處的位置

/*變量說明
判斷屏幕無操作(而且鼠標(biāo)的位置要沒有變化)后就開始統(tǒng)計無操作的時間(即startCountTime=true,time++(放在FixedUpdate函數(shù)中),standbyTime++),當(dāng)standbyTime超過規(guī)定時間,standby=true;開始圖片淡入淡出
*/

/*
程序剛運行時,不管有沒有操作,十秒鐘后開始統(tǒng)計開機時間
*/
IEnumerator StartPrepareStandby()
{
 yield return new WaitForSeconds(runningTime);
 startCountTime=true;//開始統(tǒng)計待機時間
}

/*
進入待機后,顯示兩張圖片,并靜止一段時間后在循環(huán)淡入淡出
*/
IEnumerator StartFirstFade()
{
 //現(xiàn)實兩張圖片
 nobody_Img1.enabled=true;
 nobody_Img2.enabled=true;
 yield return new WaitForSeconds(imageStaticTime);
 //重置時間
 startTime=Time.time;//開始待機時間等于程序現(xiàn)在的時間
 remainder=startTime;//記錄淡入淡出開始的時間
 //開始待機
 standby=true;
}

/*
第一次淡入淡出后開始以后的淡入淡出循環(huán)
*/
IEnumerator StartNextFade()
{
 if(imgIndex>=4)//判斷圖片索引是否越界(圖片索引也是圖片名)
  imgIindex=0;
 //canLoad在這用于判斷加載哪一張圖片
 if(canLoad)
 {
  nobody_Img1.sprite=Resources.Load(imgIndex.ToString(),typeof(Sprite)) as Sprite;
 }
 else
 {
  nobody_Img2.sprite=Resources.Load(imgIndex.ToString(),typeof(Sprite)) as Sprite;
 }
 canLoad = !canLoad;//取反,用于區(qū)分圖片的加載
 imgIndex++;//圖片索引累加,下次加載下一張圖片
 yield return new WaitForSeconds(imageStaticTime);
 //重置淡入淡出時間
 startTime=Time.time;
 remainder=startTime;
 //圖片已加載,等待下次的加載
 hasStartNext=false;
}

void Start()
{
 //調(diào)用開始統(tǒng)計待機時間的協(xié)程
 StartCoroutine(StartPrepareStandby());
}

void FixedUpdate()
{
 if(startCountTime)
 {//無操作下統(tǒng)計時間
  if(Input.mousePosition==prevMousePos)
  {//判斷鼠標(biāo)是否還在移動
   time++;
  }
  else
  {//鼠標(biāo)移動時,重置待機時間
   standbyTime=0;
   time=0;
  }
 }
 if(time>=50)
 {
  time=0;
  standbyTime++;//待機秒數(shù)
 }
 if(standbyTime>StandbyTime)
 {//超出規(guī)定的無操作的時間即認(rèn)為待機狀態(tài)
  standbyTime--;//開始第一次圖片淡入淡出協(xié)程只執(zhí)行一次
  startCountTime=false;//停止待機時間的統(tǒng)計
  StartCoroutine(StartFirstFade());//開始第一圖片淡入淡出
 }
}

void Update()
{
 if(Input.GetMouseButtonDown(0))
 {//每次鼠標(biāo)按下都停止待機及相關(guān)的判斷
  StopCoroutine(StartNextFade());//停止淡入淡出
  standby=false;//退出待機狀態(tài)
  //保留當(dāng)前圖片的alpha值
  if(canLoad)
  {//根據(jù)當(dāng)前canLoad來判斷那一張照片在淡入淡出
   nobody_Img1.color=new Color(1,1,1,1);
   nobody_Img2.color=new Color(1,1,1,0);
  }
  else
  {
   nobody_Img1.color=new Color(1,1,1,0);
   nobody_Img2.color=new Color(1,1,1,1);
  }
  //隱藏待機圖片
   nobody_Img1.enabled=false;
   nobody_Img2.enabled=false;
   //重置待機時間
   standbyTime=0;
   time=0;
 }
 else if(Input.GetMouseButtonUp(0))
 {//鼠標(biāo)每次抬起都認(rèn)為是無操作
  startCountTime=true;
  prevMousePos=Input.mousePosition;
 }
 if(standby)
 {
  if(Time.time<startTime+fadeTotalTime)
  {
   float alphaValue=(Time.time-remainder)/fadeTotalTime;
   if(canLoad)
   {
    nobody_Img1.color=new Color(1,1,1,1-alphaValue);
    nobody_Img2.color=new Color(1,1,1,alphaValue);
   }
   else
   {
    nobody_Img1.color=new Color(1,1,1,alphaValue);
    nobody_Img2.color=new Color(1,1,1,1-alphaValue);
   }
  }
  else
  {
   if(!hasStartNext)
   {
    hasStartNext=true;//已開始加載下一張照片
    StartCoroutine(StartNextFade());//開始下一次淡入淡出協(xié)程
   }
  }
 }
 prevMousePos=Input.mousePosition;//記錄每一幀鼠標(biāo)的位置
}

總結(jié)

雖然此次感覺思路較為清晰但還是花費了很長時間來完成這一簡單的程序;我也深信對這一簡單的程序,肯定還有簡單的做法;自我感覺自己的程序有點繞且繁瑣(對程序的擴展也可以引用設(shè)計模式的單例模式或其他模式進行再其他腳本處的待機狀態(tài)判斷)。歡迎各位指點一二!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 驗證碼的三個常見漏洞和修復(fù)方法

    驗證碼的三個常見漏洞和修復(fù)方法

    這篇文章主要介紹了驗證碼的三個常見漏洞和修復(fù)方法,本文講解了把驗證碼存儲在Cookie中、沒有進行非空判斷、沒有及時銷毀驗證碼三個常見問題和解決方法,需要的朋友可以參考下
    2015-03-03
  • 舉例說明Java多線程編程中讀寫鎖的使用

    舉例說明Java多線程編程中讀寫鎖的使用

    這篇文章主要介紹了舉例說明Java多線程編程中讀寫鎖的使用,文中的例子很好地說明了Java的自帶讀寫鎖ReentrantReadWriteLock的使用,需要的朋友可以參考下
    2016-02-02
  • 如何使用正則表達式判斷郵箱(以C#為例)

    如何使用正則表達式判斷郵箱(以C#為例)

    在C#中可以使用Regex正則表達式類來校驗前臺提交過來的郵箱字段信息是否符合要求,Regex類是C#中有關(guān)正則表達式處理的相關(guān)類,功能強大,下面這篇文章主要給大家介紹了關(guān)于如何使用正則表達式判斷郵箱的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 在C#中捕獲內(nèi)存不足異常

    在C#中捕獲內(nèi)存不足異常

    這篇文章主要介紹了在C#中捕獲內(nèi)存不足異常,下面文章內(nèi)容圍繞如何在C#中捕獲內(nèi)存不足異常的相關(guān)資料展開詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • C#/VB.NET創(chuàng)建PDF文檔的示例代碼

    C#/VB.NET創(chuàng)建PDF文檔的示例代碼

    通過代碼創(chuàng)建 PDF 文檔有許多好處,所以本文將為大家詳細介紹一下如何使用 Spire.PDF for .NET 在 C# 和 VB.NET 中從頭開始創(chuàng)建 PDF 文檔,需要的可以參考下
    2023-12-12
  • .Net Winform開發(fā)筆記(四)透過現(xiàn)象看本質(zhì)

    .Net Winform開發(fā)筆記(四)透過現(xiàn)象看本質(zhì)

    本文將從Winform應(yīng)用程序中的Program.cs文件的第一行代碼開始逐步分析一個Winform應(yīng)用程序到底是怎樣從出生走向死亡
    2013-01-01
  • Unity shader實現(xiàn)遮罩效果

    Unity shader實現(xiàn)遮罩效果

    這篇文章主要為大家詳細介紹了Unity shader實現(xiàn)遮罩效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#測量程序運行時間及cpu使用時間實例方法

    C#測量程序運行時間及cpu使用時間實例方法

    對一個服務(wù)器程序想統(tǒng)計每秒可以處理多少數(shù)據(jù)包,要如何做?答案是用處理數(shù)據(jù)包的總數(shù),除以累記處理數(shù)據(jù)包用的時間,下面我們看一個代碼實例就明白了
    2013-11-11
  • c# 用ffmpeg從視頻中截圖

    c# 用ffmpeg從視頻中截圖

    這篇文章主要介紹了c# 用ffmpeg從視頻中截圖的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#實現(xiàn)解壓GZip文件的方法

    C#實現(xiàn)解壓GZip文件的方法

    這篇文章主要介紹了C#實現(xiàn)解壓GZip文件的方法,涉及C#操作壓縮文件的技巧,需要的朋友可以參考下
    2015-05-05

最新評論