Unity中实现伤害跳字效果(简单好抄)
第一步骤安装并导入Dotween插件(也可以不用导入之后直接下载我的安装包)
官网DOTween - 下载
第二步: 制作跳字预制体
建议把最佳适应打开,这样就不怕数字太大显示不全了。
第三步:创建一个空对象并编写脚本JumpNumber ,并将脚本拖到空对象上,将跳字预制体也拖上去。
这个脚本会接受3个参数,位置(世界坐标),伤害多少,是否暴击三个参数。然后在屏幕上生成伤害跳字。
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
public class JumpNumber : MonoBehaviour
{
public GameObject Number; // 跳字预制体
private Camera mainCamera;//主摄像机
//单例模式
public static JumpNumber instance;
private void Awake()
{
// 单例模式的简单实现,确保JumpNumber在场景中为唯一实例
if (instance == null)
{
instance = this;
}
else
{
Destroy(gameObject);
}
// 自动获取主摄像机
mainCamera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
}
//传入目标物体,跳字数字,是否暴击
public void ShowJumpNumber(GameObject behitGameObject, float number, bool crit)
{
if (mainCamera == null)
{
Debug.LogError("Main Camera not found!");
return;
}
// 使用目标物体的位置
Vector3 worldPosition = behitGameObject.transform.position;
//将x轴左右偏移一点
worldPosition.x += Random.Range(-1f, 1f);
//世界坐标转屏幕坐标
Vector3 screenPosition = mainCamera.WorldToScreenPoint(worldPosition);
//实例化预制体
GameObject numberInstance = Instantiate(Number, screenPosition, behitGameObject.transform.rotation);
numberInstance.transform.position = screenPosition;
//查找画布的位置
GameObject Canvas = GameObject.Find("Canvas");
numberInstance.gameObject.transform.SetParent(Canvas.transform);
//将浮点型的number转换为整型
number = (int)number;
// 设置为最顶层,防止玩家或怪物挡住跳字
numberInstance.transform.SetAsLastSibling();
numberInstance.GetComponent<Text>().text = number.ToString();
//区分是否暴击
Color color = Color.white;
//设置字体大小
Number.GetComponent<Text>().fontSize = 25;
if (crit)
{
//暴击字体颜色
color = Color.red;
//设置字体大小
Number.GetComponent<Text>().fontSize = 50;
}
numberInstance.GetComponent<Text>().color = color;
// 使用 DOTween 让number进行移动从Y=0移动到y=800,然后销毁
//设置一个浮动范围//OnComplete()是动画完成后的回调函数
int jumpfloat = Random.Range(0, 100);
numberInstance.transform.DOMoveY(numberInstance.transform.position.y + 100, 0.5f).OnComplete(() => Destroy(numberInstance));
}
}
第4步:创建一个2D对象,并编写测试脚本加到这个2D对象上
这个测试脚本会在1——100生成随机数,并且大于50的时候将会是暴击效果。
using UnityEngine;
public class TextJumpNumber : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
int jumpNumbernum = Random.Range(1, 101);//生成随机数字
bool crit = jumpNumbernum > 50;//判断是否爆击
JumpNumber.instance.ShowJumpNumber(gameObject, jumpNumbernum, crit);
}
}
}
第五步:运行游戏,按下空格就会看到生成了伤害跳字。
项目包 https://github.com/laozhupeiqia/JumpNumber.git
如果这篇文章对你有帮助欢迎点赞支持哦!