当前位置:网站首页>Unity 数字跳字功能
Unity 数字跳字功能
2022-08-11 05:30:00 【canon_卡农】
使用场景
游戏中当玩家获得资源,或者战斗力提升的时候。数值直接变化往往不直观。
因此需要更直观的表现,比如增加一些动画效果,数字跳字等。
这里实现一个数字跳字的功能。
QQ录屏20220809150915
代码实现:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UpdateJumpText : MonoBehaviour
{
public Text m_JumpText;
public InputField m_inputField;
/// <summary>
/// 跳字计时
/// </summary>
public float mTimer = 0f;
/// <summary>
/// 跳字间隔
/// </summary>
public float mUpdateDeltaTime = 0.03f;
/// <summary>
/// 跳字时间
/// </summary>
public float mUpdateTime = 0.7f;
/// <summary>
/// 上一次显示数值
/// </summary>
int mLastValue;
/// <summary>
/// 当前显示数值
/// </summary>
int mCurValue = 0;
/// <summary>
/// 目标显示数值
/// </summary>
int mTargetValue = 0;
int mOffsetValue
{
get {
return mTargetValue - mLastValue; }
}
int mRangeParameter;
bool useRangeNum = true;
// Start is called before the first frame update
void Start()
{
m_inputField.onEndEdit.AddListener(OnInputFieldEndEdit);
mLastValue = mCurValue = mTargetValue = 0;
m_JumpText.text = mTargetValue.ToString();
}
public void OnInputFieldEndEdit(string input)
{
if (int.TryParse(input, out int inputNum))
{
mTargetValue += inputNum;
TextJump();
}
}
void TextJump()
{
if (mLastValue == mTargetValue)
return;
mTimer = 0;
if (mOffsetValue > 0)
{
if (!IsInvoking("UpdateValue"))
{
InvokeRepeating("UpdateValue", mUpdateDeltaTime, mUpdateDeltaTime);
}
}
else
{
m_JumpText.text = mTargetValue.ToString();
mLastValue = mCurValue = mTargetValue;
if (IsInvoking("UpdateValue"))
{
CancelInvoke("UpdateValue");
}
}
}
void UpdateValue()
{
mTimer += mUpdateDeltaTime;
if (mTimer < mUpdateTime)
{
// 是否使用随机数
if (useRangeNum)
{
mRangeParameter = (int)Mathf.Pow(10, mOffsetValue.ToString().Length);
mCurValue = (mTargetValue / mRangeParameter) * mRangeParameter + Random.Range(mRangeParameter / 10, mRangeParameter);
}
else
{
mCurValue = mLastValue + (int)((mOffsetValue) / mUpdateTime * mTimer);
}
m_JumpText.text = mCurValue.ToString();
}
else
{
m_JumpText.text = mTargetValue.ToString();
mLastValue = mCurValue = mTargetValue;
mTimer = 0f;
CancelInvoke("UpdateValue");
}
}
}
边栏推荐
猜你喜欢
随机推荐
The mount command - mounted read-only, solution
Tinker's self-introduction
第一章 Verilog语言和Vivado初步使用
C语言-7月18日-二维数组的学习
详解程序执行过程
OpenMLDB Pulsar Connector: Efficiently connect real-time data to feature engineering
【LeetCode-56】合并区间
Building a data ecology for feature engineering - Embrace the open source ecology, OpenMLDB fully opens up the MLOps ecological tool chain
C语言-7月31日-指针的总结以及typedef关键字
微信小程序启动页的实现
JS advanced web page special effects (pink teacher notes)
Day 85
自己动手写RISC-V的C编译器-02语法描述方法和递归下降解析
Jetpack使用异常问题集锦
Wonderful linkage | OpenMLDB Pulsar Connector principle and practical operation
C语言-6月10日-my_strcpy函数的编写
Compilation exception resolution
深度学习Matlab工具箱代码注释
本地服务配置内网穿透实现微信公众号整合
JVM tuning and finishing









