少年修仙传客户端代码仓库
client_linchunjie
2018-09-26 703337574c8d4d4e852ea90c778e3aff3523ce12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Friday, September 21, 2018
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
 
namespace Snxxz.UI {
 
    public class RotatePointer:MonoBehaviour {
        public bool _isRotate = false;//是否旋转      
        public float Speed = 2000;//旋转速度
        public float Angle = 0; // 这个是设置停止的角度
        private float Acceleration = 0;//加速度
        private float _time;
        private bool IsRotateBool = false;//是否进行旋转
        [Header("总旋转时间")]
        public float ContinuousTime = 4;//旋转时间
        [Header("加速减速时间")]
        public float SpeedTime = 1;
        [Header("最小速度")]
        public float MinSpeed= 400;
        [Header("最大速度")]
        public float MaxSpeed = 800;
 
     
        private void OnEnable()
        {
            IsRotateBool = false;
            _time = 0;
 
            Acceleration = (MaxSpeed - MinSpeed) / SpeedTime;
        }
 
        void Update()
        {
 
            if (!_isRotate)
            {
              //  transform.DORotate(new Vector3(0, 0, 360 + Angle), 0.5f, RotateMode.FastBeyond360);
                return; //不旋转结束
            }
               
 
            if (IsRotateBool)
            {
 
                _time += Time.deltaTime;
 
                if (_time < SpeedTime)//匀加速
                {
                    Speed = MinSpeed + Acceleration * _time;
                    if (Speed >= MaxSpeed)
                    {
                        Speed = MaxSpeed;
                    }
                }
                else if (_time > ContinuousTime - SpeedTime)//匀减速
                {
                    Speed = MaxSpeed - Acceleration * (_time - (ContinuousTime - SpeedTime));
                    if (Speed <= MinSpeed)
                    {
                        Speed = MinSpeed;
                    }
                }
                else//匀速
                {
                    Speed = MaxSpeed;
                }
                if (_time < ContinuousTime) // 没结束
                {
                    transform.Rotate(Vector3.forward * Speed * Time.deltaTime);
                }
                else
                {
                    //结束,使用DoTween旋转到结束角度,耗时1秒
                    //这里有个360,使用来防止指针回转的,如果不加这个360,你会看到指针倒退
                    transform.DORotate(new Vector3(0, 0, 360 + Angle), 1f, RotateMode.FastBeyond360);
                    _isRotate = false; // 设置不旋转
                    IsRotateBool = false;
                }
            }          
        }
 
        //外部调用,初始化时间和打开旋转
        public void SetTime()
        {
            _time =0;
            IsRotateBool = true;
            _isRotate = true;
        }
        //外部调用,设置停止角度
        public void SetAngle(float angle)
        {
            Angle = angle;
        }
    }
 
}