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

  • 相关阅读:
    2014华为上机题(转)
    c语言scanf详解
    Linux环境下Android JNI程序的编译
    C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
    容器化交付流程设计
    阿里云云计算相关术语概念
    k8s的部署策略
    pod控制器介绍
    Statefulset详细解析
    k8s持久化状态存储原理
  • 原文地址:https://www.cnblogs.com/fengrenyuan/p/3729642.html
Copyright © 2011-2022 走看看