游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2288

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

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

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

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

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

72

主题

312

帖子

1502

积分

Rank: 9Rank: 9Rank: 9

UID
54986
好友
11
蛮牛币
2317
威望
0
注册时间
2014-11-12
在线时间
444 小时
最后登录
2018-8-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步顺序不能改变。



回复

使用道具 举报

5熟悉之中
573/1000
排名
5811
昨日变化
3

4

主题

166

帖子

573

积分

Rank: 5Rank: 5

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

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



回复 支持 反对

使用道具 举报

6蛮牛粉丝
1138/1500
排名
3507
昨日变化
2

0

主题

527

帖子

1138

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

6蛮牛粉丝
1414/1500
排名
1638
昨日变化
4

1

主题

344

帖子

1414

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

排名
810
昨日变化
1

34

主题

811

帖子

3497

积分

Rank: 9Rank: 9Rank: 9

UID
76248
好友
21
蛮牛币
18832
威望
0
注册时间
2015-2-28
在线时间
930 小时
最后登录
2018-8-20

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

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

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

回复 支持 反对

使用道具 举报

3偶尔光临
188/300
排名
9701
昨日变化
6

0

主题

27

帖子

188

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

7日久生情
1899/5000
排名
2420
昨日变化
5

7

主题

712

帖子

1899

积分

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

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

回复

使用道具 举报

排名
32755
昨日变化
12

0

主题

5

帖子

37

积分

Rank: 1

UID
248604
好友
0
蛮牛币
30
威望
0
注册时间
2017-10-13
在线时间
24 小时
最后登录
2018-1-11
发表于 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熟悉之中
841/1000
排名
2796
昨日变化
4

2

主题

122

帖子

841

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
563/1000
排名
4433
昨日变化
2

1

主题

112

帖子

563

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
916/1000
排名
2286
昨日变化
2

0

主题

71

帖子

916

积分

Rank: 5Rank: 5

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


回复 支持 反对

使用道具 举报

排名
16318
昨日变化
8

1

主题

31

帖子

95

积分

Rank: 2Rank: 2

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

回复

使用道具 举报

5熟悉之中
867/1000
排名
2935
昨日变化
3

1

主题

120

帖子

867

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

4四处流浪
348/500
排名
13125
昨日变化
5

0

主题

145

帖子

348

积分

Rank: 4

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

回复

使用道具 举报

7日久生情
4206/5000
排名
2647
昨日变化
16

5

主题

3111

帖子

4206

积分

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

UID
209186
好友
5
蛮牛币
5265
威望
0
注册时间
2017-3-1
在线时间
592 小时
最后登录
2018-8-20
发表于 2017-10-16 09:10:18 | 显示全部楼层
不错,学习啦

回复

使用道具 举报

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

本版积分规则

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