unity 转盘抽奖

时间:2024-05-21 11:49:47

  在做其他功能的时候,突然想要做一个游戏中常用的抽奖转盘功能,百度了很多,发现写的很复杂有的还很晦涩,没办法自己动手吧,细想一下,转盘一个功能是转,这个大家应该都没问题,第二个功能就是线性旋转,看起来真实,第三个功能也是主要的功能就是在停下来后,指针指向的区域是哪个

unity 转盘抽奖

这是我网上荡的图片,可以看出来,圆盘被等分八分,那么每份就是360/8的角度,那么我们在图片转动停止的时候,用当前的旋转角度做比较,可以得出指针指向了哪个分区

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class RotateTest : MonoBehaviour
{
    string[] str = new string[] { "四等奖", "六等奖", "一等奖", "二等奖", "谢谢参与", "五等奖", "三等奖", "特等奖" };
    bool isrotate;
    [SerializeField]float time = 0;
    [SerializeField]float angle;
    [SerializeField]float current;
    [SerializeField] Text text;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            isrotate = true;
            angle = Random.Range(0, 50);
            current = angle;
            time = 0;
        }
        if (isrotate)
        {
            if(angle > 10&&time<5f)
            {
                transform.Rotate(transform.forward * angle);
                time += Time.deltaTime;
            }
            else
            {
                transform.Rotate(transform.forward * angle*Time.deltaTime);
                angle -= 0.5f;
                if(angle <= 0)
                {
                    isrotate = false;
                    current = Mathf.Abs(transform.eulerAngles.z);
                    float k = 360 / str.Length;
                    for (int i = 1; i < str.Length; i++)
                    {
                        if ( current< (i * k))
                        {
                            text.text = str[i - 1];
                            break;
                        }
                    }
                }
            }
        }
    }
}
以上就是我实现的简单功能代码,没有做一个细致的线性旋转,但是可以实现功能,因为抽奖不可能被等分,策划不可能这么大几率中将,那么我们只需要找美术要到具体的区分数值,比如一等奖只有1的度数,那么我们只需要将分区内容带入就可以,相比较起来我感觉我这是特别简单的代码,相对于小白来说易懂,网上一些各种三角函数计算的我不明白为什么,是严谨还是我菜了,大家凑合看吧