在做其他功能的时候,突然想要做一个游戏中常用的抽奖转盘功能,百度了很多,发现写的很复杂有的还很晦涩,没办法自己动手吧,细想一下,转盘一个功能是转,这个大家应该都没问题,第二个功能就是线性旋转,看起来真实,第三个功能也是主要的功能就是在停下来后,指针指向的区域是哪个
这是我网上荡的图片,可以看出来,圆盘被等分八分,那么每份就是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的度数,那么我们只需要将分区内容带入就可以,相比较起来我感觉我这是特别简单的代码,相对于小白来说易懂,网上一些各种三角函数计算的我不明白为什么,是严谨还是我菜了,大家凑合看吧