怎么在Unity 2017中使用UGUI实现大转盘抽奖?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
public class GenerateAwar:MonoBehaviour{
public GameObject AwarGameObject; //上面制作的Awar物体
public int Count = 10; // 生成个数,当你根据数据生成个数的时候记得修改
void OnEnable ()
{
var angle = 360 / Count; // 计算每个奖品的Z轴度数
var additionAngle = 0; //当前角度
for (var i = 0; i < Count; i++)
{
var obj = Instantiate(AwarGameObject);
additionAngle = angle + additionAngle;
obj.transform.Rotate(Vector3.forward,additionAngle);
Log.Error(obj.transform.localRotation.eulerAngles.z);
obj.transform.SetParent(transform,false);
obj.SetActive(true);
}
}
}
然后挂到”奖品组“身上
如:
那个奖品就是Awar,我名字改不回来了,似乎是unity的问题,哇哈哈哈
然后运行,就能看到如图效果:
然后创建一个指针放在中心编写一个脚本:旋转指针的脚本
//这个脚本挂在指针身上,
//然后在抽奖按钮的Button事件里拖入指针选择这个类的SetTime方法
public class RotatePointer : MonoBehaviour
{
private bool _isRotate = false;//是否旋转
public float ContinuousTime = 2;//旋转时间
public float Speed = 2000;//旋转速度
public float Angle = 0; // 这个是设置停止的角度
private float _time;
// Update is called once per frame
void Update () {
if (!_isRotate)return; //不旋转结束
if (Time.time < _time) // 没结束
{
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; // 设置不旋转
}
}
//外部调用,初始化时间和打开旋转
public void SetTime()
{
_time = Time.time + ContinuousTime;
_isRotate = true;
}
//外部调用,设置停止角度
public void SetAngle(float angle)
{
Angle = angle;
}
}
指针:
开始按钮:
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。