当进行工业仿真时,我们经常会制作仪表来显示数据,为了方便,我单独制作了一个仪表脚本,通过Dotween来转动仪表,通过角度来控制仪表指针的转动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

/// <summary>
/// 仪表
/// </summary>
public class Meter : MonoBehaviour
{
    /// <summary>
    /// 表针
    /// </summary>
    Transform pointer;

    /// <summary>
    /// 当前的偏转百分比,用于记录当前的偏转百分比
    /// </summary>
    private float currentRotateRate = 0;
    /// <summary>
    /// 初始的偏转百分比
    /// </summary>
    public float startRate = 0;
    /// <summary>
    /// 旋转持续的时间
    /// </summary>
    public float rotateTime = 1;
    /// <summary>
    /// 0刻度的角度
    /// </summary>
    public float zeroAngle = 90;
    /// <summary>
    /// 最大的角度
    /// </summary>
    public float maxAngle = -90;
    /// <summary>
    /// 0到最大值总角度
    /// </summary>
    private float totaleAngle = 0;

    private void Awake()
    {
        pointer = transform.Find("Pointer");
        //计算0到最大值的偏转角度
        totaleAngle = Mathf.Abs(zeroAngle - maxAngle);
        //重置仪表
        ResetMeter();

        //将自己添加进提升机的UI控制器
        UITSJController.Instance.AddOneMeter(this);
    }

    /// <summary>
    /// 更新指针的角度 rotateRate取值 0-1f
    /// </summary>
    public void UpdatePoint(float rotateRate)
    {
        float temp = zeroAngle - totaleAngle * rotateRate;
        if (temp != pointer.localEulerAngles.z)
        {
            currentRotateRate = rotateRate;
            pointer.DOLocalRotate(new Vector3(0, 0, temp), rotateTime);
        }
    }
    /// <summary>
    /// 获取当前的偏转百分比
    /// </summary>
    /// <returns></returns>
    public float GetCurrentRate()
    {
        return currentRotateRate;
    }


    /// <summary>
    /// 重置仪表盘
    /// </summary>
    public void ResetMeter()
    {
        ///设置指针到初始角度
        //UpdatePoint(startRate);
        pointer.localEulerAngles = new Vector3(0, 0, zeroAngle);
    }
}

Dotween插件下载地址:
待添加

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐