学习笔记-Unity3d代码实现Windows10加载圈圈的效果

最近在写一个Unity3d的模仿windows10的桌面的程序,由于Unity3d本身不支持Gif图片,所以突发奇想使用代码来实现接近的。

接下来是代码部分:不一一解析,很简单,看的懂原理就Okly了。

 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using UnityEngine;
 4 using UnityEngine.UI;
 5 public class LoadImg : MonoBehaviour {
 6     public GameObject[] gms;
 7     Dictionary<int, float> speed = new Dictionary<int, float>();
 8    public float s=90;
 9     // Use this for initialization
10     void Awake()
11     {
12         hide = false;
13 
14         for (int i = 0; i < gms.Length; i++)
15         {
16             gms[i].transform.localEulerAngles = Vector3.back * i * 23.3f;
17             speed.Add(i, s);
18         }
19         StartCoroutine(RUN());
20        
21     }
22     private void Rest()
23     {
24         if (hide)
25         {
26             for (int i = 0; i < gms.Length; i++)
27             {
28                 gms[i].transform.eulerAngles = Vector3.back * i * 23.3f;
29             }
30         }
31        StartCoroutine(RUN());
32     }
33     // Update is called once per frame
34     void FixedUpdate () {
35         for(int i = 0; i < gms.Length; i++)
36         {
37            gms[i].transform.Rotate(Vector3.back  * Time.deltaTime*speed[i]);
38         }
39     }
40     bool hide = false;
41     IEnumerator RUN()
42     {
43 
44         for (int i = gms.Length-1; i >=0; i--)
45         {
46           
47             if (hide)
48             {
49                 StartCoroutine(SETSpeed(i));
50                 yield return new WaitForSeconds(0.123f);
51                 gms[i].SetActive(true);
52 
53             }
54             else
55             {
56                 StartCoroutine(SETSpeed(i));
57                 yield return new WaitForSeconds(0.123f);
58                 gms[i].SetActive(false);
59             }
60 
61         }
62         if (hide)
63         {
64             yield return new WaitForSeconds(2.23f);
65         }
66         else
67         {
68             yield return new WaitForSeconds(1.23f);
69 
70 
71         }
72             hide = !hide;
73             Rest();
74            
75      
76 
77     }
78     IEnumerator SETSpeed(int i)
79     {
80         speed[i] = 2.23f * s;
81         yield return new WaitForSeconds(1.23f*0.23f*1.23f);
82         speed[i] = s;
83     }
84 
85 }

然后我们创建一个中心偏移的UI,Texture就像这样的:

关于中心偏移:

父对象为的y为0,这个是一个空物体。

子对象LS是一个Image/RawImage,y向上偏移了123个单位长度,然后我们就可以旋转父对象就可以看到子对象在做圆周运动了!

代码绑定:

复制12个上面做的对象放到一个空物体里,重命名复制的对象(这个可以不要不过我强迫症),然后拖到Gms里面(size这个是值个数,12个就写12就会出现12个空,保证每个都单一绑定),S代表的是旋转速度单位(角度/s)

最后保存一下,运行...效果如图:

当然实际效果没有那么生硬。

最后编辑时间 2018/6/27 5:59.

原文地址:https://www.cnblogs.com/Miku-CEB-Bug/p/9232033.html