Unity3d中3D Text对模型的穿透显示

昨晚,好友在电话里问我在Unity3d中使用3D Text,不想让其穿透模型显示,即想让场景中的3D Text与模型有正确的遮挡关系,怎么解?

今早谷歌上查了查,明白了原因,因为3D Text的默认材质的shader是GUI/Text
Shader(自然就有了GUI的穿透显示的特性),而且不可以去手动更改。

记录解决方式如下:

1、自己写个想要的shader,并建个使用它的材质球;

2、导入自己的中文字体;

3、替换掉3D Text上的默认材质球。

首先,搭建一个好友在电话里描述的场景;

新建一个shader,命名为3D Text Shader,并在其中贴上以下代码:


Shader "Custom/3D Text Shader" {
Properties {
_MainTex ("Font Texture", 2D) = "white" {}
_Color ("Text Color", Color) = (1,1,1,1)
}

SubShader {
Tags{ "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
Lighting Off Cull Off ZWrite On Fog { Mode Off }
Blend SrcAlpha OneMinusSrcAlpha
Pass {
Color [_Color]
SetTexture [_MainTex] {
combine primary, texture * primary
}
}
}
}

给一个截图:

新建一个Material,并指定上刚写的shader;

下一步是导个字体文件进来,去控制面板的字体路径中,找一个喜欢的中文字体复制到Unity3d的Assets文件夹中,我复制了一个黑体过来;

回到Unity3d中,把字体文件的Character选项改为Unicode,这样字体文件下面的那张Font Texture就会出现密密麻麻地文字;

最后,选中场景中的需要被正确遮挡的3D Text物体,进行以下3个操作,就完成了:

1、字体文件拖给Text Mesh组件中的Font;

2、刚才自己建的材质球拖给Mesh Renderer组件中的Element 0;

3、字体下的Font Texture拖给材质球。

如图:

PS:

1、如果要调整字体颜色,3D Text中的Color属性已经失效,需要去调整那个自己建的材质球的Text Color;

2、关于字体,如果无视内存占用的话,字体就去控制面板里面的字体随便复制来用,否则,想做到最优的话,建议去网上找那个三四千字的精简字库。

时间: 2024-08-04 09:53:30

Unity3d中3D Text对模型的穿透显示的相关文章

(转载)Unity3d中3D Text对模型的穿透显示

Unity3D中使用3D Text(Text Mesh)时,如何让场景中的物体和3D Text有正确的遮挡关系.由于3D Text默认材质是(Font Material),他的shader是GUI/Text Shader,自然也就有了GUI的穿透特性,所以我们使用自定义材质就可以解决这个问题了. 1.新建材质,并将如下shader设置给它 Shader "Custom/3D Text Shader" { Properties { _MainTex ("Font Texture

Unity3D 中3D刚体组件的力

一般一个物体除了手动添加刚体受到重力作用外,还可以给该刚体添加一个其他的力. 这里就要涉及到一个恒定力(Constant Force)组件 首先要去掉物体的重力(因为重力是刚体组件中默认的一个向下的力)影响.然后在力组件中添加一些力去控制该物体.

ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 joint 使用

我们接着上文  ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 link使用继续完成创建带四个可以转动轮子的双层小车. 一 建立可以转动的joint <span style="font-size:18px;"><?xml version="1.0"?> <robot name="sp1s"> <link name="base_link"> <v

Chem 3D中怎么创建立体模型

ChemDraw作为一款很受大家欢迎的化学绘图软件,其在绘制平面化学方面的功能已经非常的强大了,其实它也可以绘制3D图形.Chem 3D就是绘制3D图形的重要组件.而且为了满足不同的用户绘图的需求,可以给大家提供三种方法来绘制3D图形.有的方法需要绘制者对化学立体模型的结构比较熟悉,有的要求对化学式比较熟悉,绘制者可以根据自己的实际情况选择绘制方法.下面就来给大家分享一下Chem 3D中怎么创建立体模型? 原文:http://www.chemdraw.com.cn/ruheshiyong/lit

【Unity3d游戏开发】Unity3D中的3D数学基础---向量

向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3D数学知识. 一.向量概念及基本定义 1.向量的数学定义 向量就是一个数字列表,对于程序员来说一个向量就是一个数组. 向量的维度就是向量包含的"数"的数目,向量可以有任意正数维,标量可以被认为是一维向量. 书写向量时,用方括号将一列数括起来,如[1,2,3] 水平书写的向量叫行向量 垂直书

【Unity3d】3d网页游戏场景打包与加载

http://www.cnblogs.com/dosomething/archive/2012/04/07/2436353.html 3d游戏中  一个场景往往比较大  如果游戏的进行需要下载一个10M甚至更大的场景时  加载所用的时间会导致很大部分玩家的流失 我们知道unity3d中的内置地形是使用一张高度图  加载场景时  首先加载地形并显示  再去加载场景中的部件(比如树.房子等)  将会很有必要 在加载场景中的部件时  可以根据玩家当前所在的位置  由近到远的去加载 场景中的每个部件实际

转 threejs中3D视野的缩放实现

Threejs基础部分学习知道透视相机new THREE.PerspectiveCamera(fov, aspect , near,far)中. fov视野角(拍摄距离)越大,场景中的物体越小.fov视野角(拍摄距离)越小,场景中的物体越大. 透视相机(近大远小) PerspectiveCamera //透视照相机参数设置 var fov = 45,//拍摄距离 视野角值越大,场景中的物体越小 near = 1,//相机离视体积最近的距离 far = 1000,//相机离视体积最远的距离 asp

图文详解Unity3D中Material的Tiling和Offset是怎么回事

图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔靴搔痒. 下面用*.3ds文件作为模型,介绍Tiling和Offset到底是怎么回事. 3DS格式解析 比如我有这样一个tank_player.3ds模型.右侧的'select'处的图片就是贴图. *.3ds文件最基本的内容包括顶点列表Vertices.贴图坐标列表UVs.面列表Faces.其中Ve

unity3D中使用Socket进行数据通信(一)

公司今年3D产品的工作中心主要集中在提高产品深度上,通过对竞争产品的分析,发现我们的缺陷在于多人在线与后台管理部分,多人在线使用unity自带的Network能够搞定,后台部分前段时间主要研究了下Sqlite.因为sqlite本身不带server,作为数据库仅仅是一个文件,sqlite放在server上与client通信的需求事实上就是多个client訪问同一个文件了.查了一些资料,有非常多方法,个人感觉socket不错.一来应用广泛.自己学习后也是一个充电,而来操作灵活,比作文件共享更自由.所