• 1.在Assets\Resources目录新建的两个文件夹subjectbtn、subjectbtn_highlight,subjectbtn用于存放各个科目按钮的默认状态图片,subjectbtn_highlight用于存放各个科目按钮的鼠标滑过或点击时的状态图片。...

    1.在Assets\Resources目录新建的两个文件夹subjectbtn、subjectbtn_highlight,subjectbtn用于存放各个科目按钮的默认状态图片,subjectbtn_highlight用于存放各个科目按钮的鼠标滑过或点击时的状态图片。
    2.将各个按钮的背景图片复制到以前两个文件夹中,格式为PNG.
    3.在unity下点击某个图片,在Inspector中修改Texture Type为Sprite(2D and UI),点击“Apply”。

    这里写图片描述
    4.选中某个按钮,在Image(Script)组件中,修改Source Image设置按钮的默认图标,可以选择前面修改为Sprite(2D and UI)的图片。在Button(Script)组件中,修改Transition为Sprite Swap,修改Highlighted Sprite、Pressed Sprite、Disabled Sprited可以设置按钮的高亮图片、按下图片、禁用时的图片。

    这里写图片描述

    5.代码设置图片
    [csharp] view plain copy
    Object[] btnSprite = Resources.LoadAll(“subjectbtn”, typeof(Sprite));
    Object[] btnHighLightSprite = Resources.LoadAll(“subjectbtn_highlight”, typeof(Sprite));

    //
    GameOject obj=GameObject.Find(“Canvas/Button”);
    obj.GetComponent().sprite = (Sprite)btnSprite[0];
    obj.GetComponent().transition = Selectable.Transition.SpriteSwap;
    SpriteState tmpSpriteState = new SpriteState();
    tmpSpriteState.highlightedSprite = (Sprite)btnHighLightSprite[0];
    tmpSpriteState.pressedSprite = (Sprite)btnHighLightSprite[0];
    obj.GetComponent().spriteState = tmpSpriteState;

    展开全文
  • 创建一个空的GameObject,然后给他添加Sprite Renderer组件,或者直接添加一个2D Sprite对象 Sprite Renderer组件下的sprite属性选择第一步中的图片 2. Mesh方法 选择图片,吧图片类型修改为Texture 创建一个...

    1. sprite方法

    • 选择图片,把图片类型修改为sprite
    • 创建一个空的GameObject,然后给他添加Sprite Renderer组件,或者直接添加一个2D Sprite对象
    • Sprite Renderer组件下的sprite属性选择第一步中的图片

    2. Mesh方法

    • 选择图片,吧图片类型修改为Texture
    • 创建一个Material,把Shader属性改成Unlit->transparent, select第一步中图片
    • 创建一个空的GameObject,然后给他添加Mesh Renderer, Materials->Elememnt 0选择刚才的material
    • 在给GameObject添加Mesh Filter组件,Mesh选择sprite

    *注:这种方法添加的图片如果要翻转需要把Tiling设置为负数,offset改成1-原来的偏移

    展开全文
  • Unity3D支持使用大部分位图格式作为图片素材,甚至包括带图层和图层效果的.psd格式文件。 但在实际使用中,并不推荐直接使用非通用的文件格式。这是因为对于任何格式的图片素材,Unity3D在导入时都会自动执行一个...

    本篇博文转载自:https://www.jianshu.com/p/e2aa4d898fb7

    作者:shimmery


    图片

    Unity3D支持使用大部分位图格式作为图片素材,甚至包括带图层和图层效果的.psd格式文件。

    但在实际使用中,并不推荐直接使用非通用的文件格式。这是因为对于任何格式的图片素材,Unity3D在导入时都会自动执行一个转换过程,如果面对的是非通用格式,则会调用相应的第三方软件功能来执行转换,所以实际转换过程会比较慢,而且有些特殊文件格式,如果没有安装对应的软件,甚至根本不能识别。

    因此,推荐先使用PS将图片素材另存为.png格式(无损且较小),然后使用.png格式的文件作为图片素材来使用。

    在Project面板中选择图片,Inspector中对应出现图片转换的参数选项(要注意的是,选择不同Texture Type,其他的选项会略有不同)。

    unity_image_01.png

     

    unity_image_02.png

    • Texture Type:选择贴图类型
    • Texture Shape:选择贴图形状,这里是设置在预览区的显示方式,有2DCube两种,这个图例中选择2D是因为这是2D游戏素材
    • Advanced:高级选项(略)
    • Alpha Source:选择透明通道来源
    • Wrap Mode:修改贴图重复包裹方式,Repeat代表会不断重复,Clamp代表如果模型UV不在(0,1)象限的话就不会被附上贴图,只会显示材质的默认颜色
    • Filter Mode:对通道数据的过滤方式,通常选择Bilinear,但如果是高动态色彩贴图(hdr),就要选择Point (no filter)

    各种不同的贴图类型:

    unity_image_03.png

    • Default是作为普通类型,也就是颜色贴图
    • Normal map是作为法线贴图,法线贴图必须指定成这个type,否则渲染不正确
    • Editor GUI and Legacy GUI
    • Sprite是作为“精灵”来使用,2D精灵是一种特殊的图片显示方法,图片不失真,不受光照,同时还具备可切割的属性,通常用作UI元素或者2D游戏的素材
    • Cursor是拿来替换游戏中鼠标形状的
    • Cookie
    • Lightmap是作为光照烘焙贴图使用,有的时候我们想把以前烘焙好的贴图直接导入使用,就要选择这个类型
    • Single Channel是单通道图片,这种类型的贴图转换后只会保留alpha通道的信息

    最下面一栏是关于贴图尺寸和贴图压缩的选项:

    unity_image_04.png

    • Max Size代表转换后该贴图的最大可能尺寸,如果本身贴图尺寸就小于这个尺寸的话,贴图不会被放大,但如果本身贴图尺寸大于这个尺寸,就会被缩小成这个尺寸;
    • Compression选择压缩质量,有高中低三档;
    • Format(略)

    最关键的是,做完所有设置工作以后一定要点击Apply按钮应用设置,否则就白做了。旁边的Revert按钮可以将设置参数恢复到修改前的状态。

    普通图片素材

    普通图片素材选择Default类型即可。需要注意的是,对于一些很小的贴图,最好设置一下Max Size属性,这样比较节约系统资源。

    Sprite类型素材

    Sprite类型又叫精灵类型,主要用于UI、粒子、2D游戏等等。

    将图片设置成sprite类型之后会得到以下特性,首先,图片不会被压缩,所以不会有JPEG图片颜色失真等现象;其次,图片可以被再次分割成为多个Sprite。

    Unity3D 2017中新增了对Sprite的九宫格切分功能支持。所谓九宫格切分是指将图片按3*3的方式分成9个部分,当该图片被缩放是,不同部分会进行不同的变化,四个角落的4部分会保持不变,上中和下中的两部分会横向重复(tile),左中和右中的两部分会纵向重复(tile),而正中间一部分会横向纵向一起重复(tile)。这种方式很适合用在2D游戏的地面、墙面、门窗等物体上。

    对法线贴图的处理

    法线贴图必须设置成Normal map类型,否则不会被正确识别。

    对HDR素材的处理

    HDR素材要单独设置。通常被运用在天空球的贴图上。
    HDR素材最关键的是要设置其为16bit色深或者32bit色深,否则引擎会自动将其处理成8bit色深的普通贴图,这样就丢失了高动态颜色信息了。


    着色器(shader)

    着色器(Shader)和材质球(Material)的区别

    使用过三维软件的同学对材质的概念都很熟悉,在Maya中我们称之为“材质球”,其英文名称是Material。但在Unity3D(以及其他的很多游戏引擎)中,“材质”通常被用来指Shader,而非Material,所以这里我给shader起了个专门的中文名字叫“着色器”,以示区别。

    Shader是编写的材质脚本,而shader编译出来的结果显示为各种不同的material。很多游戏都自己写shader,这样更自由也更优化,但我们不具备这个能力,只能使用系统给出的默认shader或者下载其他人写好的shader来使用。

    自己写的shader需要放在Assets文件夹下才会起作用。可以在Project面板中点击Create或者直接右键单击选择创建不同类型的shader资源。

    unity_shader_01.png

    根据shader中编写的设置,shader会出现在material设置选项的Shader下拉框中,比如上面图例中的NewSurfaceShader就显示在Custom一栏之中。

    内置常用Shader的使用

    因为内置shader太多了,而且并不是所有的都常常会被用到,所以这里我先不细讲每一种shader可以做什么,只介绍最常用的基本类别。

    • Standard类型的shader和我们在Maya中使用的材质球最接近,初学者为了方便可以完全用这一个shader来制作所有材质。
    • Mobile类别下面的shader顾名思义是给移动平台做游戏时使用的shader,下属的shader基本上也能涵盖各种用途了。
    • Nature类别下的shader主要是给Unity3D自己的Tree类型物体准备的,有些特殊属性专门针对Tree物体的显示。通常创建Tree的时候会自动赋上对应的material,初学者不要胡乱改shader类型和参数。
      同理,Particles类别下的shader专为Unity3D的自带粒子系统准备,Skybox类别下的shader专为Unity3D的自动天空盒功能准备,Sprites是给精灵面片用的,UI是给UI物体贴图用的,VR是给VR用的(我也不清楚怎么用)。
    • Unlit类别下的shader都是所谓“无光照“shader,也就是说光照对这类材质无影响。

    分成这么多类别,主要还是出于性能优化的考虑。比如Standard shader当然可以用来模拟unlit shader,但使用unlit shader无疑会减少很多计算量。


    材质球(Material)

    材质球(Material)可以被认为是一个基于shader的参数文件,同样需要手动创建在Assets目录中,后缀名是.mat

    Maya的材质球可以随着.ma格式文件被导入Unity3D(但严重不推荐)。

    实际上Unity3D自动识别了Maya材质球的相关参数,并以此创建了基于Stadard Shader的新的.mat文件,然后赋给转换后的模型。因此实际上并不一定能够保证新material的效果和在Maya中的效果一样,毕竟两个软件所采用的渲染方式都是天差地别的。

    所以建议大家导入模型之后还是自行创建material并手动指定比较好。自动转换的material如果不使用的话最好删除掉,避免混淆。

    所以,在Unity3D中给模型添加材质的一般流程是这样的:

    1. 如果不是使用内置shader的话,就要先下载shader资源并导入Unity3D,或者用可视化shader插件(比如Shader Forge)创建好shader;
    2. 在Unity3D中新建一个Material,并附加给模型;
    3. 选择这个Material,指定合适的shader(在Assets目录下的所有有效shader都会自动被加载到material的shader选择列表中去);
    4. 修改Material的各项参数并指定各种贴图

    Material可以在Inspector最下面的预览窗口被预览到,右上方的模型按钮可以切换不同的预览模型(有方块、球、圆环、单面等)

    常用材质球参数

    Standard:

    unity_material_standard.png

    • Albedo是颜色,可以将贴图资源从Project面板拖到前面的小方块上来添加贴图,贴图与后面的颜色设置相乘才是最终的效果(也就是说这个颜色会被multiply到贴图颜色上去)
    • Metallic是金属质感,数值越高,反光颜色越偏向本色(贴图颜色×颜色值)
    • Smoothness是光滑度,数值越高,表面越光滑,高光越集中,反射越清晰
    • Source是透明通道来源,可以选择使用Albedo贴图上的透明通道或者Metallic贴图上的透明通道
    • Normal Map是法线贴图
    • Height Map是高差图
    • Occlusion是模拟AOCC效果的贴图
    • Detail Mask是在表面再叠加一层细节遮罩时使用的贴图
    • Emission勾选表示材质“自发光”,会多出一个Color参数来指定发光的颜色、发光贴图、发光强度。强度可以设置到超过1,表示是一个很亮的物体。自发光材质会影响光照烘焙的结果
    • Tiling是贴图重复次数
    • Offset是贴图位移
    • Secondary Maps是可以添加次级细节贴图,当物体很靠近摄影机是会自动切换显示次级细节贴图
      • Detail Slbedo ×2是次级细节颜色贴图,建议创建成原来贴图的2倍大
      • Normal Map是次级细节法线贴图
    • Tiling同上
    • Offset同上
    • UV Set是选择UV组

    Standard (Specular setup)与Standard的唯一区别,就在于采用Specular而非Metallic属性来设置高光,这样可以获得不同于颜色贴图色彩的高光颜色。

    unity_material_standard2.png

    Mobile/Bumped Specular:

    unity_material_mobile_specular.png

    Mobile类型的shader就简单很多了,可以看到只有最最基础的参数:

    • Shininess:光亮度
    • Base (RGB) Gloss (A):这里使用一张贴图的RGB通道作为颜色,A通道作为高光贴图
    • Normalmap:法线贴图

    Unlit/Texture:

    unity_material_unlit_texture.png

    Unlit类型的shader就更简单,就只有贴图参数。Unlit/Color更简单,就只有一个颜色参数。Unlit/Transparent可以识别贴图的A通道并将其作为透明贴图,Unlit/Transparent Cutout与之类似,但处理透明贴图的方式不太一样,会将半透明区域简化成全透明或者全不透明。

    展开全文
  • unity3D 添加背景图片

    2012-08-24 16:48:53
    // Copyright (c) 2010 Bob Berkebile // Please direct any bugs/comments/suggestions to http://www.pixelplacement.com // // Permission is hereby granted, free of charge, to any person obtaining a copy /
    // Copyright (c) 2010 Bob Berkebile
    // Please direct any bugs/comments/suggestions to http://www.pixelplacement.com
    //
    // Permission is hereby granted, free of charge, to any person obtaining a copy
    // of this software and associated documentation files (the "Software"), to deal
    // in the Software without restriction, including without limitation the rights
    // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    // copies of the Software, and to permit persons to whom the Software is
    // furnished to do so, subject to the following conditions:
    //
    // The above copyright notice and this permission notice shall be included in
    // all copies or substantial portions of the Software.
    //
    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    // THE SOFTWARE.
    
    using UnityEngine;
    using System.Collections;
    
    public class Backdrop : MonoBehaviour
    {
    	const string SHADER_CODE = 
    		"Shader \"UnlitAlpha\"{" +
    			"Properties {" +
    		 		"_Color (\"Color Tint (A = Opacity)\", Color) = (1,1,1,1) " +
    		 		"_MainTex (\"Texture (A = Transparency)\", 2D) = \"\"" +
    		 	"} " +
    		 	"SubShader { " +
    		 		"Tags {" +
    		 			"Queue = Transparent" +
    		 		"}" +
    		 		"ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Pass {" +
    		 			"SetTexture[_MainTex] {" +
    		 				"Combine texture * constant ConstantColor[_Color]" +
    		 			"}" +
    		 		"}" +
    		 	"}" +
    		 "}";
    	
    	public Texture2D image;
    	public float distance = 500;
    	
    	GameObject backdrop;
    	Mesh mesh;
    	float prevDistance;
    	Vector3 prevRotation, prevPosition;
    	Texture2D prevImage;
    	
    	void Start ()
    	{
    		//check that we are on a camera!
    		if(camera == null){
    			Debug.LogError("Backdrop must be used on a camera!");
    			Destroy(this);
    			return;
    		}
    		
    		//create backdrop GameObject and components:
    		backdrop = new GameObject("Backdrop");
    		backdrop.AddComponent<MeshFilter>();
    		backdrop.AddComponent<MeshRenderer>();
    		backdrop.transform.parent = transform;
    		
    		backdrop.renderer.material = new Material(SHADER_CODE);
    		
    		mesh = backdrop.GetComponent<MeshFilter>().mesh;
    		mesh.vertices = CalcVerts();
    		mesh.uv = new Vector2[] {new Vector2(0,0), new Vector2(1,0), new Vector2(0,1), new Vector2(1,1)};
    		mesh.triangles = new int[] {1,0,3,3,0,2};
    		
    	}
    	
    	void Update(){
    		
    		//reset texture if it has changed:
    		if( backdrop.renderer.material.mainTexture != image ){
    			backdrop.renderer.material.mainTexture = image;
    		}
    		
    		//nothing needs to be recalculated if distance hasn't changed or a move/rotate was attempted on billboard moved without our permission:
    		if(distance == prevDistance &&
    		   backdrop.transform.position == prevPosition &&
    		   backdrop.transform.localEulerAngles == prevRotation
    		   ) return;
    		
    		//error for attempting a backdrop placement beyond camera's far clip plane:
    		if(distance > camera.farClipPlane){
    			Debug.LogError("Backdrop's distance is further than the camera's far clip plane. Extend the camera's far clip plane or reduce the billboard's distance.");
    			return;
    		}
    		
    		//error for attempting a backdrop placement before camera's near clip plane:
    		if(distance < camera.nearClipPlane){
    			Debug.LogError("Backdrop's distance is closer than the camera's near clip plane. Extend the distance or reduce the camera's near clip plane.");
    			return;
    		}
    		
    		
    		//set backdrop's placement:
    		backdrop.transform.position = transform.forward * distance;
    		
    		//calculate mesh:
    		mesh.vertices = CalcVerts();
    		mesh.RecalculateNormals();
    		
    		//readjust comparison values:
    		prevDistance = distance;
    		prevPosition = backdrop.transform.position;
    		prevRotation = backdrop.transform.localEulerAngles;
    	}
    	
    	Vector3[] CalcVerts()
    	{
    		return new Vector3[] {
    			backdrop.transform.InverseTransformPoint(camera.ScreenToWorldPoint(new Vector3(0,0,distance))),
    			backdrop.transform.InverseTransformPoint(camera.ScreenToWorldPoint(new Vector3(Screen.width,0,distance))),
    			backdrop.transform.InverseTransformPoint(camera.ScreenToWorldPoint(new Vector3(0,Screen.height,distance))),
    			backdrop.transform.InverseTransformPoint(camera.ScreenToWorldPoint(new Vector3(Screen.width,Screen.height,distance)))
    		};
    	}
    }

    展开全文
  • 环境:Unity4.6.2 Win7 64bit我这里一张图片就是一帧,不需要去把一张图片裁剪成几段。然后把这些png图片按顺序渲染。其实这样也可以用视频来代替,也可以有同样的效果。 实际操作其实是很简单的,先将图片导入...
  • Unity3d 图片添加shader,透明部分被覆盖,请问shader哪写错了
  • Unity3d 的新版 UI 系统在给我们带来很大便利的同时,也添加了一些小麻烦。每次从电脑中导入图片Unity3d 中都需要手动设置Texture Type为Sprite (2D and UI) 及设置 Packing Tag。对于需要打包为一个图集的图片,...
  • Unity3D支持多种外部导入的模型格式,这里列出了它支持的外部模型的属性,并且以3D MAX为例,导出FBX文件给Unity3D使用。
  • Unity3d中插入图片

    2014-09-28 15:22:56
    using UnityEngine;...using UnityEditor; public class Script1_1 : MonoBehaviour { //贴图 Texture2D texture; // Use this for initialization void Start () { //从project视图中记载资
  • 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅  QQ群:【119706192】 本文链接地址: Unity3D 批量图片资源导入设置 using UnityEngine; using System.Collections; using UnityEditor; /// //...
  • Unity3D图片质量设置

    2015-09-29 09:44:34
    写在前面 当我们在Unity中,使用图片进行2D显示时,会发现显示出来的画面有明显的模糊或者锯齿,但是美术给的原图却十分清晰。...造成这样的原因,是Unity在导入图片(或者纹理)时会自动进行压缩,以便
  • 特点:1、针对Unity52、如何使用Unity3D编辑器只是简略带过3、重点讲如何在Unity3D中编写质量更高的代码4、以游戏实例引导你开发游戏5、各种图片、音频资源格式的特点和针对平台的一些优化与选择书的目录可以在...
  • 本课程主要介绍Unity3d的UI系统(UGUI),先对UGUI做一个总体概述,之后对每个UI控件逐一进行详细讲述,内容包括控件的作用、设置方法、使用场景及属性细节,帮助大家熟练使用UGUI设计游戏的交互界面。
  • Unity3d 导入图片 自动修改Texture Type为Sprite 2D and UI 及设置 Packing
  • 本文介绍了Unity3D界面及游戏对象基本操作。
  • unity3d加载外部图片

    2016-11-05 11:50:56
    Unity3D论坛最近因为需求加载unity外部图片,所以就小研究了下,下面是自己尝试的集中方法,包括发布的exe、web、以及Flash三个平台的测试(皆是通过读取XML配置文件加载): 第一种方法:通过Resources.Load()...
  • 喜欢我的博客请记住我的名字:秦元培,我的博客地址是:...  各位朋友大家好,我是秦元培,欢迎大家关注我的博客。最近在做项目的过程中遇到这样的一个需求:玩家可以在游戏过程中进行实时存档,在存档过程中
  • Unity3D常见面试题

    2017-08-11 20:20:00
    Unity3D常见面试题
  • 实现在unity3d摄像机视角上放置图片,并实现图片背景透明: 第一步:上网找到需要的图片素材,打开ps,导入图片,双击右下角图层,将背景图设置为图层0,左边工具栏中选取魔术棒(不知道的百度),选取需要隐藏的...
1 2 3 4 5 ... 20
收藏数 9,447
精华内容 3,778