Unity3D Sprite ...但是单面的?

2024-01-25

团结优秀Sprites (Unity优秀的新精灵 http://docs.unity3d.com/ScriptReference/Sprite.html),除其他有价值的优点外,实际上是双面的。

在 2D 或 3D 用例中,您可以翻转这些小混蛋,但仍然从后面看到它们 - 它们是从两侧渲染的。

我也喜欢它们使用的无光照着色器(即 Sprite-Default,而不是 Sprite-Diffuse)。

但是,我需要一个老式的单面Sprite.

幸运的是,你可以免费下载Unity使用的优秀着色器的源码...令人困惑的是,你不能只在编辑器中打开它,而是看here http://forum.unity3d.com/threads/builtin-unity-shaders-source.2085/从那时起here https://unity3d.com/get-unity/download/archive.

After 涉及廉价威士忌的大量持续努力,我对着色器进行了两 (2) 次修改。

  1. 我将文件第一行的名称更改为“DefaultSingle”而不是“Default”

  2. 我评论掉了这条线Cull Off

(然后我做了一个新的Material,将其称为“Sprite Single Sided”,将着色器设置为这个新着色器,然后Sprite我用新材料替换了材料槽。)

事实上,我是否因进行此修改而搞砸了着色器中的任何内容?一个人可以愉快地注释掉“Cull off”而不引起进一步的问题吗?改变通常使用的材料是否有一些问题?Sprite(你无法“看到”它,所以我不知道)。更广泛地说,是否有更正确的方法来实现单面Sprite?

// file "Sprites-DefaultSingle.shader"
Shader "Sprites/DefaultSingle"
{
  Properties
  {
    [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
    _Color ("Tint", Color) = (1,1,1,1)
    [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
  }

  SubShader
  {
    Tags
    { 
      "Queue"="Transparent" 
      "IgnoreProjector"="True" 
      "RenderType"="Transparent" 
      "PreviewType"="Plane"
      "CanUseSpriteAtlas"="True"
    }

  ///  Cull Off
    Lighting Off
    ZWrite Off
    Blend One OneMinusSrcAlpha

    Pass
    {
    CGPROGRAM
      #pragma vertex vert
      #pragma fragment frag
      #pragma multi_compile _ PIXELSNAP_ON
      #pragma shader_feature ETC1_EXTERNAL_ALPHA
      #include "UnityCG.cginc"
      
      struct appdata_t
      {
        float4 vertex   : POSITION;
        float4 color    : COLOR;
        float2 texcoord : TEXCOORD0;
      };

      struct v2f
      {
        float4 vertex   : SV_POSITION;
        fixed4 color    : COLOR;
        float2 texcoord  : TEXCOORD0;
      };
      
      fixed4 _Color;

      v2f vert(appdata_t IN)
      {
        v2f OUT;
        OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
        OUT.texcoord = IN.texcoord;
        OUT.color = IN.color * _Color;
        #ifdef PIXELSNAP_ON
        OUT.vertex = UnityPixelSnap (OUT.vertex);
        #endif

        return OUT;
      }

      sampler2D _MainTex;
      sampler2D _AlphaTex;

      fixed4 SampleSpriteTexture (float2 uv)
      {
        fixed4 color = tex2D (_MainTex, uv);

#if ETC1_EXTERNAL_ALPHA
        // get the color from an external texture ..
        color.a = tex2D (_AlphaTex, uv).r;
#endif //ETC1_EXTERNAL_ALPHA

        return color;
      }

      fixed4 frag(v2f IN) : SV_Target
      {
        fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color;
        c.rgb *= c.a;
        return c;
      }
    ENDCG
    }
  }
}

这不会造成任何问题,并且是正确的做事方式。如果你想真正明确地表达它,你可以将该行更改为Cull Back而不是将其注释掉,而是将背面剔除定义为默认行为,因此只需将其删除就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3D Sprite ...但是单面的? 的相关文章

随机推荐

  • 使用 Doxygen 记录命名空间

    我在 Doxygen 识别命名空间和模块时遇到问题 我认为问题在于是否将 addtogroup命名空间内或命名空间外 示例 1 在命名空间之外 addtogroup Records Generic record interfaces and
  • gcc 新安装的库 (libexpat1-dev) 在当前终端 (debian) 中无法识别

    我花了相当多的时间试图编译一个基于外籍人士的示例程序 当我尝试编译时收到以下错误消息 gcc Wall lexpat line c o blah line c In function main line c 99 8 warning for
  • REST API URL 必须是这样的吗?

    要实现 RESTful API 是否必须实现如下所示的 URL 结构 http example com post http example com post 123 哪里的 123将用于编辑 删除 另一种提问方式是 这样的 URL 可以称为
  • Android Studio 和 android.support.v4.app.Fragment:无法解析符号

    我正在尝试 Android Studio 而不是 Eclipse 我安装它 然后启动一个全新的项目并按照向导操作 我没有添加自己的代码 然后 我右键单击创建一个新组件 一个新的 Fragment 并选择一个新片段 一旦我这样做 我就会看到编
  • 应用程序失去和获得焦点的 .NET 事件

    有没有一种简单的方法可以检测 NET 应用程序何时获得或失去焦点 您正在寻找的活动是表单激活 http msdn microsoft com en us library system windows forms form activated
  • `display:inline-block` 元素上的奇怪边距

    我有 6 个DIVs with display inline block在一行中 但它们之间有一个奇怪的空白 我怎样才能摆脱它呢 它们应该排成一排放入容器中 Fiddle http jsfiddle net y7L7q http jsfid
  • 避免位图内存不足错误的建议

    我正在开发一个 Android 应用程序 该应用程序有一个包含大量图像的视图 我有一个错误 我会尽力提供尽可能多的信息 希望有人能给我一些建议 该应用程序在所有本地测试中都运行良好 然而 我收到了很多来自用户的崩溃消息 java lang
  • Swift 将 UITextView 文本保存为 .Pdf、.Doc 和 .Txt 文件格式并显示

    我的场景是 我尝试以三种格式保存 UITextView 文本 pdf doc 和 txt 在这里 格式化选项用户可以根据警报选项进行选择 保存后需要在预览控制器中显示以进行文件共享 如何实现这一目标 func createPDF text
  • IE >= 8 的原型 Event.StopPropagation

    我了解处理 IE 的 event stopPropagation 的正确方法是 if event stopPropagation event stopPropagation else event returnValue false 但是是否
  • 配置 ADP 应用程序以使用不同的数据库...?

    我有一个 Access 项目 ADP 当前配置为连接到一台服务器上的 SQL Server 2000 数据库 我现在需要将该服务器迁移到位于另一台服务器上的 SQL Server 2008 这只是修改连接字符串以将应用程序指向新数据库的简单
  • quotRem 和 divMod 之间的区别什么时候有用?

    来自哈斯克尔报告 quot rem div 和 mod 类 如果 y 是 方法满足这些定律 非零 x quot y y x rem y x x div y y x mod y x quot整数除法是否被截断 趋于零 而结果div被截断为负无
  • 如何在React JS中动态更新MaterialUI DataGrid表

    这是我正在尝试做的事情的概要 当用户单击一行中的复选框时 该行将被保存以免被删除 通常用户将单击多行 一旦用户点击 清除记录 按钮 所有没有选中复选框的记录都会被删除 我得到了一些关于如何做到这一点的一般建议 并且我使用了给我的建议以及我自
  • Android studio 错误“检测到不支持的模块:以下模块不支持编译”

    我使用的是Android Studio 1 0 1 我的项目中有一个被其他模块引用的 java 模块 我已经从 SVN 上查过了但是现在每个 检测到不支持的模块 以下模块不支持编译 遗憾的是 您不能在一个项目中同时拥有非 Gradle Ja
  • 如何将 Comodo SSL 应用于 Kubernetes Ingress?

    我们购买了 Komodo SSL 证书 它有 5 个文件 我正在寻找有关如何将其应用到 Kubernetes Ingress 的指南 正如它所描述的文档 https kubernetes io docs concepts services
  • 如何避免 ion-option/ion-select 中的确定/取消按钮

    您好 如何避免离子选项中的 确定 和 取消 按钮 I need an output as the below image after clicking the ion option 我已经尝试了所有选项http ionicframework
  • 如何检测现有文件引起的System.IO.IOException?

    我想创建并打开一个文件 但前提是该文件不存在 我不想使用 File Exists 因为在创建同名文件后会切换线程 如何检查 System IO IOException 异常是否是由现有文件引起的 我不想解析错误消息 即使它可以像 index
  • 为什么 Heroku 每天都会重置我的文件“data.json”?

    我制作了一个discordJs 机器人 它将数据保存在文件中 一切都托管在 Heroku 上并且一切正常 但每天 Heroku 都会重置我的文件 为什么我不能每天保存我的文件 以下是 Heroku 文档的完整解释 Heroku 文件系统是短
  • 真正停止元素绑定 - 取消元素绑定 - AngularJS

    我正在尝试找出如何阻止DOM来自角度范围内的绑定数据的元素 我知道您可以使用 if 语句等来做到这一点 但是有没有一种真正且永久的方法来停止绑定角度元素但保留添加的内容 所以说我有这个 div class Welcome div 我更改了模
  • CSS Firefox - 如何停用虚线边框(firefox 单击指示器)?

    对于我最近的网络项目来说 这个点击指示器是一个令人厌恶的部分 我讨厌这个 我如何对我的 Firefox 浏览器说他不应该标记单击的对象 如果您的菜单项不是输入元素 例如按钮 您可以使用 CSS 隐藏它 如下所示 element outlin
  • Unity3D Sprite ...但是单面的?

    团结优秀Sprites Unity优秀的新精灵 http docs unity3d com ScriptReference Sprite html 除其他有价值的优点外 实际上是双面的 在 2D 或 3D 用例中 您可以翻转这些小混蛋 但仍