让UE4中的TextRender永远面向摄像机,就像Billboard那样!

2023-10-27

让UE4中的TextRender永远面向摄像机,就像Billboard那样!

前言

最近找了个兼职,一家初创公司,做VR游戏的,用的UE4引擎,于是,从10月11日起,一直在学习UE4及其蓝图编程。
由于游戏是空战类,于是需要一个瞄准框,无论是《皇牌空战》还是《鹰击长空》,相信玩过的朋友大概理解是什么意思。
游戏界面

就像图中框住了敌军和友军的那五个框,以及任务点。于是就遇到一个问题,让其中的文字永远面向屏幕,或者说,在玩家从头戴式眼镜中看到的,能像图中这样的效果。

Find Look At 函数

最开始我们设想的是使用UE4蓝图中自带的FindLookAt 函数,这个函数只要给出一个Start,一个End,两个Vector3D 变量,然后给TextRender 或者任何Actor 即可使得文字永远面向屏幕。
BUT,然而,天不遂人愿,这种效果在陆地游戏中或许足够理想。但是空战不行啊!
玩家飞机会在空中有任何姿态,其中就包括一种让机身侧向平行于水平面(类似于睡姿中的侧躺,机翼垂直于水平面),在这种姿态下,文字并没有随着飞机的滚转而做出相应的、在面向屏幕的平行面中的旋转。或者,在另一种姿态,飞机如果倒着飞,肚子朝上头朝下平行于水平面的时候,文字虽然面向摄像机面向屏幕,但是并没有做一个180°的旋转。也就是说,文字是倒着的。
所以,我们必须找到一种更好的方法来代替。

BillBoard

在第三人称框架的新建项目里就有个蓝色的问号,在UE4官方示例中这样的问号也很多,我试着从任何角度看它,它总是面向我的,无论是多么奇葩的方向。
所以我们想把文字做成材质或者paper2D 或者Sprite,放在BillBoard上面。或者以其他方式,比如把textrender attach to the BillBoard。然而都失败了。因为BillBoard 的“永远面向相机”功能是从渲染层面写的。我们也没法找到BillBoard 的任何Set Rotation 之类的功能。

材质编程

直到后来,在UE4 的 AnswerHub 中的某个网友的回答中找到了答案。
这里写图片描述

如图所示, 给TextureRender的字体材质添加 World Position Offset 这样的一坨编程即可。 其中左侧是三个三维向量,左下角那个 -1, 需要先点选中那个节点,然后在 Detail 面板中修改它的值,否则,你是修改不到-1 的。
图中关于Base ColorEmissive ColorOpacityOpacity Mask 等节点的设置与面向相机这件事无关,这个不需要修改。按原来的就好。

应用并保存时,可能是因为我们修改了UE4默认的字体材质,所以报出了一个我暂时还没弄懂的错误。所以,建议先把字体材质复制一个副本为 MyFontMaterial,然后在这个副本上进行操作!

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让UE4中的TextRender永远面向摄像机,就像Billboard那样! 的相关文章

  • 关闭虚拟机的防火墙

    CentOS6 切换至root用户 然后输入 service iptables stop 命令即可关闭防火墙 CentOS7 切换至root用户 先输入 systemctl stop firewalld 命令关闭防火墙 然后输入 syste

随机推荐

  • dataclass的作用

    dataclasss的作用 from dataclasses import dataclass dataclass class Person name str age int gender str unknown init 方法用于初始化对
  • HTML转义字符大全

    1 常用转义字符 转义字符串 Escape Sequence 也称字符实体 Character Entity 在HTML中 定义转义字符串的原因有两个 第一个原因是像 lt 和 gt 这类符号已经用来表示HTML标签 因此就不能直接当作文本
  • 学习 bison 原理(四)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 学习 bison 原理 四 第5步 转变第 4 步的状态机为确定的 LALR 状态机 在 三 中我们已经看到 LR0 状态机很可能有 r r 冲突 s r 冲突 那这关键的
  • QList与QVector

    看qt的文档 只要是不要求数据所存放的内存是连续的 都建议用QList 因为QList的查询速度跟QVecotr是差不多的 感觉有点奇怪 至少与我之前所认识的List的查询是一不样的 好吧 看看源码的 原来QList的元素的指针是通过数组来
  • 文本处理——基于 word2vec 和 CNN 的文本分类 :综述 & 实践(一)

    原文地址 https zhuanlan zhihu com p 29076736 导语 传统的向量空间模型 VSM 假设特征项之间相互独立 这与实际情况是不相符的 为了解决这个问题 可以采用文本的分布式表示方式 例如 word embedd
  • ohmyzsh主题修改

    1 选择主题 ohmyzsh Themes by Github 2 修改zsh配置 vim zshrc 3 使配置生效 source zshrc 效果如下
  • 二、初识arduino uno开发板

    开发板参数表 什么是arduino Arduino是一款便捷灵活 方便上手的开源电子原型平台 包含硬件 各种型号的Arduino板 和软件 ArduinoIDE 构建于开放原始码simple I O介面版 并且具有使用类似Java C语言的
  • Golang闭包陷阱

    golang闭包陷阱本质原理其实是range陷阱 Golang for range陷阱 ep 1 func main var values int 1 2 3 4 5 for value range values go func fmt P
  • 编译 OneFlow 模型

    本篇文章译自英文文档 Compile OneFlow Models tvm 0 14 dev0 documentation 作者是 BBuf Xiaoyu Zhang GitHub 更多 TVM 中文文档可访问 Apache TVM 是一个
  • 3月6日服务器例行维护公告,2014年3月6日停机维护公告

    亲爱的玩家 为了保证服务器的稳定和服务质量 新大话西游2 将于2014年3月6日早上8 00停机 进行每周例行的维护工作 维护时间为早上08 00至09 30 同时 本次停机还将发布最新的客户端补丁 patch2 0 476 如果在维护期间
  • Java高级编程——多线程(JDK5新增创建线程方式Callable,线程池)

    创建线程的第三 四种方式 一 实现Callable接口 1 1与Runnable相比 1 2实现步骤 创建Callable接口实现类 重写call方法 新建实现类对象 将实现类对象作为参数传递待FutureTask的构造器中 创建Futur
  • 使用redis进行用户接口访问时间次数限制

    使用redis进行用户接口访问时间次数限制 假设一个用户 用IP判断 每分钟访问某一个服务接口的次数不能超过10次 import org apache commons lang3 StringUtils import org slf4j L
  • Android Studio一直Waiting for build to finish

    今天安卓的gradle文件出现问题 所以将C Users Administrator gradle删除 接下来出现下图的问题 这是由于安卓缺少gradle文件 图片来自https blog csdn net Hanghang article
  • 手撕yolo3系列——详解主干网络darknet53代码(详细注释)

    完整代码百度云直达链接 包含预训练权重 小白注释 https pan baidu com s 1US6e93OaCYOghmF21v0UIA 提取码 z8at 参考链接 注 代码是大神的代码 在此基础上添加了详细的小白注释 方便我以后阅读
  • Keil调试即全速运行/断点不停的其中一个原因

    平台 芯片 STM32F767IGT6 环境 Keil 5 14 00 问题 keil 下载程序可以执行 调试时刚进调试就上电运行 打断点不停 但是程序正常在跑 可以单步调试 原因 Jlink硬件版本和驱动的问题 解决 之前电脑使用stm3
  • image.shape[0],image.shape[1],image.shape[2]

    import cv2 image cv2 imread D shape bmp print image shape 0 print image shape 1 print image shape 2 结果 300 200 3 其中shape
  • mysql8.0安装之后,无法使用密码正常登陆

    修改方法 重置密码 以下为步骤 1 以管理员身份先关闭mysql服务器 net stop mysql 删除mysql目录下data文件夹 如果有就删除 2 在mysql目录下输入 mysqld initialize user mysql c
  • python如何判断是否为整数

    python 判断是否为整数的方法 1 使用 type 函数判断 代码为 type name bases dict 2 使用 isinstance 函数判断 代码为 isinstance object classinfo 本教程操作环境 w
  • java 生成随机字母数字组合

    import java util Random public class RandomTest 方法1 生成随机数字和字母组合 param length return public static String getCharAndNumr
  • 让UE4中的TextRender永远面向摄像机,就像Billboard那样!

    让UE4中的TextRender永远面向摄像机 就像Billboard那样 让UE4中的TextRender永远面向摄像机就像Billboard那样 前言 Find Look At 函数 BillBoard 材质编程 前言 最近找了个兼职