Unity的转盘代码

来源:互联网 发布:大学数据新闻比赛 编辑:程序博客网 时间:2024/05/22 11:06

上章的计时器大家看了可能感觉有点混乱,不知道怎么使用,这章用一个转盘实例来运用上一章的计时器,转盘一般要求:1:先快速的转个几圈   2.当转到最后一圈的时候转的速度会越来越慢,直至停下  3.根据提供的数据转到相对应的奖品上   以上这3个要求是转盘的基本要求,代码如下:

public delegate void IsBack();
public class ChouJiang : MonoBehaviour {
    /// <summary>
    /// 计时器
    /// </summary>
    Timer m_Timer;
    /// <summary>
    /// 跑马灯的框子
    /// </summary>
   public Transform m_frame;
    /// <summary>
    /// 子物体的下标
    /// </summary>
    int degree = 0;
    /// <summary>
    /// 开始抽奖的按钮
    /// </summary>
     Button m_button;
    /// <summary>
    /// 抽到的奖品
    /// </summary> 
     int index;
/// <summary>
/// 返回的按钮
/// </summary>
Button back_button;
    void Awake () {
        m_Timer = Timer.createTimer("TimeCtroller");
        m_button = GameObject.Find("StarChouJiang").GetComponent<Button>();
back_button = GameObject.Find ("ChouJiangBack").GetComponent<Button> ();
}
     void Start()
    {
        m_button.onClick.RemoveAllListeners();
        m_button.onClick.AddListener(() => { Restar(); });
    }
    /// <summary>
    /// 当点击开始按钮时,执行跑马
    /// </summary>
    void Restar() {
        if (isagree())
{   
m_button.interactable = false;
back_button.interactable = false;
           index= Awards();
QuickRun();
print (index);
        }
    }
    /// <summary>
    /// 是否达到可以进行抽奖的条件
    /// </summary>
    /// <returns></returns>
    bool isagree() {
        return true;
    }
    /// <summary>
    /// 通过改变框子的父物体来造成位置来模拟跑马灯的效果
    /// </summary>
    void RunHorse()
    {
        degree = m_Timer.count % transform.childCount;
        m_frame.SetParent(transform.GetChild(degree));
        m_frame.position = transform.GetChild(degree).position;
        
    }
    /// <summary>
    /// 先跑三圈
    /// </summary>
    /// <returns></returns>
    void QuickRun() {
        //m_index = degree;
        int count = transform.childCount * 3;
        m_Timer.isStart(0.05f, RunHorse, true, count,false);
        m_Timer.EventsOver(SlowRun);
    }
    /// <summary>
    /// 最后一圈
    /// </summary>
    /// <returns></returns>
    void SlowRun() {
        m_Timer.isStart(TimerLerp(2), RunHorse, true, index,true,isEnd);
    }
    /// <summary>
    /// 求出最后一圈目标之间的差值
    /// </summary>
    /// <param name="index"></param>
    /// <param name="Timer2"></param>
    float[] TimerLerp(float Timer2)
    {
        float[] arry = new float[index];
        float a = Timer2;
        for (int i = arry.Length-1; i >=0; i--)
        {
        a = Mathf.Lerp(0, a, 0.5f);
            arry[i] = a;
        }
        return arry;
    }
    public void isEnd()
    {
        m_Timer.isTimers = false;
        Invoke("TOToAddwupin", 1f);
    }
    void TOToAddwupin() {
        SceneMgr.Instance.MainSceneToAddwupin();
    }
    ////////////////////////////////////////////////////////////
    int Awards() {
int a = Random.Range (0, 1000);
print (a);
if (a < 1) {  //0.1%的概率
return (int)(Fudou.Fudou0);
}
if (a < 11) {  //1%的概率
return (int)(Fudou.Fudou1);
}
if (a < 111) {//10%的概率
return (int)(Fudou.Fudou2);
}
if (a < 311) {//20%的概率
return (int)(Fudou.Fudou3);
}
if (a < 511) {//20%的概率
return (int)(Fudou.Fudou4);
}
if (a < 811) {//20%的概率
return (int)(Fudou.Fudou5);
}
if (a < 911) {//10%的概率
return (int)(Fudou.Fudou6);
}
if (a < 921) {//1%的概率
return (int)(Fudou.Fudou7);
}
if (a < 931) {//1%的概率
return (int)(Fudou.Fudou8);
} else {//1%的概率
return (int)(Fudou.Fudou9);
}
}
}

最后:大家可以直接将代码复制然后将相对应的Button改下就在Unity实现抽奖跑马灯的效果啦,如果有不懂的地方欢迎下面评论留言.