开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:1907

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 587|回复: 14

[alayeshi] 3D Text 穿透场景物体解决

[复制链接]  [移动端链接]
排名
2592
昨日变化
1

62

主题

232

帖子

1273

积分

Rank: 9Rank: 9Rank: 9

UID
54986
好友
10
蛮牛币
10932
威望
0
注册时间
2014-11-12
在线时间
373 小时
最后登录
2017-10-20

专栏作家

发表于 2017-10-12 11:31:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
在unity的3D物体下有一个3DText 物体。这个物体可以在空间坐标中显示文本文字。
如下图:



这个3D Text在场景中的显示会出现穿透3D物体的现象。如图:本来这个hello world 的文字是在胶囊体后面的,然而他却一直显示在最前面。


所以,该文章就用来解决这个问题。方法也是借鉴网上的方法(找不到原文了,要是侵权通知我,虽然我是来传播知识的但我还是会秒删),只是将步骤简化,效果是一样的。

1.新建一个shader,名为:3D Text Shader。详细代码如下:

[csharp] view plain copy


  • 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  
  •     }  
  •     }  
  •     }  
  • }  






2.新建一个材质球,然后将一个shader赋值给它。如图。


3.更换一种字体,将新的字体拖到3D Text的Text Mesh组件的字体上。如图:


4.将新建的材质球拖到3D Text  的材质上,如图:


5.将字体的Font Texture拖到下图中Materials的位置。如图:




字体更换后再看Sence窗口和Game窗口。文字会在了物体后面,不会出现穿透物体的现象。
如图:



注意:第3和第4步顺序不能改变。



回复

使用道具 举报

排名
19594
昨日变化
1006

0

主题

18

帖子

51

积分

Rank: 2Rank: 2

UID
234410
好友
0
蛮牛币
94
威望
0
注册时间
2017-7-26
在线时间
17 小时
最后登录
2017-10-21
发表于 2017-10-13 09:14:07 | 显示全部楼层
本帖最后由 随幻Kaller 于 2017-10-13 09:19 编辑

话说为什么我也是用一个cube 然后子物体是3DText 然后放到cube后面 然后没有被挡住。。。。。。?
我新开的工程 就是创建cube 在他下面创建3DText  放到cube后面 。。。没有其他的操作了。。。。-----------------------------------------------------------------------------------------------------------------------------
好吧是我弄错了。。。。都是白色的 所以弄混了。。。。
换个红色的物体  确实被挡住了。。。



回复 支持 反对

使用道具 举报

5熟悉之中
925/1000
排名
3957
昨日变化
4

0

主题

467

帖子

925

积分

Rank: 5Rank: 5

UID
156480
好友
0
蛮牛币
1498
威望
0
注册时间
2016-7-12
在线时间
172 小时
最后登录
2017-10-19
发表于 2017-10-13 09:21:28 | 显示全部楼层
6666666666666

回复

使用道具 举报

5熟悉之中
625/1000
排名
4506
昨日变化
32

1

主题

221

帖子

625

积分

Rank: 5Rank: 5

UID
206337
好友
2
蛮牛币
2031
威望
0
注册时间
2017-6-5
在线时间
157 小时
最后登录
2017-10-23
发表于 2017-10-13 10:24:42 | 显示全部楼层
哇,没有cgprogram代码都没有就能实现啊,果然shader的世界我还是不懂....

回复 支持 反对

使用道具 举报

排名
1050
昨日变化
2

30

主题

787

帖子

2937

积分

Rank: 9Rank: 9Rank: 9

UID
76248
好友
19
蛮牛币
16765
威望
0
注册时间
2015-2-28
在线时间
762 小时
最后登录
2017-10-22

专栏作家蛮牛译员活力之星七夕浪漫情人

发表于 2017-10-13 10:43:38 | 显示全部楼层
懒人起烂名 发表于 2017-10-13 10:24
哇,没有cgprogram代码都没有就能实现啊,果然shader的世界我还是不懂....

原理是改变3dtext的渲染层级使之渲染于后方

回复 支持 反对

使用道具 举报

排名
13783
昨日变化
354

0

主题

21

帖子

84

积分

Rank: 2Rank: 2

UID
245707
好友
0
蛮牛币
66
威望
0
注册时间
2017-9-24
在线时间
23 小时
最后登录
2017-10-23
发表于 2017-10-13 12:24:27 | 显示全部楼层
学到了学到了

回复

使用道具 举报

5熟悉之中
742/1000
排名
6565
昨日变化
1

6

主题

383

帖子

742

积分

Rank: 5Rank: 5

UID
183904
好友
3
蛮牛币
1620
威望
0
注册时间
2016-11-15
在线时间
203 小时
最后登录
2017-10-20
QQ
发表于 2017-10-13 13:14:00 | 显示全部楼层

回复

使用道具 举报

排名
32192
昨日变化
22

0

主题

3

帖子

19

积分

Rank: 1

UID
248604
好友
0
蛮牛币
28
威望
0
注册时间
2017-10-13
在线时间
12 小时
最后登录
2017-10-20
发表于 2017-10-13 13:39:44 | 显示全部楼层
开始我以为是ZWrite On的作用,测试了才发现是ZTest的作用,Unity的3D Text应该是关闭了ZTest,所以你这段代码应该这样就可以了:
SubShader {
                Tags { "Queue" = "Transparent" "IgnoreProjector" = "true" "RenderType"="Transparent" }

                Blend SrcAlpha OneMinusSrcAlpha
               
                Pass{
                        Color[_Color]
                        SetTexture[_MainTex]{
                                combine primary,texture * primary
                        }

                }
               
        }

回复 支持 反对

使用道具 举报

5熟悉之中
777/1000
排名
2568
昨日变化
1

2

主题

114

帖子

777

积分

Rank: 5Rank: 5

UID
45645
好友
3
蛮牛币
2629
威望
0
注册时间
2014-9-19
在线时间
221 小时
最后登录
2017-10-20
发表于 2017-10-13 14:23:46 | 显示全部楼层
亲自试验了!楼主真棒!

回复 支持 反对

使用道具 举报

4四处流浪
489/500
排名
4143
昨日变化
3

1

主题

85

帖子

489

积分

Rank: 4

UID
79201
好友
0
蛮牛币
1237
威望
0
注册时间
2015-3-12
在线时间
131 小时
最后登录
2017-10-21
发表于 2017-10-14 08:51:39 | 显示全部楼层
66666666666666666

回复 支持 反对

使用道具 举报

5熟悉之中
609/1000
排名
3027
昨日变化
13

0

主题

52

帖子

609

积分

Rank: 5Rank: 5

UID
97454
好友
1
蛮牛币
1881
威望
0
注册时间
2015-5-4
在线时间
179 小时
最后登录
2017-10-22
发表于 2017-10-14 10:05:07 | 显示全部楼层
在unity的3D物体下有一个3DText 物体。这个物体可以在空间坐标中显示文本文字。
如下图:


回复 支持 反对

使用道具 举报

排名
17344
昨日变化
5

0

主题

24

帖子

63

积分

Rank: 2Rank: 2

UID
229341
好友
0
蛮牛币
78
威望
0
注册时间
2017-6-29
在线时间
15 小时
最后登录
2017-10-16
发表于 2017-10-14 10:17:45 | 显示全部楼层
学到了,Nice

回复

使用道具 举报

4四处流浪
328/500
排名
5358
昨日变化
3

0

主题

52

帖子

328

积分

Rank: 4

UID
201034
好友
4
蛮牛币
622
威望
0
注册时间
2017-1-11
在线时间
78 小时
最后登录
2017-10-21
发表于 2017-10-14 10:20:30 | 显示全部楼层
棒棒棒

回复

使用道具 举报

3偶尔光临
189/300
排名
16784
昨日变化
9

0

主题

95

帖子

189

积分

Rank: 3Rank: 3Rank: 3

UID
222161
好友
0
蛮牛币
7
威望
0
注册时间
2017-5-15
在线时间
69 小时
最后登录
2017-10-23
发表于 2017-10-14 11:01:09 | 显示全部楼层
看了,还行吧

回复

使用道具 举报

7日久生情
1930/5000
排名
6380
昨日变化
1

4

主题

1579

帖子

1930

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
209186
好友
3
蛮牛币
2540
威望
0
注册时间
2017-3-1
在线时间
191 小时
最后登录
2017-10-23
发表于 7 天前 | 显示全部楼层
不错,学习啦

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表