精华内容
下载资源
问答
  • Unity Sprite 灰色图效果

    千次阅读 2016-12-09 10:55:25
    灰度 Shader Sprite Unity
    Shader "Sprite/SpriteGray"
    {
    	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
    			Fog{ Mode Off }
    		Blend One OneMinusSrcAlpha
    
    			Pass
    		{
    			CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag
    #pragma multi_compile DUMMY PIXELSNAP_ON
    #include "UnityCG.cginc"
    
    			struct appdata_t
    			{
    				float4 vertex : POSITION;
    				float4 color : COLOR;
    				float2 texcoord : TEXCOORD0;
    			};
    
    			struct v2f
    			{
    				float4 vertex : SV_POSITION;
    				fixed4 color : COLOR;
    				half2 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;
    
    			fixed4 frag(v2f IN) : SV_Target
    			{
    				fixed4 c = tex2D(_MainTex, IN.texcoord) * IN.color;
    				c.xyz *= c.a;//不加这个,alpha值低的时候,白色会消失看不见。
    				float gray = dot(c.xyz, float3(0.299, 0.587, 0.114));
    				//float gray = dot(c.xyz, float3(0.333, 0.333, 0.334));
    				c.xyz = float3(gray, gray, gray);
    				return c;
    			}
    			ENDCG
    		}
    	}
    }
    注意看这句 dot(c.xyz, float3(0.299, 0.587, 0.114));

    gray = x * 0.229 + y * 0.587 + z * 0.114
    看似一个非等值加权的过程。
    那么为甚不是x,y,z各取三分之一呢?(gray = x*.333+y*.333+z*.333)

    这是因为 人眼对绿色的敏感度最高,对红色的敏感度次之,对蓝色的敏感度最低,因此使用不同的权重将得到比较合理的灰度图像。
    实验和理论推导得出 0.299、 0.587、 0.114让人看起来最舒服

    原图

    非等值平均 float gray = dot(c.xyz, float3(0.299, 0.587, 0.114));

    等值平均 float gray = dot(c.xyz, float3(0.333, 0.333, 0.333));

    不过以我的凡夫俗子之眼,觉得等值平均也挺好的。


    展开全文
  • Unity Sprite Atlas

    2021-01-07 13:19:07
    Unity Sprite Atlas Unity版本 2019.1.15f1c1 使用图集的好处 下载BuildReport工具,查看包体里的内容    提取码:wpqi  导入unity工程,每次打包后会弹出包体里的内容介绍 本质:...

    Unity Sprite Atlas

    Unity版本

    • 2019.1.15f1c1

    使用图集的好处

    • 下载BuildReport工具,查看包体里的内容    提取码:wpqi  导入unity工程,每次打包后会弹出包体里的内容介绍
    • 本质:将各种分辨率UI图片合成一个大图
    • unity中点击图片可以查看图片分辨率和大小,但是这里显示的不是本地图片本身的大小,而是图片转换成你选的格式后的大小,Android一般选RGBA Compressed DXT5格式。切换不同的格式显示的图片大小会改变。这里显示的大小基本就是打包后图片在包体里的大小,还有大概占1%大小的sprite也包含在这里。所以打包后看到图片大小比unity里显示的大一点点。更明显的操作方法是,将图片打成图集,还可以在report工具里看到原来的图片,只不过大小是预估的1%大小,实际上这不是texture的大小,因为texture已经在图集里了,也就是合成一张图了,而是sprite的大小是其他资源。
    • 好处
      • 图片占用内存空间小了,但是并不能减少包体大小,反而会增加包体的大小,因为图集总有空的地方。因为OpenGL ES中每张贴图都需要设置成2的n次方才能使用,所以不符合要求的UI图会扩展成符合规则的分辨率的图片,导致图片加载到内存中体积暴涨。
      • draw call 减少   什么是draw call

    创建Sprite Atlas

    • 鼠标右键 create/sprite atlas 创建sprite atlas文件
    • Windows/2D/Sprite Packer/Open Project Editor Settings/ Sprite Packer/Aways Enable
    • 为图集添加图片,点击pack preview,看到图集

    Sprite Atas设置

    • Tight Packing     默认勾选,但是打包出来图集图片之间相互有重叠。建议去掉勾选。
    • Padding      图集中图片的像素间距,建议选择8.
    • include in build
      • 意义:打包的时候是否要把图集打进包体里(选中就是打入包体)。如果不打入包体里就需要代码从服务器下载或者包体外加载需要的图集。

      • 问题:外部加载的图集资源怎么应用到UI?

        • 当gameobject需要的图集不存在的时候,unity有提供回调
          using UnityEngine.U2D;
          SpriteAtlasManager.atlasRequested += OnAtlasRequest;
          这个回调不会频繁回调,缺一个图集只会调用一次。就是说虽然有很多物体会报缺失但是如果是缺失的图片属于同一个图集,那么这个缺失汇总成一个回调。代码如下(这里加载sprite atlas资源采用的是AssetBundle,其他方式也行只要加载到图集资源即可),挂载在场景中即可:

            using System.Collections;
            using UnityEngine;
            using UnityEngine.U2D;
            using System;
          
            public class Test : MonoBehaviour
            {
                void OnEnable()
                {
                    SpriteAtlasManager.atlasRequested += OnAtlasRequest;
                }
                /// <summary>
                /// tag是sprite atlas的名字   action方法将图集中的图片应用到UI上
                /// </summary>
                /// <param name="tag"></param>
                /// <param name="action"></param>
                public void OnAtlasRequest(string tag, Action<SpriteAtlas> action)
                {
                    StartCoroutine(LoadAsset(action, tag));
                }
                private SpriteAtlas sa;
                private bool loadingsa;
                private IEnumerator LoadAsset(Action<SpriteAtlas> action, string tag)
                {
                    yield return new WaitForSeconds(3);
                    if (!loadingsa && sa == null)
                    {
                        loadingsa = true;
                        AssetBundleCreateRequest acr = AssetBundle.LoadFromFileAsync(GetPath(tag));
                        yield return acr;
                        sa = acr.assetBundle.LoadAsset<SpriteAtlas>(tag);
                        loadingsa = false;
                    }
                    action(sa);
                }
                private string GetPath(string tag)
                {
                    string path = Application.dataPath + "/Texture/Atlas/test.unity3d";
                    return path;
                }
                void OnDisable()
                {
                    SpriteAtlasManager.atlasRequested -= OnAtlasRequest;
                }
            }  
          
        • 如果不勾选,unity编辑器运行UI界面都是空白的。解决方法如上。也就是说不勾选的话,unity编辑器也找不到图集资源,需要手动加载。

      • 需要勾选吗?勾选有什么问题?

        • 如果图集资源不想打入包体内,不勾选,需要外部加载图集资源。如果要打入包体内,勾选,不需要外部加载图集资源,但是包体会加入图集资源变大。
        • 勾选打入包体内会造成资源冗余吗?经过测试会。造成资源冗余的原因是,当你使用assetbundle打包资源时,如果不同的assetbundle使用了同一个图集,那么图集会打入每个assetbundle,造成资源冗余。查看assetbundle资源内容看教程:查看AssetBundle内容工具analyzer
    展开全文
  • Unity Billboard Sprite

    2018-08-17 15:38:52
    修改了UnitySprite shader实现的一个Billboard-Sprite 缺点是不能缩放 Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt) Shader "Tank/Billboard-...

    修改了Unity的Sprite shader实现的一个Billboard-Sprite 缺点是不能缩放

    Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
    
    Shader "Tank/Billboard-Sprite"
    {
        Properties
        {
            [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
        _Color("Tint", Color) = (1,1,1,1)
            _ScaleX("Scale X", Float) = 1.0
            _ScaleY("Scale Y", Float) = 1.0
            [MaterialToggle] PixelSnap("Pixel snap", Float) = 0
            [HideInInspector] _RendererColor("RendererColor", Color) = (1,1,1,1)
            [HideInInspector] _Flip("Flip", Vector) = (1,1,1,1)
            [PerRendererData] _AlphaTex("External Alpha", 2D) = "white" {}
        [PerRendererData] _EnableExternalAlpha("Enable External Alpha", 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 SpriteFrag
            #pragma target 2.0
            #pragma multi_compile_instancing
            #pragma multi_compile _ PIXELSNAP_ON
            #pragma multi_compile _ ETC1_EXTERNAL_ALPHA
            #include "UnitySprites.cginc"
            uniform float _ScaleX;
            uniform float _ScaleY;
            struct vTof
            {
                float4 vertex   : SV_POSITION;
                fixed4 color : COLOR;
                float2 texcoord : TEXCOORD0;
                UNITY_VERTEX_OUTPUT_STEREO
            };
    
            vTof vert(appdata_t IN)
            {
                v2f OUT;
    
                UNITY_SETUP_INSTANCE_ID(IN);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
    
                #ifdef UNITY_INSTANCING_ENABLED
                        IN.vertex.xy *= _Flip.xy;
                #endif
    
                //OUT.vertex = UnityObjectToClipPos(IN.vertex);
                OUT.texcoord = IN.texcoord;
                OUT.color = IN.color * _Color * _RendererColor;
    
                //#ifdef PIXELSNAP_ON
                //      OUT.vertex = UnityPixelSnap(OUT.vertex);
                //#endif
    
                OUT.vertex = mul(UNITY_MATRIX_P,
                    mul(UNITY_MATRIX_MV, float4(0.0, 0.0, 0.0, 1.0))
                    + float4(IN.vertex.x, IN.vertex.y, 0.0, 0.0)
                    * float4(_ScaleX, _ScaleY, 1.0, 1.0));
    
    
                return OUT;
            }
    
    
    
    
            ENDCG
        }
        }
    }
    展开全文
  • 快速的產生sprite特效的套件 针对2D游戏使用 节省开发时间 制造良好美术效果
  • All In 1 Sprite Shader.unitypackage
  • Unity 2D Sprite

    2017-08-26 19:44:37
    Unity 2D Sprite的正确打开方式这里简单的叙述一下Unity3D 的 Sprite组件的需要注意的基本功能,适合不懂的人看。 首先需要说明Unity编辑器中创建的2D和3D工程,在初始时候会有什么区别: 在2D中Camer默认的...

    Unity 2D Sprite的正确打开方式


    这里简单的叙述一下Unity3D 的 Sprite组件的需要注意的基本功能,适合不懂的人看。

    • 首先需要说明Unity编辑器中创建的2D和3D工程,在初始时候会有什么区别:
      1. 在2D中Camer默认的Projection模式为Orthograpic,而3D中为Perspective
      2. 在2D 中Scene窗口默认处于2D模式下,而3D为3D模式。
      3. 向2D工程的Assets目录中添加图片资源的时候,默认Texture Type为Sprite,而3D为Default.
      4. 在Editor Setting中(Edit -> Project Setting -> Editor),2D工程的Default Behavior Mode为2D,而3D中为3D。


    • 在导入一张图片的时候,可以在Inspector窗口中查看图片信息,以及对他进行相应的一些操作。
      1. 其中Pixels To Units默认值为100,表示该图片的长或宽上100个像素对应与世界坐标系的1个单位长度。
      2. 一般情况下,当需要放大模型时候,是直接调节对象的Transform的Scale。但由于2D场景中,处理的都是图片(像素数据),所以图片分辨率小但是又去强制放大,就会出现马赛克或锯齿。所有这时候就要调节前面提及的Pixels To Units。通过修改世界坐标系中1个单位长度对应的Sprite长或宽的像素来改变Sprite的显示大小,值越小图片越大。
      3. 3.


    • 有过3D开发经验的你应该知道,在3D图形学中有一种画家算法,即后绘制的几何形状会覆盖之前的绘制形状。而Sprite组件中的Sorting Layer属性控制的是不同层之间的绘制顺序,而Order in Layer属性控制的是同层中物体的绘制顺序。


    • 制作Sprite动画:
      1. 首先找一张有良好分割的帧图片,导入到Unity中。
      2. Inspector窗口中查看该图片信息。修改其中Sprite Mode为Multiple。然后Apple,再打开Sprite Editor
      3. 然后点击Sprite Editor窗口左上角的Slice,保持默认设置,然后点击Slice。如果每个图片的分割良好的话,Unity会自动对图集的每个图片进行进行划分区域。否则,你就得去手动调节。OK之后,Apply保存退出。
      4. 这样就可以直接把这个Sprite图片拖到Hierarchy视图中。创建一个Sprite对象。
      5. 为其添加Animations组件。(方式: Window -> Animation),然后点击Creat。
      6. 创建动画片段之后。可以直接把刚才拆分好的所以子图片直接拖到时间线上。
      7. 其中,Animation的采样率Sample可以调节动画速度。值越小,动画越慢。
    展开全文
  • unity sprite renderer

    2019-09-20 01:51:11
    下来主要讲一下unity sprite renderer 切割的问题,大家可以作为参考学习一下,主要的内容步骤如下: 引子上一次我们讲了 MonoBehaviour的前世今生 ,了解了游戏中的每一个GameObjec都是由脚本控制的,这一次我们...
  • SpriteAtlas是Unity新出的一个功能,用来取代旧版的Sprite Packer。 图集打包的意义: 减少DrawCall 图集将图片打包为2的幂次方的素材大小,可以提升性能 减小包体大小 Sprite Packer(旧版本)缺点: ...
  • Unity Sprite Altas

    2020-05-15 17:31:15
    Sprite Atlas(精灵图集) Sprite Atlas 针对现有的图集打包系统Sprite Packer在性能和易用性上的不足,进行了全面改善。除此之外,相比Sprite Packer,Sprite Atlas将对精灵更多的控制权交还给用户。由用户来掌控...
  • Sprite Packer unity以前打包图集的方式,该功能在windows/sprite packer,如果功能不可用,打开目录edit/project setting/editor,更改sprite packer的mode,在下拉列表中 disabled不启用、enabled for builds...
  • Unity中自动从生成的LPC角色Spritesheet中切片并重命名Sprite。 设置 只需将此存储库克隆到您的项目中即可。 每当您导入Spritesheet时,它都会自动检查它是否是基于LPC的Spritesheet ,对图像进行切片,并根据此...
  • unitysprite

    2017-05-26 21:31:10
    sprite
  • Unity 镜像sprite

    千次阅读 2018-04-08 20:22:14
    4.Sprite的类型(Simple,Sliced) using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class MirrorSprite : BaseMeshEffect { public enum eMirrorType { eHor, eVer, } ...
  • Unity Sprite Atlas使用

    2021-07-14 19:46:40
    1.为什么要用Sprite Atlas。 Sprite Atlas针对现有的图集打包系统Sprite Packer在性能和易用性上的不足,进行了全面改善。除此之外,相比Sprite Packer,Sprite Atlas将对精灵更多的控制权交还给用户。由用户来掌控...
  • 2DxFX 2D Sprite FX 3.0.0.unitypackage2DxFX 2D Sprite FX 3.0.0.unitypackage
  • 结果发现图片换了,尺寸也会跟着变,这是因为原图尺寸不一,最直接的就是改变原图尺寸,或者直接在Unity里获取Textrue2d的尺寸,但是有些麻烦,sprite的bounds属性又是只读,不能直接改;其实可以通过改缩放来实现...
  • Unity拖动Sprite

    2020-06-09 13:30:24
    注意要加collider。 private void OnMouseDown() { oriMousePos = Input.mousePosition; oriPos = transform.position; } private void OnMouseDrag() ... var offset = (Camera.main.ScreenToWorldPoint(Input....
  • Sprite Packer 2017.3及之前使用的图集方案,通过对Sprite 打Tag的方式,来自动生成...没错,是替代,即Sprite Packer和Sprite Atlas不能共存,UnitySprite Packer Mode中的单选性决定了这个不能共存的性质。和Spr...
  • All In 1 Sprite Shader 1.9.unitypackage
  • Unity ~Sprite (精灵)Sprite Packer

    千次阅读 2018-09-03 17:23:13
    1.在Unity中选择Edit –&gt;Project Settings–&gt;Editor 2.Window–&gt;2D–&gt;Sprite Packer 3.点击左上角的Pack 完成打包 重新打包: Repack (只要没有采用默认打包,该选项就可以使用...
  • Unity Sprite Packer 问题集合

    千次阅读 2016-04-13 16:25:25
    介绍 今天突发奇想用了下sprite packer 这个功能,基本用法网上教程一堆一堆的,这里就不赘述了。在使用sprite packer过程中遇到一些问题...这是因为unity editor木有开启sprite packer 这个功能。 这个只有老版本的u
  • UnitySpriteSheet 使用

    千次阅读 2015-12-02 19:21:50
    最近手头的Unity项目, 用到了特效和简单人物动作的部分, 其中涉及到大量的美术序列帧资源SpriteSheet. unity原生太这等资源的管理感觉不是太好. 自己做了个工具来部分解决这个问题. 这里记录一下以备忘, 顺便分享...
  • https://docs.unity3d.com/2017.1/Documentation/ScriptReference/U2D.SpriteAtlas.html https://docs.unity3d.com/2017.1/Documentation/Manual/SpriteAtlas.html http://blog.csdn.net/u01
  • Unity 2D特效资源包 2DxFX 2D Sprite FX v2.3.7.unitypackage
  • UnitySprite图层排序

    2021-09-07 15:15:55
  • http://forum.unity3d.com/threads/2d-sprite-packer-and-pvrtc.218633/ http://docs.unity3d.com/Manual/SpritePacker.html http://docs.unity3d.com/Manual/class-TextureImporter.html http://docs.un...
  • Unity Sprite 灰色图

    2020-11-30 10:21:25
    Sprite怎么变成灰色图效果,最简单的方法就是通过修改shader实现。 Shader "Sprite/SpriteGray" { Properties { [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} _Color("Tint", Color) = ...
  • 前言:Unity3D笔记是我平时做一些好玩的测试和研究,记录的笔记。...想要unity2d 中sprite 收到攻击后泛白。 我第一反应这个改下unity默认的shader 应该就可以了。于是想让图形学的同事帮忙写下。因为
  • Unity SpriteRender 实现Fill效果

    千次阅读 2016-12-06 14:51:15
    之前自己写过一个Sprite2D实现Fill的效果的Shader。结果写的很烂自己也不是很满意,今天偶然发现原来这件事,Unity已经替我们做好了,真是太囧了。 方法: 【1】新建一个SpriteRenderer,直接将一个Sprite拖进...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,652
精华内容 4,660
关键字:

spriteunity