我说一下制作流程,然后再看后面的代码
1、创建一个image,选择我们的转盘背景图,素材找我或者网上都有,不多说了哈;
2、创建一个空物体,位于转盘的正中心,因为我们的转盘指针的旋转中心是根据空物体进行的中心进行旋转的,所以需要把指针作为空物体的子对象,如果想要做的漂亮,可以自己找一个好的素材或者利用PS处理一下,我的指针就是下载的素材利用PS做了个PNG格式;
3、然后创建一个Button,名字修改一下;
4、然后在转盘指针的父物体也就是空物体上面创建脚本,内容如下:
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 脚本位于指针的父对象,空物体
/// </summary>
public class TheLuckyRoller
: MonoBehaviour
{
/// <summary>
/// 幸运转盘指针父对象的Transform
/// </summary>
private Transform roolPointer;
/// <summary>
/// 初始旋转速度
/// </summary>
private float initSpeed;
/// <summary>
/// 速度变化值
/// </summary>
private float changeSpeed = 0.5f;
/// <summary>
/// 转盘是否暂停
/// </summary>
private bool isPause = true;
/// <summary>
/// button事件,控制指针
/// </summary>
private Button button;
void Awake()
{
//获取幸运转盘指针父对象的Transform
roolPointer = GetComponent<Transform>();
//获取button按钮
button = transform.parent.Find("Button").GetComponent<Button>();
}
/// <summary>
/// 开始抽奖,注册OnClick事件
/// </summary>
void OnEnable()
{
//清空button注册事件
button.onClick.RemoveAllListeners();
//注册OnClick事件
button.onClick.AddListener(OnButtonClick);
}
/// <summary>
/// 点击事件
/// </summary>
public void OnButtonClick()
{
if (isPause)
{
//随机生成一个初始速度
initSpeed = Random.Range(100, 500);
//开始旋转
isPause = false;
}
}
void Update()
{
if (!isPause)
{
//转动转盘(-1为顺时针,1为逆时针)
roolPointer.Rotate(new Vector3(0, 0, -1)*initSpeed*Time.deltaTime);
//让转动的速度缓缓降低
initSpeed -= changeSpeed;
//当转动的速度为0时转盘停止转动
if (initSpeed <= 0)
{
//转动停止
isPause = true;
}
}
}
}
我们在这个转盘里面用到了一个mask遮罩,然后做一个材质球。当然了,如果你用unity自带的mask遮罩也可以,不过边缘区域会有一些模糊,所以我用了一个mask遮罩的shader,(使用了shader后,转盘Image就不能选择Source image了,而是下面的Mateial,我们创建的材质球)如果有需要的,可以找我喔。