【Unity】漂浮文字


前言

这个实现学习于CodeMonkey的视频。How to make Damage Popup Text (Unity Tutorial)Popup展示


1 创建预制体

1.1 新建一个空物体

新建物体

1.2 添加TextMehsPro组件

添加TextMehsPro

1.3 引入TMP资源文件

引入TMP资源文件

1.4 新建SDF以支持中文

如果不添加中文字体的SDF,中文会乱码,笔者添加了黑体。
创建SDF
生成了名为 字体名字 + SDF 的文件。
生成的SDF

1.5 修改TMP样式

这是笔者修改的样式。
TextMeshPro配置
效果
在这里插入图片描述

2 跟随鼠标

2.1 修改预制体

修改锚点和中心点。
TMP设置

2.2 编写脚本

using TMPro;
using UnityEngine;

public class InfoPopup : MonoBehaviour
{
    Vector3 mOffset = new Vector3(1, 0);
    void Start()
    {
    	// 修改TMP显示内容
        GetComponent<TextMeshPro>().text = "点击建造";
    }

    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out RaycastHit raycastHitInfo))
        {
        	// 跟随鼠标
            var mousePos = raycastHitInfo.point;
            mousePos.z = -1f;
            transform.position = mousePos + mOffset;
        }
    }
}

拖到预制体上,然后放在场景中。

2.3 展示

鼠标跟随展示

3 更多漂浮文字

3.1 移动和缩放显示

3.1.1 制作预制体

只修改了材质,然后加入脚本。
预制体

3.1.1 DamagePopup脚本

using TMPro;
using UnityEngine;

public class DamagePopup : MonoBehaviour
{
    protected TextMeshPro mTextMeshPro;
    protected float mSpeed;
    protected float mDisappearSpeed;
    protected float mDelayTime;
    protected float mPassTime;
    protected static int mSortingOder = 100;

    private float mScaleIncreaseSpeed = 1f;
    private float mScaleDecreaseSpeed = 1f;
    private Vector3 moveVector = new Vector3(.7f, 1) * 10f;

    private void Awake()
    {
        mTextMeshPro = GetComponent<TextMeshPro>();
        // TODO: 从配置中读取速度
        mSpeed = 1;
        mDelayTime = 1;
        mDisappearSpeed = 3;
        if (mSortingOder >= int.MaxValue) mSortingOder = 100;
        mTextMeshPro.sortingOrder = mSortingOder++;

        mTextMeshPro.fontSize = 10;
        mTextMeshPro.color = Color.yellow;
    }

    void Update()
    {
        // 偏移
        transform.position += moveVector * Time.deltaTime;
        // 持续时间过长可能反向移动
        moveVector -= moveVector * 8 * Time.deltaTime;
        
        // 先变大,后缩小
        if (mPassTime < mDelayTime * 0.5f)
        {
            transform.localScale += Vector3.one * mScaleIncreaseSpeed * Time.deltaTime;
        }
        else
        {
            transform.localScale -= Vector3.one * mScaleDecreaseSpeed * Time.deltaTime;
        }

        // 变透明直到消失
        if (mPassTime >= mDelayTime)
        {
            var textColor = mTextMeshPro.color;
            textColor.a -= mDisappearSpeed * Time.deltaTime;
            mTextMeshPro.color = textColor;
            if (textColor.a < 0)
            {
                Destroy(gameObject);
            }
        }

        mPassTime += Time.deltaTime;
    }

    public void SetText(string text)
    {
        mTextMeshPro.text = text;
    }
}

3.1.2 输入管理脚本

using UnityEngine;

public class InputMgr : MonoBehaviour
{
    static public InputMgr instance;
    public GameObject PopupPerfab;

    private void Awake()
    {
        instance = this;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out RaycastHit raycastHitInfo))
            {
                var t = Instantiate(PopupPerfab, raycastHitInfo.point, Quaternion.identity);
                t.GetComponent<DamagePopup>().SetText("100");
            }
        }
    }
}

挂载预制体
挂载预制体

3.1.3 展示

伤害显示

4 总结

做多几个漂浮文字后发现,其实可以使用工厂模式去归类,又因为可能会new很多漂浮文字,后期可以加入对象池优化。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity 3D文字特效是指在Unity引擎中使用文本来创造出独特的视觉效果和动画效果。它可以使文字呈现出炫酷的外观和动态效果,增强游戏或应用程序的视觉吸引力。 Unity 3D文字特效可以通过使用Unity中的预设或编写自定义的脚本来实现。预设是预先制作好的文本特效,包括旋转、缩放、闪烁、爆炸等效果。用户可以直接在场景中添加这些预设,并调整其参数以获得所需的外观。 另一种方式是通过编写脚本来创建自定义的文字特效。用户可以使用C#或Unity的自带脚本语言来控制文本的动态行为。例如,可以编写一个脚本来使文字改变颜色、随时间变化、根据物理效果进行移动等。 Unity 3D文字特效可以用于游戏中的标题、菜单、角色对话框等各种场景。它可以提升用户体验,增加游戏的乐趣和互动性。通过使用不同的字体、颜色、大小和动画效果,可以为游戏中的文本创造出与众不同的风格和情感。 除了游戏开发,Unity 3D文字特效也可用于其他类型的应用程序,如广告、教育、建模等。它可以帮助开发者更好地传达信息,吸引用户的注意力。 总之,Unity 3D文字特效是一种非常强大和灵活的工具,可以使文字在游戏和应用程序中展现出令人惊叹的效果。无论是通过使用预设还是编写自定义脚本,用户都可以根据自己的需求打造出独特而引人注目的文字效果。 ### 回答2: Unity 3D文字特效是一种用于在Unity游戏引擎中创建和展示炫酷的文字效果的功能。通过这个特效,我们可以在游戏中添加各种各样的文字效果,例如动态的文字动画、闪烁、投影、光影、渐变等等。 要使用Unity 3D文字特效,首先我们需要创建一个3D文本对象。在Unity中,我们可以通过在场景中创建一个空对象,然后将文字网格组件添加到该对象上来实现。添加完组件后,我们可以在资源文件夹中选择任意字体,应用到文本对象上,并设置字体的大小、位置、对齐方式和字间距等属性。 在创建完文本对象后,我们可以通过添加脚本来实现更加复杂的文字特效。例如,我们可以通过脚本来实现文字的旋转、缩放、颜色变化等动画效果。我们还可以通过添加碰撞器和物理材料,使得文字在游戏场景中可交互,例如文字随着玩家的触碰而变大或者发生碰撞。 此外,Unity 3D文字特效还支持使用粒子系统来制作更加震撼的文字效果。我们可以通过创建一个粒子系统,将其以某种方式与文本对象关联起来,从而实现文字的粒子喷射、消散、渐变等效果。通过调整粒子系统的参数,我们可以改变粒子的形状、大小、颜色和运动方式,从而创造出很多独特的文字特效。 总之,Unity 3D文字特效是一个非常强大的功能,可以帮助我们在游戏中创建出各种各样炫酷的文字效果。无论是制作一个悬浮的菜单栏、一个震撼的开场动画,还是一个令人印象深刻的字幕效果,Unity 3D文字特效都可以帮助我们实现。 ### 回答3: Unity 3D文字特效是指在Unity 3D游戏引擎中使用特定技术和工具实现的文字效果。这些效果可以为游戏增添视觉吸引力、增强沉浸感,提升用户的游戏体验。 Unity 3D文字特效有多种实现方式。其中,使用粒子系统是常见的一种方式。通过在Unity中创建和调整粒子系统,我们可以很容易地实现文字的燃烧、爆炸、流动等效果。粒子系统可以控制粒子的形状、速度、大小、颜色等属性,使文字看起来更加生动。 另一种常见的文字特效是使用着色器(Shader)。着色器是以GPU为基础的程序,它可以修改游戏对象或文字的渲染方式。通过使用特定的着色器,我们可以实现文字的发光、阴影、扭曲、反射等效果,从而让文字看起来更加华丽和真实。 此外,Unity 3D还提供了丰富的动画功能,可以用于制作文字的动态效果。我们可以通过在Unity中创建动画控制器和动画序列帧,实现文字的位移、旋转、缩放等动态变换。这样,文字可以在游戏中呈现出平滑流畅的动画效果。 总的来说,Unity 3D文字特效能够提供丰富多样的视觉效果,丰富了游戏的画面和氛围。开发者可以根据游戏的风格和需求,选择适合的特效方式,从而为玩家带来更加吸引人的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值