最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1、說(shuō)明

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

2、簡(jiǎn)單思路

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

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

引入U(xiǎn)I命名空間,用UI做淡入淡出效果;

using UnityEngine.UI;

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

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

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

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

/*
進(jìn)入待機(jī)后,顯示兩張圖片,并靜止一段時(shí)間后在循環(huán)淡入淡出
*/
IEnumerator StartFirstFade()
{
 //現(xiàn)實(shí)兩張圖片
 nobody_Img1.enabled=true;
 nobody_Img2.enabled=true;
 yield return new WaitForSeconds(imageStaticTime);
 //重置時(shí)間
 startTime=Time.time;//開始待機(jī)時(shí)間等于程序現(xiàn)在的時(shí)間
 remainder=startTime;//記錄淡入淡出開始的時(shí)間
 //開始待機(jī)
 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);
 //重置淡入淡出時(shí)間
 startTime=Time.time;
 remainder=startTime;
 //圖片已加載,等待下次的加載
 hasStartNext=false;
}

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

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

void Update()
{
 if(Input.GetMouseButtonDown(0))
 {//每次鼠標(biāo)按下都停止待機(jī)及相關(guān)的判斷
  StopCoroutine(StartNextFade());//停止淡入淡出
  standby=false;//退出待機(jī)狀態(tài)
  //保留當(dāng)前圖片的alpha值
  if(canLoad)
  {//根據(jù)當(dāng)前canLoad來(lái)判斷那一張照片在淡入淡出
   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);
  }
  //隱藏待機(jī)圖片
   nobody_Img1.enabled=false;
   nobody_Img2.enabled=false;
   //重置待機(jī)時(shí)間
   standbyTime=0;
   time=0;
 }
 else if(Input.GetMouseButtonUp(0))
 {//鼠標(biāo)每次抬起都認(rèn)為是無(wú)操作
  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é)

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

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

相關(guān)文章

  • Unity的IPostprocessBuildWithReport實(shí)用案例深入解析

    Unity的IPostprocessBuildWithReport實(shí)用案例深入解析

    這篇文章主要為大家介紹了Unity的IPostprocessBuildWithReport實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C#實(shí)現(xiàn)在線更新軟件

    C#實(shí)現(xiàn)在線更新軟件

    winform程序相對(duì)web程序而言,功能更強(qiáng)大,編程更方便,但軟件更新卻相當(dāng)麻煩,要到客戶端一臺(tái)一臺(tái)地升級(jí),面對(duì)這個(gè)實(shí)際問(wèn)題,在最近的一個(gè)小項(xiàng)目中,本人設(shè)計(jì)了一個(gè)通過(guò)軟件實(shí)現(xiàn)自動(dòng)升級(jí)技術(shù)方案,彌補(bǔ)了這一缺陷,有較好的參考價(jià)值
    2015-05-05
  • C#并發(fā)編程之Task類詳解

    C#并發(fā)編程之Task類詳解

    Task是建立在線程池之上的一種多線程技術(shù),它的出現(xiàn)使Thread成為歷史。其使用方法非常簡(jiǎn)單,本文就來(lái)通過(guò)幾個(gè)示例為大家講講它的具體使用吧
    2023-03-03
  • C#十五子游戲編寫代碼

    C#十五子游戲編寫代碼

    這篇文章主要為大家詳細(xì)介紹了C#十五子游戲的編寫代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • ScriptControl控件執(zhí)行自定義VBS腳本示例分析

    ScriptControl控件執(zhí)行自定義VBS腳本示例分析

    這篇文章主要介紹ScriptControl控件 msscript.ocx msscript.oca執(zhí)行自定義VBS腳本的示例代碼,需要的朋友可以參考下
    2013-04-04
  • C# 編碼好習(xí)慣,獻(xiàn)給所有熱愛(ài)c#的同志

    C# 編碼好習(xí)慣,獻(xiàn)給所有熱愛(ài)c#的同志

    c#編寫者,需要培養(yǎng)的一些好習(xí)慣
    2009-02-02
  • 親自教你實(shí)現(xiàn)棧及C#中Stack源碼分析

    親自教你實(shí)現(xiàn)棧及C#中Stack源碼分析

    大家都知道棧的實(shí)現(xiàn)方式有兩種,一種是基于數(shù)組實(shí)現(xiàn)的順序棧,另一種是基于鏈表實(shí)現(xiàn)的鏈?zhǔn)綏?。這篇文章主要介紹了手把手教你實(shí)現(xiàn)棧以及C#中Stack源碼分析,需要的朋友可以參考下
    2021-09-09
  • 使用C#如何創(chuàng)建人名或其他物體隨機(jī)分組

    使用C#如何創(chuàng)建人名或其他物體隨機(jī)分組

    文章描述了一個(gè)隨機(jī)分配人員到多個(gè)團(tuán)隊(duì)的代碼示例,包括將人員列表隨機(jī)化并根據(jù)組數(shù)分配到不同組,最后按組號(hào)排序顯示結(jié)果
    2025-01-01
  • c# DataView.ToTable()方法 去除表的重復(fù)項(xiàng)問(wèn)題

    c# DataView.ToTable()方法 去除表的重復(fù)項(xiàng)問(wèn)題

    這篇文章主要介紹了c# DataView.ToTable()方法 去除表的重復(fù)項(xiàng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • c#協(xié)變和逆變實(shí)例分析

    c#協(xié)變和逆變實(shí)例分析

    這篇文章主要介紹了c#協(xié)變和逆變,以實(shí)例形式詳細(xì)講述了協(xié)變和逆變的原理與具體用法,具有一定的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論

麦盖提县| 壶关县| 邢台市| 乐至县| 阳信县| 柳江县| 陈巴尔虎旗| 随州市| 买车| 乌苏市| 乐至县| 河南省| 衡山县| 黄大仙区| 南郑县| 屏边| 鲜城| 拉萨市| 哈尔滨市| 洛川县| 鄂尔多斯市| 和平区| 桂林市| 民权县| 吕梁市| 绿春县| 中宁县| 孟津县| 西林县| 中阳县| 青铜峡市| 文昌市| 班戈县| 娱乐| 武陟县| 河源市| 福州市| SHOW| 罗山县| 晋宁县| 泾源县|