unity

Unity-使用Shader裁剪图片

允我心安 提交于 2019-12-03 16:14:49
原文: http://www.tuicool.com/articles/FziyEv 在unity中,使用一张正方形的图片,但是要显示成圆形。这样怎么做呢? 1、首先,新建一个shader:Circular 2、再新建一个material,选择上面新建的shader。 3、最后将上面的material赋值给unity中要显示为圆形的图片 下面是shader代码 Shader "Self/Circular" { Properties { _MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {} _StencilComp ("Stencil Comparison", Float) = 8 _Stencil ("Stencil ID", Float) = 0 _StencilOp ("Stencil Operation", Float) = 0 _StencilWriteMask ("Stencil Write Mask", Float) = 255 _StencilReadMask ("Stencil Read Mask", Float) = 255 _ColorMask ("Color Mask", Float) = 15 // 以 1 - _Radius 长度为半径的圆形 _Radius ("Radius", Range(0,0.5))

写在Shader前, unity数字图像处理 上

假如想象 提交于 2019-12-03 16:13:18
孙广东 2016.8.4 参考: http://lolikitty.pix.net/ http://blog.csdn.net/u010019717 注意: 不是Shader 代码 1、 调整图片的饱和度 不太需要原理, 维基百科给出的公式: https://zh.wikipedia.org/zh-cn/YUV 其中提到了 主要的抽样(subsample)格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和YCbCr 4:4:4。 http://blog.csdn.net/u010019717 上面公式使用了 4:2:2, 下面代码使用 4:4:4 完全取样。 场景中都有什么, 然后挂上下面的脚本 设置参数值大小: using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public Texture2D t; [Range(0, 5)] public float saturation = 1; // 饱和度调整,编辑器设置 Texture2D tt; void Start() { if (tt != null) { Destroy(tt); } transform.localScale = new Vector3((float)t.width /

Unity 精灵图集Shader渲染错乱

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-03 16:12:45
原因 在使用 Unity 开发游戏过程中,UI 界面上的表现有着举足轻重的地位,优秀的表现效果可以让游戏增色不少。要让 UI 精灵图片有独特的表现效果,需要给图片加上特定的 Shader 着色器,这样一来就能让这个图片表现出独特的效果,比如:溶解、消失等等。然而,在使用中,因为精灵被打包到图集里面,运行起来的效果大相径庭,Shader 里面 uv 坐标不再是单个图片的坐标了,而是图集里面该图片的坐标,使得 Shader 计算错误,最终渲染错乱。 例子 当前测试版本:Unity 5.3.0 测试工程地址: https://github.com/akof1314/uGUISpriteInAtlasShader 正确的表现: 错误的表现: 包含该图片的图集: 图片位于图集的左下角,进行扭曲效果计算时,使用了图集的中心位置,导致出错。 解决 将单个图片的纹理坐标保存到 UV1 中,传递单个图片的纹理坐标和在图集中纹理坐标的比例关系。 纹理坐标 单个图片的纹理基本是(0,0),(0,1),(1,1),(1,0),UGUI 中图片控件只使用了 UV0,那么就可以将单个图片的纹理保存到 UV1 中。 继承 BaseMeshEffect ,重载 ModifyMesh 方法,代码如下: using UnityEngine; using UnityEngine.UI; public class

Unity 利用shader将图片设置为灰色不可点击的状态

那年仲夏 提交于 2019-12-03 16:08:50
Shader "UI/GrayTexture"{ Properties { _MainTex("MainTex", 2D) = "black" {} } SubShader { LOD 200 Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } Pass { Cull Off Lighting Off ZWrite Off Fog{ Mode Off } Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_ST; struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; fixed4 color : COLOR; }; struct v2f { float4 vertex : SV_POSITION; half2 texcoord : TEXCOORD0; fixed4 color : COLOR; }; v2f o; v2f vert

Unity Shader 基础教程

耗尽温柔 提交于 2019-12-03 16:08:27
Unity-Shader-基础教程 在Github上看到一篇关于Unity-Shader的教程,感觉还不错,作者写的很好,很适合Unity-Shader的基础入门,我在这里翻译一下,分享给大家,英文水平很烂,大致能明白Unity-Shader是什么,渲染管线的工作流程,以及Unity Shader的一些类型和怎样编写Unity Shader。 ( 原文链接 ) 第一部分:什么是Shader? Shader是计算机图形渲染管线的一部分,它是一小段应用程序,告诉计算机在场景中怎样对物体渲染和着色。这个过程包括计算颜色和光照值,并将其给予对象,以至于对象被显示在屏幕上。和上面一样,Shader也被用来创建游戏中的一些特殊的和后期处理效果。 在现代游戏引擎中(包括Unity),Shader运行在可编程的GPU渲染管道中,在GPU中允许并行运行,并且能够很快速的进行许多着色计算。 第二部分:渲染管道 为了学习Shader,我们将简单的了解渲染管道,我们将在本教程中讨论下面这张图片: 我更加倾向把Shader看做是由一种信息类型(模型数据、颜色等等)到另外一种信息类型(像素/片元)的变换,对象数据继承与对象本身,例如模型中的点、法线、三角形、UV坐标等等。我们可以把自定义数据/传递到shader中使用,颜色、纹理、数字等等这些。 着色器流水线的第一步是顶点函数。正如你所知的,顶点就是一些点

unity shader 图片置灰

China☆狼群 提交于 2019-12-03 16:07:55
Shader "Unlit/Gray" { Properties { [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} _Color("Tint", Color) = (1,1,1,1) _StencilComp("Stencil Comparison", Float) = 8 _Stencil("Stencil ID", Float) = 0 _StencilOp("Stencil Operation", Float) = 0 _StencilWriteMask("Stencil Write Mask", Float) = 255 _StencilReadMask("Stencil Read Mask", Float) = 255 _ColorMask("Color Mask", Float) = 15 [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0 } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane"

Unity菜单编程-自定义的图片Inspector面板

家住魔仙堡 提交于 2019-12-03 16:06:38
本类以.png图片的inspector面板为例,实现一个图片自定义的Inspector面板,Inspector面板可以直接针对当前选中对象做一个操作。 下面的mytestInspector类是用于将当前选中的.png图片自动转为Sprite类型,但是我有一点不太清楚TextureImporter类在修改textureType的时候,如果没有跟着指定textureFormat图片格式的,就会出现白图片。重新指定一下图片格式就OK了 用到的方法: OnEnable() 激活时调用, OnInspectorGUI GUI刷新类似于mono的OnGUI(),所用的面板组件也和OnGUI差不多 不过学习写的过程中发现几个问题: - 其中,myclass类可以是一个普通类,用来保存或响应Inspector菜单类中的设置或操作 - 继承于Editor的TextureImporter 菜单类不一定非放在Editor目录下 - 同类型的Inspector面板,比如同时有两TextureImporter类,个同时只会有一个生效,并且Editor目录下的那个菜单类优先生效 如图是编译完 图片属性面板的效果: 最后,附上源码: using System; using UnityEditor; using UnityEngine; /// </remarks> /** 这一行比较关键 指明是图片导入菜单 *

unity学习之枚举类型

心不动则不痛 提交于 2019-12-03 16:05:20
欢迎来到 unity 学习、 unity 培训、 unity 企业培训教育专区,这里有很多 U3D 资源、 U3D 培训视频、 U3D 教程、 U3D 常见问题、 U3D 项目源码,我们致力于打造业内 unity3d 培训、学习第一品牌。 今天由于我们做了周测试,所以学的知识就学的少点啊。通过周测试,我发现了自己的不足之处。就是没有理解什么是构造方法。通过老师的讲解我明白原来构造方法就是初始化数据变量。如果你想是默认的初始化变量不是 0 ;需要你在 Main 方法创建对象的位置给参数赋值,这就是构造方法。比如举个简单易懂得例子啊。 public Text(int n) { Console.WriteLine(n);// 这是参数 } public void Main() { } static void Main(string[] args) { Text t = new Text(2);// 这就是构造方法,在这可以进行赋值啊。 Console.ReadKey(); } 只有不断通过对自己的测试才可以发现自己对什么知识点不熟练啊。然后在对自己的知识进行加固。 枚举类型:是一种值类型,用于声明一组命名的常数。 格式: 访问修饰符 enum 枚举名:基础类型 { 枚举成员 } 之间的转换:基础类型不能隐士转化为枚举类型 枚举类型也不能转换为基础类型。 下面举了一个完整的枚举类型

unity学习之动态显示图片

元气小坏坏 提交于 2019-12-03 16:04:25
欢迎来到我们的 狗刨网 ,我们今天主要来复习一下我们学过的知识点。 今天一天还是在围绕项目之间的地形,模型,关卡,分配什么的进行讨论,只是在早上学了动态显示图片。 动态显示图片可以用在游戏开始之前的介绍,图片一张一张的显示变换,当介绍完游戏后,会自动跳转到游戏开始界面,这样更能增加游戏的吸引力。下面让我们一起来学习一下。 图片变换的截图显示的效果不明显,所以我就没有截图,直接写的代码,朋友们可以充分发挥自己的才华,把界面和图片弄的漂亮和高大上哦。 代码如下: //声明GUITexture对象 private GUITexture guiTexture; //声明Texture数组 public Texture[] textures; //声明变量i 用作计时器 private int i=0; //图片显示的间隔时间 private float time = 1f; //初始化一下 void Start () { guiTexture = this.GetComponent<GUITexture> (); } void Update () { time-=Time.deltaTime; //当时间<=0的时候,执行下面的操作 if(time<=0){ i++; time = 1; //当时间等于4的时候,执行下面的操作 if (i == 4) { //跳转到“Game”项目中

Unity之EditorGUILayout-枚举

你说的曾经没有我的故事 提交于 2019-12-03 16:04:09
枚举类型和 系统自带的 静态 Mask 枚举 枚举可以自己定义,EnumMaskField则是系统定义好的,有如下几类值 options 是枚举 static Flags 是 EnumMaskField 该脚本拖拽到对象上 using UnityEngine; using System.Collections; using UnityEditor; public enum OPTIONS { CUBE = 0, SPHERE, PLANE, } public class Test : MonoBehaviour { public OPTIONS options = OPTIONS.PLANE; public float number; public StaticEditorFlags staticFlagMask = 0; } InspectorTest 脚本放在 Editor 文件夹下 using UnityEngine; using System.Collections; using UnityEditor; [CustomEditor(typeof(Test))] public class InspectorTest : Editor { public override void OnInspectorGUI() { Test myTest = (Test)target;