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

  • 相关阅读:
    Apache-一个IP多个主机域名
    Apache-配置详解
    Apache-配置、测试和调试
    Linux-Memcache和Redis常用命令
    Linux-Linux下安装redis报错"undefined reference to__sync_add_and_fetch_4"解决办法
    C-从源文件到可执行文件的详细编译链接过程
    JavaScript-jQuery报TypeError $(...) is null错误(jQuery失效)解决办法
    MSSQL-SQL SERVER一些使用中的技巧
    unity 在Game视图中显示Gizmos
    unity Transform.TransformPoint
  • 原文地址:https://www.cnblogs.com/fengrenyuan/p/3729642.html
Copyright © 2020-2023  润新知