unity3D 自定义公告牌
前言
有时候我们希望公告牌跟随镜头旋转永远平行面向屏幕,同时跟随镜头缩放缩放大小不变(镜头远离物体,正常物体视觉效果变小,但公告牌视觉大小比例不变),或者跟随镜头缩放变化,本文记录C#脚本的两种实现方式
制作公告牌
创建一个UI的Canvas,将Render Mode模式改成World Space,然后把Canvas画布拖进文件夹变成预制体

添加Image背景图,再添加Text,Canvas画布、Text文字宽度、高度都设置为0,公告牌的大小由Image来设置

再设置一下锚点等相关属性

最后绑定上我们的控制脚本

就这样,一个自定义公告牌就制作完成
方式一
如果镜头缩放镜头设置的是镜头的fieldOfView值
using UnityEngine; /*
* 自定义公告牌,跟随镜头旋转永远平行面向屏幕,跟随镜头缩放缩放大小不变
*/
public class Billboard : MonoBehaviour { Camera camera;//主镜头 private float _fieldOfView;//初始fieldOfView void Start () {
camera = Camera.main; _fieldOfView = camera.fieldOfView;
} void Update ()
{
//跟随镜头旋转,直接把主镜头的旋转值赋值给公告牌即可
transform.rotation = camera.transform.rotation; //跟随镜头缩放(缩放镜头设置的是镜头的fieldOfView值)
float fieldOfView = camera.fieldOfView;
transform.localScale = new Vector3(fieldOfView/_fieldOfView,fieldOfView/_fieldOfView,fieldOfView/_fieldOfView);
} }
方式二
如果镜头缩放镜头设置的镜头的位置
using UnityEngine; /*
* 自定义公告牌,跟随镜头旋转永远平行面向屏幕,跟随镜头缩放缩放大小不变
*/
public class Billboard : MonoBehaviour { Camera camera;//主镜头 private float _distance;//初始距离 void Start () {
camera = Camera.main; _distance = Vector3.Distance(camera.transform.position, transform.position);
} void Update ()
{
//跟随镜头旋转,直接把主镜头的旋转值赋值给公告牌即可
transform.rotation = camera.transform.rotation; //跟随镜头缩放(缩放镜头设置的镜头的位置),根据公告牌到主镜头的距离来做等距离缩放即可
float distance = Vector3.Distance(camera.transform.position, transform.position);//不断变化的距离
var scale = distance/_distance * 0.1F;
transform.localScale = new Vector3(scale,scale,scale);
} }
脚本更新
2020-05-15更新
更新一下脚本,新增两个bool选项,跟随镜头旋转、跟随镜头放大,默认都是false,使用脚本时可按需配置
using UnityEngine; /*
* 自定义公告牌,跟随镜头旋转永远平行面向屏幕,跟随镜头缩放缩放大小不变
*/
public class Billboard : MonoBehaviour { [Header("跟随镜头旋转")]
public bool isRotation = false; [Header("跟随镜头缩放")]
public bool isZoom = false; Camera camera;//主镜头 private float _distance;//初始距离,需要在程序运行时立即获取 private bool first = true; void Start () {
camera = Camera.main; //初始设置距离
_distance = Vector3.Distance(camera.transform.position, transform.position);
} void Update ()
{
//跟随镜头旋转,直接把主镜头的旋转值赋值给公告牌即可
if (isRotation)
{
transform.rotation = camera.transform.rotation;
} //跟随镜头缩放(缩放镜头设置的镜头的位置),根据公告牌到主镜头的距离来做等距离缩放即可
if (isZoom)
{
float distance = Vector3.Distance(camera.transform.position, transform.position);//不断变化的距离 var scale = distance / _distance * 0.1F;
transform.localScale = new Vector3(scale,scale,scale);
}
} }

效果
以下效果是不跟随缩放,如果想要跟随缩放,脚本代码注释缩放部分即可

后记
自定义公告牌暂时先记录到这,后续再进行补充
unity3D 自定义公告牌的更多相关文章
- 内网公告牌获取天气信息解决方案(C# WebForm)
需求:内网公告牌能够正确显示未来三天的天气信息 本文关键字:C#/WebForm/Web定时任务/Ajax跨域 规划: 1.天定时读取百度接口获取天气信息并存储至Txt文档: 2.示牌开启时请求Web ...
- 关于Unity3D自定义编辑器的学习
被人物编辑器折腾了一个月,最终还是交了点成品上去(还要很多优化都还么做). 刚接手这项工作时觉得没概念,没想法,不知道.后来就去看<<Unity5.X从入门到精通>>中有关于 ...
- Unity3D自定义地形的笔刷,刷出别样地形
是不是很简单呀,大家可以发挥想象刷出特殊的地形,小鸡呀,或者其他的logo之类(顶视图看上去效果很棒)的地形. 最后把我找的笔刷上传,Gizmos 注意: 如果文件夹及图片导入后,地形系统的笔刷无 ...
- Unity3D自定义资源配置文件
http://blog.csdn.net/candycat1992/article/details/52181814 写在前面 我竟然最近两天才知道Unity中ScriptableObject的存在… ...
- Unity3D自定义编辑器简单实例
MenuItem:在标题栏自定义菜单.需要在Editor文件夹内创建脚本,无需挂载.但是注意其下的函数必须为静态函数. using UnityEngine; using UnityEditor; pu ...
- unity3d 自定义载入条/载入动画
在 Assets 下新建文件夹 WebGLTemplates , 在 WebGLTemplates 文件夹下新建文件夹 MyTemplate, 新建index. 在 PlayerSetting 中的 ...
- Unity3D 自定义事件(事件侦听与事件触发)
先来看下效果图,图中点击 Cube(EventDispatcher),Sphere(EventListener)以及 Capsule(EventListener)会做出相应的变化,例子中的对象相互之间 ...
- Unity3d自定义脚本模板
这是一个小技巧,打开Unity安装目录,如: C:\Program Files (x86)\Unity\Editor\Data\Resources\ScriptTemplates /* * * Tit ...
- Unity3D Demo项目开发记录
前言 经过一段时间的学习与实际开发,unity3D也勉强算是强行入门了,正所谓好记性不如烂笔头,更何况本人并非专业从事unity3D开发,会一点C#但也并不熟悉,为了避免后期遗忘,因此特意整理了一个D ...
随机推荐
- LeetCode113 Path Sum II
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- Light OJ 1272 Maximum Subset Sum 高斯消元 最大XOR值
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011686226/article/details/32337735 题目来源:problem=12 ...
- asp.net如何判断网址能否打开
private void StatusDescription_Click(object sender, System.EventArgs e) { PageUrl = ...
- js获取本周日期
JS获取到本周的日期 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- mysql数据库之linux版本
http://repo.mysql.com/yum/mysql-5.6-community/ 安装 ...
- html5在微信中不允许放大缩小页面
在头部添加 <meta name="viewport" content="width=device-width, initial-scale=1, maximum- ...
- ElasticSearch从不懂到会用1—安装篇
连续加班近一个多月,项目终于告一段落了,也腾出时间写一写项目中用到的东西.在这个项目中,我负责的主要是多种业务场景下的数据查询和搜索,其中搜索用到了ElasticSearch搜索引擎.下面主要围绕El ...
- git clone和download zip的区别
采用git clone的项目包含.git目录,这里面有历史版本信息 采用下载zip文件的是没有版本历史信息的.只是当前分支的最新版本 克隆指令: $ git clone git://github.co ...
- 基于@AspectJ注解配置切面与基于XML配置切面
1. Waiter目标类 package com.smart.aop.advice.pointcut; public class Waiter { public void greetTo(String ...
- H3C 显示OSPF邻居信息