Unity转盘抽奖界面的实现

之前在公司做过一次转盘抽奖,现在又要写了发觉忘了。。

留个博客记录下,也方便后来者查阅。

实现的效果图如下:

下面是代码片段:

using UnityEngine;

/// <summary>
/// 描述: 思路是这样的,先假旋转,旋转个指定的时间,然后到时间了就做真旋转,旋转到指定位置之后停止旋转
/// 日期: 2020/02/25
/// 作者: 华阳张学友
/// </summary>
public class RotationTest : MonoBehaviour
{
    /** 当前节点 */
    private Transform  _rotateTrans;
    /** 是否开始转动 */  
    private bool       _isStartRotate = false;
    /** 假旋转时的速度 */
    private float      _rotateSpeed = 2f;
    /** 开始时间 */     
    private float      _startTime = 0f;
    /** 当前时间 */     
    private float      _curTime = 0f;
    /** 需要旋转到的目标位置 */
    private Quaternion _targetAngels = Quaternion.identity;

    /** 转动的速度 */
    public float Speed      = 100f;
    /** 总共的旋转时间 秒 */
    public float RotateTime = 5f;
    /** 需要转动到的目标位置
     *  这里需要注释下:
     *  转盘有12个格子,360°,那么360/12=30 每个格子就是30°
     *  这里设置成90就是第三个(看顺时针还是逆时针旋转)
     */
    public float TargetPos = 90f;

    void Start()
    {
        //获取幸运转盘指针父对象的Transform
        _rotateTrans = GetComponent<Transform>();
    }

    void Update()
    {
        //按Y开始旋转
        if (Input.GetKeyDown(KeyCode.Y))
        {
            //开始旋转
            _isStartRotate = true;
            //开始计时
            _startTime = Time.deltaTime;
            //设置目标位置
            _targetAngels = Quaternion.Euler(0, 0, TargetPos);
        }

        if (_isStartRotate)
        {
            //计算旋转的时间
            _curTime = _curTime + Time.deltaTime;
            //间隔时间
            float intervalTime = _curTime - _startTime;
            //转动转盘(-1为顺时针, 1为逆时针)
            _rotateTrans.Rotate(new Vector3(0, 0, -1) * Speed * Time.deltaTime);
            //时间到了就旋转到目标位置,然后停止转动
            if (intervalTime >= RotateTime)
            {
                _rotateTrans.rotation = Quaternion.RotateTowards(_rotateTrans.rotation, _targetAngels, _rotateSpeed * Time.deltaTime);
                // 计算当前正在旋转的角度和目标角度的夹角
                if (Quaternion.Angle(_rotateTrans.rotation, _targetAngels) < 1)
                {
                    //设置目标夹角
                    _rotateTrans.rotation = _targetAngels;
                    //转动停止
                    _isStartRotate = false;
                }
            }
        }
    }
}

自己PS了一些的图片资源。

猜你喜欢

转载自blog.csdn.net/u013476751/article/details/104508191