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

扫一扫,访问微社区

开发者专栏

关注:2067

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

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

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

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

[复制链接]  [移动端链接]
排名
2532
昨日变化
2

68

主题

280

帖子

1397

积分

Rank: 9Rank: 9Rank: 9

UID
54986
好友
11
蛮牛币
11499
威望
0
注册时间
2014-11-12
在线时间
407 小时
最后登录
2018-1-23

专栏作家

发表于 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步顺序不能改变。



回复

使用道具 举报

3偶尔光临
178/300
排名
10624
昨日变化
4

0

主题

46

帖子

178

积分

Rank: 3Rank: 3Rank: 3

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

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



回复 支持 反对

使用道具 举报

6蛮牛粉丝
1041/1500
排名
3504
昨日变化
17

0

主题

504

帖子

1041

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
872/1000
排名
3015
昨日变化
13

1

主题

261

帖子

872

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

排名
868
昨日变化
6

34

主题

805

帖子

3297

积分

Rank: 9Rank: 9Rank: 9

UID
76248
好友
20
蛮牛币
17706
威望
0
注册时间
2015-2-28
在线时间
864 小时
最后登录
2018-1-23

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

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

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

回复 支持 反对

使用道具 举报

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

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 | 显示全部楼层
学到了学到了

回复

使用道具 举报

6蛮牛粉丝
1320/1500
排名
4228
昨日变化
20

7

主题

639

帖子

1320

积分

Rank: 6Rank: 6Rank: 6

UID
183904
好友
5
蛮牛币
2430
威望
0
注册时间
2016-11-15
在线时间
390 小时
最后登录
2018-1-23

迈向小康

QQ
发表于 2017-10-13 13:14:00 | 显示全部楼层

回复

使用道具 举报

排名
30017
昨日变化
16

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熟悉之中
839/1000
排名
2523
昨日变化
3

2

主题

122

帖子

839

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
563/1000
排名
3970
昨日变化
9

1

主题

114

帖子

563

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

5熟悉之中
771/1000
排名
2523
昨日变化
3

0

主题

68

帖子

771

积分

Rank: 5Rank: 5

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


回复 支持 反对

使用道具 举报

排名
18379
昨日变化
14

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四处流浪
412/500
排名
4676
昨日变化
30

0

主题

57

帖子

412

积分

Rank: 4

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

回复

使用道具 举报

3偶尔光临
229/300
排名
17782
昨日变化
5

0

主题

114

帖子

229

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

7日久生情
3781/5000
排名
4196
昨日变化
29

5

主题

3129

帖子

3781

积分

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

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

回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

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