Unity3D游戏开发之添加背景图片
Unity3D教程:导入贴图
Unity3D教程:导入贴图Posted on 2013年07月01日 by U3d / Unity3D 基础教程/被围观 78 次Unity资源导入:对于游戏中资源导入可以导入图片,网格等。
Project面板右键—〉import new asset。
图片:导入图片后再Project面板选中,会在Inspector面板出现其属性设置。
说说几个重要的:TextureType:贴图类型,这会影响选择类型贴图时候有限选择。
AlphafromGrayscal:使用灰度创建Alpha,当需要unity为贴图创建一条alpha通道,使用它转换得到的灰度值来渲染透明度,可以开启它。
WrapMode:所谓的包裹模式,决定贴图会无限次平铺还是只会一次。
Repeat就是重复平铺。
Clamp会让贴图的边缘拉升并在改变大小时候填满任何缝隙。
FilterMode:所谓的图像过滤模式,在拉伸时候对贴图过滤,比如[Point]点过滤,在很近看贴图时候,可能感觉不均。
Bilinear它会时近看贴图显得模糊。
Trilinear它会在不同mipmap层次之间模糊。
AnisoLevel:设置各项异性过滤器的级别,同属的可以理解为当你从一个比较陡的角度来看,贴图现实的可以有多细腻,渲染的等级越高,越占内存。
网格:网格就是那些Maya ,C4D,3DSMAX,C3D,LW等软件导出的文件。
比如导入一个.fbx文件。
选中后,在Inspector面板中。
看到居多属性。
慢慢解释吧。
Meshs:ScaleFactor:缩放系数,使用这个属性在导入资源后设置其大小,调整资源在场景现实过大,或者过小的问题。
MeshCompression:网格压缩的比例[Off,Low,Medium,High]不可否认,压缩时可以节约内存的。
OptimizeMesh:为提高GPU性能记录网格顶点和索引。
GenerateColliders:是否在场景中让网格对象具有碰状体表现,通俗的说就是实心的,不可以穿体而过。
unity3d游戏开发之uv贴图教程 (1)
一、理解UV贴图UVs是驻留在多边形网格顶点上的两维纹理坐标点,它们定义了一个两维纹理坐标系统,称为UV纹理空间,这个空间用U和V两个字母定义坐标轴。
用于确定如何将一个纹理图像放置在三维的模型表面。
本质上,UVs是提供了一种模型表面与纹理图像之间的连接关系,UVs负责确定纹理图像上的一个点(像素)应该放置在模型表面的哪一个顶点上,由此可将整个纹理都铺盖到模型上。
如果没有UVs,多边形网格将不能被渲染出纹理。
通常在创建MAYA原始对象时,UVs一般都被自动创建(在创建参数面板上有一个Create UVs选项,默认是勾选的),但大部分情况下,我们还是需要重新安排UVs,因为,在编辑修改模型时,UVs不会自动更新改变位置。
重新安排UVs,一般是在模型完全做好之后,并且在指定纹理贴图之前进行。
此外,任何对模型的修改都可能会造成模型顶点与UVs的错位,从而使纹理贴图出现错误。
更多精彩请点击【狗刨学习网】二、UVs和纹理映射NURBS表面与多边形网格的贴图机制不同,NURBS表面的UV是内建的(已经自动定义出U、V),这些UV不能被编辑,移动CV将会影响纹理贴图。
而多边形的UVs并非一开始就存在,还必须明确地创建并且可以随后进一步修改编辑。
三、UV贴图为一个表面创建UVs的过程叫UV贴图(UV mapping)。
这个过程包括创建、编辑。
其结果是明确地决定图像如何在三维模型上显示,这项技术的熟练程度直接影响模型的最后表现。
四、创建UVsMaya中有很多UVs创建工具:如,自动UV工具、平面UV工具、圆柱UV工具、球形UV工具、用户自定义UV工具等。
每种创建工具都是使用一种预定的规则将UV纹理坐标投射到模型表面,自动创建纹理图像与表面的关联。
通常,对自动产生的UV还必须使用UV编辑器进一步编辑才能达到所需要的效果。
因为每次对模型的修改(如挤压,缩放,增加、删除等等)都会造成UVs错位,所以最好的工作流程是等模型完全设计好了之后,再开始创建UVs。
Unity3D背景制作(一)
Unity3D背景制作(一)Unity3D背景制作(一)(原创)在制作产品展示时,会发现如果给产品添加一个PL的背景,将会使得产品更具有魅力。
接下来讲解简便的在Unity3d当中制作背景方式:利用skybox(天空盒)打造背景、利用Plan(打造)背景;一、利用skybox(天空盒)打造背景:在unity3d中有一个skybox功能,需要做天空背景可以使用该功能容易实现天空背景,一下介绍两种简单实现的方法:1、在当前相机上添加skybox:a、在当前相机上添加skybox的好处在于,如果在同一场景中切换相机的时候,需要天空球也变的话,就可以利用该种方法;b、首先选择Camera(相机),在菜单栏中选择:Componet/Rendering/skybox,保证选择该相机的前提下,会发现该相机的Inspector多了一个属性为Skybox,入下图:c、在Skybox中的Custom Skybox中添加一个天空盒材质(软件中的两个材质Blue sky和sunset 为天空盒材质);d、点击运行,会发现在该摄像机中出现了天空背景了。
2、在当前场景上添加skybox:a、如果在同一个场景中,在切换相机,但是要求天空背景不变的情况下,就可以给场景添加上skybox了;b、在菜单栏中选择:Edit/Render Setting,在保证不在选择场景中其它文件的前提下,Inspector 面板中将显示Render Setting属性,入下图c、在skybox Material中指定一个天空盒材质,点击运行,将会看到该场景出现天空背景了。
二、利用Plan(片)打造背景:上面提到的天空盒背景制作,而有的时候我们制作的产品背景是一张图片;做不成天空盒背景,这时候我们就可以巧妙地利用Plan(片)来制作背景了(这里我们以Unity3D导出文件导出的大小为800*600)。
1、利用PS制作好一张背景图片,尺寸大小设置成我们Unity导出文件将导出的尺寸大小(800*600),备用;2、在Unity中创建一个Plan(片),缩放其长宽比例同样设置成4:3,如下图Scale参数;以保证将来我们赋予的800*600的纹理图片不会被变形;3、将使用PS制作好的背景图片赋给Plan上面,调整好Plan的方向,是的运行预览的时候,看到贴图时正的不会倒立或者其他现象。
Unity3D游戏开发之游戏界面元素
Unity3D游戏开发之游戏界面元素游戏界面元素Unity 为您提供许多选项来创建游戏的图形用户界面 (GUI)。
您可以使用场景中的 GUI 文本和 GUI 纹理对象,或者使用 UnityGUI 从脚本生成界面。
该页面的其余部分包含入门和使用 UnityGUI 运行的详细指南。
UnityGUI 使您能够快速、轻松地创建大量功能强大的 GUI。
通过手动定位 GUI 对象并编写处理其功能的脚本,您只需几行代码即可马上搞定一切,而不是创建 GUI 对象。
代码生成GUI 控件(GUI controls) ,这些控件通过单个的函数调用进行实例化、定位和处理。
控件本节列出了 UnityGUI 中的每个可用控件 (Control) 以及显示结果的代码样例和图像。
自定义能够更改 GUI 外观使其与您的游戏外观相匹配是很重要的。
UnityGUI 中的所有控件都可按照本节中描述的方法用 GUIStyles 和 GUISkins 进行自定义。
布局模式UnityGUI 提供两种布置 GUI 的方法:您可以手动将每个控件放置在屏幕上,也可使用与 HTML 表的工作原理相同的自动布局系统。
可根据需要使用任何一种方法,并且这两种方法可以自由组合。
本节讲解了这两种系统之间的功能差异,包括示例。
扩展 UnityGUI使用新的控件 (Control) 类型可很容易地扩展 UnityGUI。
这章向您展示如何制作简单的复合 (compound) 控件,包括集成到 Unity 事件系统。
扩展 Unity 编辑器Unity 编辑器的 GUI 实际上是使用 UnityGUI 编写的。
因此,使用用于游戏中的GUI 的相同类型代码可使编辑器高度扩展。
此外,还有大量专门用于编辑器 (Editor) 的GUI 控件来帮助您创建自定义编辑器 GUI。
文章出处【狗刨学习网】。
Unity3D选择本地图片并加载
Unity3D选择本地图⽚并加载本⽂实例为⼤家分享了Unity3D选择本地图⽚并加载的具体代码,供⼤家参考,具体内容如下①找到System.Windows.Forms.dll:在unity的安装⽬录中找到它,如E:\ProgramFiles(x86)\Unity\Editor\Data\Mono\lib\mono\2.0②设置.NET 2.0集:Untiy默认是.NET 2.0 Subset。
在Edit->Project Settings->Player->OtherSettings中修改③任意打开⼀项⽬,新建Plugins⽂件夹,将找到的System.Windows.Forms.dll复制进去⼯程⽂件中(Project) using UnityEngine;using System.Collections;using System;using System.Windows.Forms;using System.IO;using UnityEngine.UI;public class AddHead : MonoBehaviour {private Texture2D img=null;public Image image;public Sprite sprite;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}/*void OnGUI(){if (GUI.Button (new Rect (0, 0, 100, 20), "选择⽂件")) {}*/public void addhead(){OpenFileDialog od=new OpenFileDialog();od.Title="请选择头像图⽚";od.Multiselect=false;od.Filter="图⽚⽂件(*.jpg,*.png,*.bmp)|*.jpg;*.png;*.bmp";if(od.ShowDialog()==DialogResult.OK){//Debug.Log(od.FileName);StartCoroutine(GetTexture("file://"+od.FileName));}/*if (img != null) {//GUI.DrawTexture(new Rect(0,20,img.width,img.height),img);image.sprite=sprite;}*/}IEnumerator GetTexture(string url){WWW www = new WWW (url);yield return www;if (www.isDone && www.error == null) {img=www.texture;sprite=Sprite.Create(img,new Rect(0,0,img.width,img.height),new Vector2(0.5f,0.5f));image.sprite=sprite;//Debug.Log(img.width+" "+img.height);byte[] date=img.EncodeToPNG();}}}为按钮绑定⼀个addhead()的⽅法在编辑器运⾏,当出现此弹窗,确定忽略即可。
如何使用Unity创建游戏场景和角色
如何使用Unity创建游戏场景和角色一、介绍Unity引擎Unity引擎是目前最流行的跨平台游戏开发引擎之一,可用于创建2D和3D游戏。
Unity以其简单易用的界面和强大的功能而受到广大游戏开发者的欢迎。
本文将介绍如何使用Unity创建游戏场景和角色。
二、创建游戏场景1. 新建场景:打开Unity后,点击"File",然后选择"New Scene",将会创建一个空白的场景。
2. 导入资源:在游戏场景中,我们希望有一些背景图像、音频和3D模型等资源。
点击"Assets",然后选择"Import New Asset",选择你想导入的资源文件。
Unity支持众多类型的文件格式,如.png、.jpg、.mp3和.obj等。
3. 设计场景布局:拖拽导入的资源文件到场景视图中,以构建你希望的场景布局。
可以调整资源的大小、位置和旋转等属性。
4. 添加灯光:在游戏场景中,灯光是非常重要的元素,可以为场景增加真实感。
点击"Game Object",然后选择"Light",从中选择合适的灯光类型,如平行光、点光源或聚光灯。
5. 设置相机:相机决定了玩家在游戏中所看到的视角。
在场景中创建一个相机对象,并设置其位置和旋转。
为了获得更好的游戏体验,可以调整相机的背景颜色和视野范围。
6. 设计地形:Unity提供了强大的地形编辑器,可以帮助开发者轻松创建山脉、平原或河流等游戏地形。
点击"Terrain",然后选择"Create Terrain",即可开始创建地形。
7. 添加特效:特效可以为游戏场景增加动态效果。
点击"GameObject",然后选择"Particle System",可以添加火焰、烟雾或雨等特效。
三、创建游戏角色1. 导入角色模型:与导入场景资源类似,点击"Assets",然后选择"Import New Asset",将角色模型文件导入Unity。
Unity3D游戏开发之使用Unity Render Textures实现画面特效
Unity3D游戏开发之使用Unity Render Textures实现画面特效写在前面画面特效并不只限于调整游戏画面的颜色。
我们还可以使用它们来和其他的图片混合起来。
这个技术和在Photoshop里新建一个layer很像,我们可以选择一个混合模式来混合两张图片,在我们的例子里,其中一张就是指render texture。
这使得美术人员可以在游戏里面模拟各种混合效果,而不是仅仅在Photoshop里。
这篇文章里,我们将要学习一些常见的混合模式,例如,正片叠底(Multiply),Add,滤色(Screen,这竟然是滤色的意思。
)。
你将会发现这些都不难实现~知识补习这里增加一个内容,就是对各种混合模式的理解。
正片叠底(Multiply)和滤色(Screen)正片叠底(Multiply)和滤色(Screen)是两种基本的混合模式,分别用于使图片变暗和变亮。
它们之间的组合还可以形成更复杂的混合模式,如叠加(Overlay)和柔光(Soft Light)。
文章出处【狗刨学习网】正片叠底——就是把两层图像的像素相乘,最后会得到一个更暗的图像。
这个模式是对称的,也就是说交换基色和混合色得到的结果是一样的。
,其中a是基色,b是混合色。
滤色——首先把两层图像的像素值取互补数,然后将它们相乘,最后再去互补数。
这和正片叠底得到的结果是相反的。
它会得到一个更亮的图像。
,其中a是基色,b是混合色。
叠加——结合了正片叠底和滤色两种混合模式。
基色中亮色的部分会更加亮,而暗色的部分会更暗。
,其中a是基色,b是混合色。
准备工作这一篇同样很多代码是建立在上一篇的基础上,所以很多代码不用写啦~创建一个新的脚本,命名为BlendMode_ImageEffect;创建一个新的Shader,命名为BlendMode_Effect;把本章第一篇中的C#代码复制到第一步中创建的脚本中;(我发现原作者貌似也因为复制粘贴忘了删掉亮度、饱和度、对比度那句话。
Unity3D游戏开发之调整画质(贴图)质量
Unity3D游戏开发之调整画质(贴图)质量当我们在Unity中,使用图片进行2D显示时,会发现显示出来的画面有明显的模糊或者锯齿,但是美术给的原图却十分清晰。
要改善这一状况实际上很简单。
造成这样的原因,是Unity在导入图片(或者纹理)时会自动进行压缩,以便减少运行时游戏的内存占用率,提供性能。
注意:下面实例使用的Unity版本为4.3.4。
版本不同的话可能某些显示不完全相同,但关键点是一样的。
实现我们以下列背景图为例(大小为2048*640):当我们把它作为背景显示时,在Game界面会看到下面的效果:可以发现,上面的画质不怎么尽如人意,例如左上角的帆船和右上角的皮球,有明显的模糊和锯齿。
观察该图片对应的Inspector面板(注意这里的纹理类型是Sprite),如下所示:其中对画质有影响的部分,已经用红框圈出。
根据官网文档的解释,其含义分别如下:Filter Mode 当该纹理由于3D变换进行拉伸时,它将如何被过滤插值。
共有三种选择:Point 单点插值,纹理将变得块状化(blocky up close);Bilinear 双线性插值,纹理将变得模糊(blurry up close);Trilinear 三线性插值,类似Bilinear,但是纹理还会在不同的mip水平之间(between the different mip levels)进行模糊;Max Size 导入的纹理的最大尺寸。
因为美术人员往往喜欢使用较大的纹理进行创作,所以可以使用这个选项来选择我们游戏中适合的尺寸。
Format 该纹理使用的内部表现格式。
这是在大小和质量之间的权衡。
共有三种格式:Compressed 压缩的RGB纹理。
这是漫反射贴图最长江的格式。
每个像素占4bits(一张256*256大小的纹理将占用32KB大小的内存);16 bit 低质量的真彩(truecolor)显示。
每个像素占16bits;Truecolor 真彩。
如何使用Unity创建游戏场景
如何使用Unity创建游戏场景一、简介游戏场景是游戏中重要的组成部分之一,它是游戏中呈现故事情节、角色活动和互动的场所。
Unity是一款非常流行的游戏开发引擎,它提供了丰富的工具和功能,帮助开发者创建精美的游戏场景。
本文将介绍如何使用Unity创建游戏场景,并对其进行分类讨论。
二、2D游戏场景的创建对于2D游戏场景的创建,首先需要准备好所需资源,如背景图、角色精灵和物体图片。
然后,在Unity中创建一个新的2D项目,导入相关资源并创建需要的场景素材。
可以使用Unity提供的2D编辑器来绘制场景,设置碰撞检测等。
同时,通过设置相机和光照等参数,调整场景的视觉效果和氛围。
三、3D游戏场景的创建对于3D游戏场景的创建,同样需要准备好所需资源,如角色模型、场景模型和贴图等。
首先,在Unity中创建一个新的3D项目,导入相关资源并创建需要的场景。
利用Unity提供的3D编辑器,可以将场景模型放置在合适的位置,并进行旋转、缩放等操作。
可以使用Unity提供的真实感渲染等功能,改善场景的细节和质感。
四、场景布局与细节设计在创建游戏场景时,布局与细节的设计尤为重要。
合理的场景布局能够提高游戏的可玩性和体验感。
首先,根据游戏的需求和定位,设定好场景的整体结构和功能区域。
然后,进行细节设计,如摆放物品、设置障碍物和设计交互元素等。
同时,可以使用Unity提供的特效、粒子系统和音效等功能,增加场景的视觉和听觉效果,提升游戏的趣味性。
五、交互与用户体验游戏场景不仅是展示故事和角色的地方,还是用户与游戏互动的主要场所。
因此,在场景的设计中要考虑交互性和用户体验。
可以在场景中设置触发器和脚本,实现角色与物体的交互、开启剧情触发和触发特殊事件等。
通过合理的设计和操作,让用户能够更好地融入游戏世界,增加游戏的乐趣。
六、场景优化和性能调节在使用Unity创建游戏场景时,还需要考虑场景的优化和性能调节。
大型场景可能会占用较多的内存和计算资源,影响游戏的流畅性和稳定性。
Unity3d开发“类三消”游戏
Unity3d开发“类三消”游戏新建⼀个Project,导⼊图⽚素材和声⾳⽂件,把图⽚的Texture Type都修改为Sprite(2D and UI)【1】。
新建⼀个命名为Background的GameObject,为之添加背景素材图⽚【2】。
再新建⼀个命名为GameController的GameObject,为之添加GameController脚本和AudioSource组件。
把消除素材图⽚都做成预设体(Prefabs)【3】,顺便再Copy多⼀个预设体,重命名为Gemstone,把Sprite设为空(None),为之添加Gemstone脚本和BoxCollider组件。
【1】【3】【2】GameController.sc脚本1using System.Collections;23public class GameController : MonoBehaviour {4public Gemstone gemstone;5public int rowNum=7;//宝⽯列数6public int columNum=10;//宝⽯⾏数7public ArrayList gemstoneList;//定义列表8private Gemstone currentGemstone;9private ArrayList matchesGemstone;10public AudioClip match3Clip;11public AudioClip swapClip;12public AudioClip erroeClip;13// Use this for initialization14void Start () {15 gemstoneList = new ArrayList ();//新建列表16 matchesGemstone = new ArrayList ();17for (int rowIndex=0; rowIndex<rowNum; rowIndex++) {18 ArrayList temp=new ArrayList();19for(int columIndex=0;columIndex<columNum;columIndex++){20 Gemstone c=AddGemstone(rowIndex,columIndex);21 temp.Add(c);2223 }24 gemstoneList.Add(temp);25 }26if (CheckHorizontalMatches () || CheckVerticalMatches ()) {//开始检测匹配消除27 RemoveMatches();28 }29 }30public Gemstone AddGemstone(int rowIndex,int columIndex){//⽣成宝⽯31 Gemstone c = Instantiate (gemstone)as Gemstone;32 c.transform.parent = this.transform;//⽣成宝⽯为GameController⼦物体33 c.GetComponent<Gemstone>().RandomCreateGemstoneBg();34 c.GetComponent<Gemstone>().UpdatePosition(rowIndex,columIndex);35return c;36 }3738// Update is called once per frame39void Update () {4041 }42public void Select(Gemstone c){43//Destroy (c.gameObject);44if (currentGemstone == null) {45 currentGemstone = c;46 currentGemstone.isSelected=true;47return;48 } else {49if(Mathf.Abs(currentGemstone.rowIndex-c.rowIndex)+Mathf.Abs(currentGemstone.columIndex-c.columIndex)==1){50//ExangeAndMatches(currentGemstone,c);51 StartCoroutine(ExangeAndMatches(currentGemstone,c));52 }else{53this.gameObject.GetComponent<AudioSource>().PlayOneShot(erroeClip);54 }55 currentGemstone.isSelected=false;56 currentGemstone=null;57 }58 }59 IEnumerator ExangeAndMatches(Gemstone c1,Gemstone c2){//实现宝⽯交换并且检测匹配消除60 Exchange(c1,c2);61yield return new WaitForSeconds (0.5f);62if (CheckHorizontalMatches () || CheckVerticalMatches ()) {63 RemoveMatches ();64 } else {65 Exchange(c1,c2);66 }67 }68bool CheckHorizontalMatches(){//实现检测⽔平⽅向的匹配69bool isMatches = false;70for (int rowIndex=0; rowIndex<rowNum; rowIndex++) {71for (int columIndex=0; columIndex<columNum-2; columIndex++) {72if ((GetGemstone (rowIndex, columIndex).gemstoneType == GetGemstone (rowIndex, columIndex + 1).gemstoneType) && (GetGemstone (rowIndex, columIndex).gemstoneType == GetGemstone (rowIndex, columIndex + 73//Debug.Log ("发现⾏相同的宝⽯");74 AddMatches(GetGemstone(rowIndex,columIndex));75 AddMatches(GetGemstone(rowIndex,columIndex+1));76 AddMatches(GetGemstone(rowIndex,columIndex+2));77 isMatches = true;78 }79 }80 }81return isMatches;82 }83bool CheckVerticalMatches(){//实现检测垂直⽅向的匹配84bool isMatches = false;85for (int columIndex=0; columIndex<columNum; columIndex++) {86for (int rowIndex=0; rowIndex<rowNum-2; rowIndex++) {87if ((GetGemstone (rowIndex, columIndex).gemstoneType == GetGemstone (rowIndex + 1, columIndex).gemstoneType) && (GetGemstone (rowIndex, columIndex).gemstoneType == GetGemstone (rowIndex + 2, columIndex).gems 88//Debug.Log("发现列相同的宝⽯");89 AddMatches(GetGemstone(rowIndex,columIndex));90 AddMatches(GetGemstone(rowIndex+1,columIndex));91 AddMatches(GetGemstone(rowIndex+2,columIndex));92 isMatches=true;93 }94 }95 }96return isMatches;97 }98void AddMatches(Gemstone c){99if (matchesGemstone == null)100 matchesGemstone = new ArrayList ();101int Index = matchesGemstone.IndexOf (c);//检测宝⽯是否已在数组当中102if (Index == -1) {103 matchesGemstone.Add(c);104 }105 }106void RemoveMatches(){//删除匹配的宝⽯107for (int i=0; i<matchesGemstone.Count; i++) {108 Gemstone c=matchesGemstone[i]as Gemstone;109 RemoveGemstone(c);110 }111 matchesGemstone = new ArrayList ();112 StartCoroutine (WaitForCheckMatchesAgain ());113 }114 IEnumerator WaitForCheckMatchesAgain(){//连续检测匹配消除115yield return new WaitForSeconds (0.5f);116if (CheckHorizontalMatches () || CheckVerticalMatches ()) {117 RemoveMatches();118 }119 }120void RemoveGemstone(Gemstone c){//删除宝⽯121//Debug.Log("删除宝⽯");122 c.Dispose ();123this.gameObject.GetComponent<AudioSource> ().PlayOneShot (match3Clip);124for (int i=c.rowIndex+1; i<rowNum; i++) {125 Gemstone temGemstone=GetGemstone(i,c.columIndex);126 temGemstone.rowIndex--;127 SetGemstone(temGemstone.rowIndex,temGemstone.columIndex,temGemstone);128//temGemstone.UpdatePosition(temGemstone.rowIndex,temGemstone.columIndex);129 temGemstone.TweenToPostion(temGemstone.rowIndex,temGemstone.columIndex);130 }131 Gemstone newGemstone = AddGemstone (rowNum, c.columIndex);132 newGemstone.rowIndex--;133 SetGemstone (newGemstone.rowIndex, newGemstone.columIndex, newGemstone);134//newGemstone.UpdatePosition (newGemstone.rowIndex, newGemstone.columIndex);135 newGemstone.TweenToPostion (newGemstone.rowIndex, newGemstone.columIndex);136 }137public Gemstone GetGemstone(int rowIndex,int columIndex){//通过⾏号和列号,获取对应位置的宝⽯138 ArrayList temp = gemstoneList [rowIndex]as ArrayList;139 Gemstone c = temp [columIndex]as Gemstone;140return c;141 }142public void SetGemstone(int rowIndex,int columIndex,Gemstone c){//设置所对应⾏号和列号的宝⽯143 ArrayList temp = gemstoneList [rowIndex]as ArrayList;144 temp [columIndex] = c;145 }146public void Exchange(Gemstone c1,Gemstone c2){//实现宝⽯交换位置147this.gameObject.GetComponent<AudioSource> ().PlayOneShot (swapClip);148 SetGemstone (c1.rowIndex, c1.columIndex, c2);149 SetGemstone (c2.rowIndex, c2.columIndex, c1);150//交换c1,c2的⾏号151int tempRowIndex;152 tempRowIndex = c1.rowIndex;153 c1.rowIndex = c2.rowIndex;154 c2.rowIndex = tempRowIndex;155//交换c1,c2的列号156int tempColumIndex;157 tempColumIndex = c1.columIndex;158 c1.columIndex = c2.columIndex;159 c2.columIndex = tempColumIndex;160161//c1.UpdatePosition (c1.rowIndex, c1.columIndex);162//c2.UpdatePosition (c2.rowIndex, c2.columIndex);163 c1.TweenToPostion (c1.rowIndex, c1.columIndex);164 c2.TweenToPostion (c2.rowIndex, c2.columIndex);165 }为GameController添加声⾳源⽂件和Gemstone脚本Gemstone.cs脚本1using System.Collections;23public class Gemstone : MonoBehaviour {45public float xOffset = -4.5f;//x⽅向的偏移6public float yOffset = -2.0f;//y⽅向的偏移7public int rowIndex = 0;8public int columIndex = 0;9public GameObject[] gemstoneBgs;//宝⽯数组10public int gemstoneType;//宝⽯类型11private GameObject gemstoneBg;12private GameController gameController;13private SpriteRenderer spriteRenderer;14public bool isSelected{15set{16if(value){17 spriteRenderer.color=Color.red;18 }else{19 spriteRenderer.color=Color.white;20 }21 }22 }23// Use this for initialization24void Start () {25 gameController = GameObject.Find ("GameController").GetComponent<GameController> ();26 spriteRenderer = gemstoneBg.GetComponent<SpriteRenderer> ();27 }2829// Update is called once per frame30void Update () {3132 }33public void UpdatePosition(int _rowIndex,int _columIndex){//宝⽯的位置34 rowIndex = _rowIndex;35 columIndex = _columIndex;36this.transform.position = new Vector3 (columIndex + xOffset, rowIndex + yOffset, 0);37 }38public void TweenToPostion(int _rowIndex,int _columIndex){//调⽤iTween插件实现宝⽯滑动效果39 rowIndex = _rowIndex;40 columIndex = _columIndex;41 iTween.MoveTo (this.gameObject, iTween.Hash ("x", columIndex + xOffset, "y", rowIndex + yOffset, "time", 0.5f));42 }43public void RandomCreateGemstoneBg(){//随机的宝⽯类型44if (gemstoneBg != null)45return;46 gemstoneType = Random.Range (0, gemstoneBgs.Length);47 gemstoneBg = Instantiate (gemstoneBgs [gemstoneType])as GameObject;48 gemstoneBg.transform.parent = this.transform;49 }50public void OnMouseDown(){51 gameController.Select (this);52 }53public void Dispose(){54 Destroy (this.gameObject);55 Destroy (gemstoneBg.gameObject);56 gameController = null;57 }为Gemstone预设体添加消除素材图⽚最后在MainCamera添加AudioSource组件来播放背景⾳乐运⾏效果。
【Unity】3.6导入图片资源
【Unity】3.6导⼊图⽚资源分类:Unity、C#、VS2015创建⽇期:2016-04-05⼀、简介Unity⽀持的图像⽂件格式⾮常多,包括TIF、PSD、TCA、JPC、PNG、GlF、BMP、IFF、PICT、DDS等。
另外,Unity还⽀持⽤Photoshop制作的包含多个图层的PSD格式的图⽚。
PSD格式图⽚这图层导⼊Unity之后会⾃动合并显⽰,⽽且该操作还不会破坏PSD源⽂件的结构。
⼆、图⽚格式及尺⼨要求为了优化运⾏效率,在⼏乎所有的游戏引擎中,图⽚的像素尺⼨都是需要特别注意的,建议图⽚⽂件⾥的尺⼨都是2的n次幂,例如32、64、128、256、1024等,以此类推。
图⽚的长宽则不需要—致。
例如512*1024、256*64等都是合理的。
另外,要特别注意,虽然Unity也⽀持⾮2的次幂尺⼨的图⽚,但这是以“降低加载速度并加⼤图⽚⽂件⼤⼩”为代价来换取的。
如果再将这种图⽚转换为2的n次幂,由于改变了图⽚的原始⽐例,还会导致图⽚质量下降。
所以,制作图⽚资源时,⼀定要按照2的整数幂的尺⼨规格来制作,否则就是⾃找⿇烦。
三、图⽚资源导⼊后的属性设置Unity是⼀款可以跨平台发布游戏的引擎,单纯就图⽚资源来说,在不同的平台硬件环境中使⽤还是有⼀定区别的。
如果你⾃⼰为不同平台分别⼿动制作或修改相应尺⼨的图⽚资源,将是⾮常不⽅便的,也会带来很⼤的⼯作量。
为了解决跨平台的问题,Unity为⽤户提供了专门的解决⽅案。
可以在⼯程中将同⼀张图⽚纹理依据不同的平台直接进⾏相关的设置,效率⾮常⾼。
这⾥主要介绍如何根据不同平台对图⽚资源进⾏没置。
1、导⼊图⽚资源在Unity中,向⼯程中导⼊图⽚资源常⽤有两种办法:办法1:直接将图⽚⽂件复制或剪切到⼯程⽂件夹下的Assets⽂件夹或者其⼦⽂件夹中,这种办法可以同时导⼊多张图⽚资源。
办法2:通过Unity的菜单导⼊图⽚资源,这种办法每次只能导⼊⼀张图⽚。
2、设置属性单击选中某个导⼊后的图⽚资源,在检视器中,根据你准备发布的平台,进⾏相应的图⽚尺⼨设置。
Unity3D游戏开发之添加背景图片
Unity3D游戏开发之添加背景图⽚Unity3D游戏开发之添加背景图⽚每个游戏在开始前都有登陆注册界⾯,但是登陆注册界⾯不只是⼏个Label,⼏个Button组成的,还要有背景图⽚,可以怎么我们在只学习了GUI的前提下,怎么添加背景图⽚呢?我今天主要的任务就是做登陆注册界⾯,登陆注册界⾯要想好看点就要有背景图⽚,在unity中添加背景图⽚有两种⽅法,⼀种是通过代码来完成,还有⼀种是⼿动添加,我们都来看看吧。
先来看看效果图:通过代码完成:1.//声明⼀张图⽚2.public Texture2D img;3.4.//通过OnGUI⽅法执⾏下⾯操作5.void OnGUI()6.{7. string aa = "";8.9. //构造⼀个空的GUIStyle10. GUIStyle bb = new GUIStyle();11.12. //设置bb正常显⽰时是背景图⽚13. bb.normal.background = img;14. /doc/1145bfb14028915f804dc2f6.html bel(new Rect(0, 0, 1370, 780), aa, bb);15.}⼿动添加:1、先创建⼀个新的摄像机,命名为Background Camera;2、新建⼀个GUI Texture,命名为Background Image;3、在Background Image的Inspector⾯板【狗刨学习⽹】中点击Layer下拉窗⼝,选择“Add Layer”添加⼀个新的层名称为“Background Image”;4、选中Background Image,做如下操作:5、该GameObject的Layer值设置为之前你添加的Background Image;6、选中Background Camera,进⾏如下操作:7、选中主摄像机,将Clear Flags设置为“Depth Only”,设置Culling Mask,取消选择“Background Image”这样就完成了背景图⽚的设置。
Unity背景图无限循环
Unity背景图⽆限循环背景⽆限循环⾸先我们导⼊⼀张没有被处理过的图⽚我们使⽤图⽚原来的⼤⼩。
让后给这个精灵(我喜欢叫他雪碧,因为这是⼀个不错的饮料)添加我们的脚本。
组件代码:/*********** author : "⼩⽩⾍||镜⼦"* time : "2020-8-27"* describe : "背景循环流动"* unity version : "2020.3.16"* Blog : "https:///jzyl"**********/using System;using UnityEditor;using UnityEngine;using UnityEngine.UI;public enum Direction{[Tooltip("向上流动")]UP = 0,[Tooltip("向下流动")]DOWN,[Tooltip("向左流动")]LEFT,[Tooltip("向右流动")]RIGHT,}public class BackgroundLoop : MonoBehaviour{[ReadOnly, SerializeField]private string 注意 = "图⽚导⼊纹理属性Non-Poer of 2 选择None";[Tooltip("控制背景移动速度"),Range(0,1000)] //不⽀持负值public float m_speed = 10.0f;[Tooltip("图⽚从哪个⽅向流动")]public Direction m_direction;private GameObject m_preBackground;private GameObject m_nextBackground;private Vector2 m_size; //图⽚长宽private Vector3 m_position; //m_preBackground开始位置private Direction m_trackDirection; //当direction改变时,主要是⽤于检测这个事件的private Vector3 m_limit; //背景移动的边界。
Unity3d实现无限循环滚动背景
Unity3d实现⽆限循环滚动背景在游戏项⽬中我们常常看到商城的⼴告牌,⼏张⼴告图⽚循环滚动,类似跑马灯,现在我将讨论⼀种实现⽅法,并提供⼀个管理类,⼤家可以直接使⽤。
实现原理:背景图⽚循环滚动的原理很简单:两张图⽚向⼀个⽅向移动,当达某张图⽚到临界区域时将图⽚放在后⾯,依次循环。
在实际项⽬中,⼴告牌显⽰的图⽚数量不确定,例如某个假期活动会上很多新品,此时我们需要动态的创建显⽰的图⽚(⼀般在配置表读取数据),如果需要显⽰分类标签还得动态⽣成分类标签。
综上所述,⼀个完整的⼴告牌组件应该具有以下功能:- ⽆限循环的滚动背景图⽚- 根据读取的数据动态⽣成图⽚- 具有分类标签,根据显⽰图⽚动态⽣成- *做成⼀个管理类,⽅便使⽤(⼀个项⽬中可能多处会⽤到)下⾯谈谈我的⽅法:第⼀步:创建滚动组件AdvertisementScroll,这个组件挂在GameObject上⾯,接受传递过来的数据,⽣成显⽰的图⽚和分类标签,在Update中实现⽆限循环滚动。
using System.Collections.Generic;using UnityEngine;namespace Assets.Scripts.Client{public class AdvertisementScroll : MonoBehaviour{private float _timer;private bool _isStart;private Vector3 _toggleCenter;private int delDistance;private int _currentPage; //当前页⾯private AdvertisementScrollManager.AdvertisementScrollData _itemData;private List<ToggleData> _toggleList = new List<ToggleData>();private Vector3 _toLeftPosition;//向左滑动到某个位置public class ToggleData{public string name;public GameObject go;}public AdvertisementScrollManager.AdvertisementScrollData ItemData{get { return _itemData; }set { _itemData = value; }}public void StartScroll(bool createToggle){if (!_isStart){CreateAdvertiseBg();CreateAdvertiseToggle(createToggle);if (createToggle){if (ItemData.ToggleItem != null){ItemData.ToggleItem.GetComponent<UIToggle>().value = true;}}_currentPage = 1;_isStart = true;}}/// <summary>/// 创建需要显⽰的图⽚(需要图⽚数量,图⽚精灵名称,图⽚的宽度,图⽚左边和右边的显⽰位置)/// </summary>private void CreateAdvertiseBg(){_toLeftPosition = new Vector3(ItemData.LeftPosition.x - ItemData.SpriteWidth, ItemData.LeftPosition.y, ItemData.LeftPosition.z);for (int i = 0; i < ItemData.MaxPage; i++){GameObject firstSpriteItem;GameObject secondSpriteItem;if (i == 0){firstSpriteItem = secondSpriteItem = ItemData.SpriteItem.gameObject;}else{firstSpriteItem = ItemData.FirstMoveGo.gameObject.AddChild(ItemData.SpriteItem.gameObject);firstSpriteItem.SetActive(false);secondSpriteItem = ItemData.SecondMoveGo.gameObject.AddChild(ItemData.SpriteItem.gameObject);secondSpriteItem.SetActive(false);}firstSpriteItem.transform.localPosition = secondSpriteItem.transform.localPosition = Vector3.zero; = = (i + 1).ToString();firstSpriteItem.GetComponent<UISprite>().spriteName = secondSpriteItem.GetComponent<UISprite>().spriteName = ItemData.SpriteName[i];}}/// <summary>/// 创建分页图⽚,默认不创建(需要分页图⽚,分页的中间位置,每个分页的间隔)/// </summary>/// <param name="create"></param>private void CreateAdvertiseToggle(bool create = false){if (create){_toggleCenter = ItemData.ToggleCenterPos;delDistance = ItemData.ToggleDistance;Vector3 firstpoint = _toggleCenter - new Vector3((ItemData.MaxPage / 2f - 0.5f) * delDistance, 0f, 0f);for (int i = 0; i < ItemData.MaxPage; i++){GameObject item;ToggleData toggleData = new ToggleData();if (i == 0){item = ItemData.ToggleItem.gameObject;}else{item = ItemData.ToggleContainer.gameObject.AddChild(ItemData.ToggleItem.gameObject);}item.transform.localPosition = firstpoint + new Vector3(i*delDistance, 0f, 0f); = "toggle" + i;toggleData.go = item; = ;_toggleList.Add(toggleData);}}}void Update(){if (!_isStart){return;}if (Time.frameCount % (30 * ItemData.MoveTime) == 0 && ItemData.MaxPage > 1){if (ItemData.FirstMoveGo.localPosition.x < ItemData.LeftPosition.x - 0.5){ItemData.FirstMoveGo.localPosition = ItemData.RightPosition;}if (ItemData.SecondMoveGo.localPosition.x < ItemData.LeftPosition.x - 0.5){ItemData.SecondMoveGo.localPosition = ItemData.RightPosition;}Transform leftTran = ItemData.FirstMoveGo.localPosition.x < ItemData.SecondMoveGo.localPosition.x ? ItemData.FirstMoveGo : ItemData.SecondMoveGo; Transform rightTran = ItemData.FirstMoveGo.localPosition.x < ItemData.SecondMoveGo.localPosition.x ? ItemData.SecondMoveGo : ItemData.FirstMoveGo; TweenPosition.Begin(rightTran.gameObject, 0.5f, ItemData.LeftPosition, false);TweenPosition.Begin(leftTran.gameObject, 0.5f, _toLeftPosition, false);_currentPage = FixPage(_currentPage);SetPic(rightTran, _currentPage);//SetBtn(leftTran,false);//SetBtn(rightTran,true);_toggleList[_currentPage - 1].go.GetComponent<UIToggle>().value = true;}}private void SetBtn(Transform tran, bool state){Transform tf = tran.Find("Icon");if (tf != null){tf.gameObject.SetActive(state);}}private void SetPic(Transform tran, int _currentPage){foreach (Transform t in tran){if ( == _currentPage.ToString()){t.gameObject.SetActive(true);}else{t.gameObject.SetActive(false);}}}private int FixPage(int page){page++;if (page > ItemData.MaxPage){page = 1;}return page;}}}第⼆步:创建管理类AdvertisementScrollManager,将它做成⼀个单例,调⽤AdvertisementScroll的⽅法,开始滚动。
如何使用Unity创建3D游戏场景和角色
如何使用Unity创建3D游戏场景和角色第一章:Unity概述Unity是一种跨平台的游戏引擎,可用于创建各种类型的2D和3D游戏。
它提供了强大的工具和功能,使开发者能够轻松地创建游戏场景和角色。
第二章:创建游戏场景1. 场景布局:在Unity中,可以使用场景编辑器来创建游戏场景。
通过拖放功能,可以在场景中添加各种材质和纹理,以创建逼真的环境。
2. 光照设置:正确的光照设置是创建真实感场景的关键。
Unity 提供了各种光照效果和设置,如全局光照、实时阴影和烘焙光照,可以根据游戏需求进行调整。
3. 背景音乐和音效:通过添加背景音乐和音效,可以增强游戏场景的沉浸感。
Unity提供了内置的音频工具,可以轻松添加和管理音频资源。
4. 场景优化:为了保持游戏的流畅性,必须对场景进行优化。
使用Unity提供的工具,如LOD(Level of Detail)系统、批处理和碰撞器优化,可以有效减少渲染负荷。
第三章:创建角色1. 模型导入:Unity支持导入各种3D模型格式,如FBX和OBJ。
使用合适的建模软件(如Maya或Blender),可以创建和导出角色模型,并将其导入Unity。
2. 动画控制:为角色添加动画,可以使其在游戏中栩栩如生。
Unity提供了用于创建和管理角色动画的工具,如Animator和Animation。
可以设置不同的动画状态,如行走、奔跑和攻击,并根据游戏逻辑进行切换。
3. 控制器设置:为了让玩家能够操控角色,需要设置角色的控制器。
Unity提供了脚本编程和物理引擎,可以实现角色的移动、跳跃和与环境的交互。
第四章:特效和粒子系统1. 粒子系统:通过使用Unity的粒子系统,可以创建各种特效,如爆炸、火焰和雨水。
可以设置粒子的速度、发射方式和形状,以创建逼真的效果。
2. 特效插件:Unity还支持各种特效插件,用于创建高级的视觉效果,如体积光、动态阴影和后期处理。
这些插件可以充分利用现代图形硬件的功能,提供更好的视觉效果。
基于Unity3D实现3D照片墙效果
基于Unity3D实现3D照⽚墙效果⼀、前⾔Unity3D不仅仅可以开发游戏,还有⾮常多的开发⽅向,秉承着兴趣为先,将可以使⽤Unity制作的各种应⽤案例,分享如何进⾏开发,如何实现,希望⼤家可以在感兴趣的地⽅,学习到⾃⼰想要学习的东西。
今天就来实现⼀个3D照⽚墙的效果。
我对于这个项⽬的构思就是照⽚是3D的,可以滑动,然后使⽤DoTween插件去做动画平滑移动。
OK,那就正式开始。
先看⼀下效果图:⼆、正式开发新建项⽬,我使⽤的版本是Unity3D 2019.4.7f1,模板选⽤3D:(1)导⼊DoTween插件。
(2)新建Canvas,设置参数:设置Canvas的坐标到0,0,0:(3)在Canvas新建N个Image:(4)设置Main Camera的属性:设置完的样⼦:反正就是让Image在屏幕中间就可以了。
(5)新建脚本UIRotate.cs,双击打开脚本,编辑代码:using DG.Tweening;using UnityEngine;using UnityEngine.EventSystems;public class UIRotate : MonoBehaviour{private int halfSize;private GameObject[] gameObjects;/// <summary>/// 圆半径/// </summary>private int r = 300;/// <summary>/// 相间⾓度/// </summary>private int angle;private void Start(){//初始化数组var childCount = transform.childCount;//计算出中点halfSize = (childCount - 1) / 2;//求出圆内⾓度angle = 360 / childCount;//初始gameObjects = new GameObject[childCount];for (var i = 0; i < childCount; i++){gameObjects[i] = transform.GetChild(i).gameObject;SetPosition(i);SetDeepin(i);}}/// <summary>/// 设置物体位置/// </summary>private void SetPosition(int index){float x = 0;float z = 0;if (index < halfSize){int id = halfSize - index;x = r * Mathf.Sin(angle * id);z = -r * Mathf.Cos(angle * id);}else if (index > halfSize){int id = index - halfSize;x = -r * Mathf.Sin(angle * id);z = -r * Mathf.Cos(angle * id);}else{x = 0;z = -r;}Tweener tweener = gameObjects[index].GetComponent<RectTransform>().DOLocalMove(new Vector3(x, 0, z), 1); }private void SetDeepin(int index){//计算图⽚深度也就是z轴的距离,离摄像机的远近int deepin = 0;if (index < halfSize){deepin = index;}else if (index > halfSize){deepin = gameObjects.Length - (1 + index);}else{deepin = halfSize;}gameObjects[index].GetComponent<RectTransform>().SetSiblingIndex(deepin);}}(6)将UIRotate.cs脚本附到Canvas对象上,运⾏程序:(7)添加左右拖动代码,继续修改UIRotate.cs代码:using DG.Tweening;using UnityEngine;using UnityEngine.EventSystems;public class UIRotate : MonoBehaviour{private int halfSize;private GameObject[] gameObjects;/// <summary>/// 圆半径/// </summary>private int r = 300;/// <summary>/// 相间⾓度/// </summary>private int angle;private void Start(){//初始化数组var childCount = transform.childCount;//计算出中点halfSize = (childCount - 1) / 2;//求出圆内⾓度angle = 360 / childCount;//初始gameObjects = new GameObject[childCount];for (var i = 0; i < childCount; i++){gameObjects[i] = transform.GetChild(i).gameObject;SetPosition(i);SetDeepin(i);}}/// <summary>/// 设置物体位置/// </summary>private void SetPosition(int index){float x = 0;float z = 0;if (index < halfSize){int id = halfSize - index;x = r * Mathf.Sin(angle * id);z = -r * Mathf.Cos(angle * id);}else if (index > halfSize){int id = index - halfSize;x = -r * Mathf.Sin(angle * id);z = -r * Mathf.Cos(angle * id);}else{x = 0;z = -r;}Tweener tweener = gameObjects[index].GetComponent<RectTransform>().DOLocalMove(new Vector3(x, 0, z), 1); }private void SetDeepin(int index){//计算图⽚深度也就是z轴的距离,离摄像机的远近int deepin = 0;if (index < halfSize){deepin = index;}else if (index > halfSize){deepin = gameObjects.Length - (1 + index);}else{deepin = halfSize;}gameObjects[index].GetComponent<RectTransform>().SetSiblingIndex(deepin);}/// <summary>/// 向左滑动/// </summary>public void OnLeftDrag(){var length = gameObjects.Length;for (var i = 0; i < length; i++){var temp = gameObjects[i];gameObjects[i] = gameObjects[length - 1];gameObjects[length - 1] = temp;}for (var i = 0; i < length; i++){SetPosition(i);SetDeepin(i);}}/// <summary>/// 向右滑动/// </summary>public void OnRightDrag(){var length = gameObjects.Length;for (var i = 0; i < length-1; i++){var temp = gameObjects[i];gameObjects[i] = gameObjects[i+1];gameObjects[i+1] = temp;}for (var i = 0; i < length; i++){SetPosition(i);SetDeepin(i);}}private Vector2 touchFirst = Vector2.zero;//⼿指开始按下的位置private Vector2 touchSecond = Vector2.zero;//⼿指拖动的位置void OnGUI(){if (Event.current.type == EventType.MouseDown){touchFirst = Event.current.mousePosition;//记录开始按下的位置}if (Event.current.type == EventType.MouseUp){touchSecond = Event.current.mousePosition;//记录拖动的位置if (touchSecond.x < touchFirst.x){OnLeftDrag();//向左滑动}if (touchSecond.x > touchFirst.x){OnRightDrag();//向右滑动}touchFirst = touchSecond;}}}运⾏程序:(8)导⼊照⽚最后试⼀下:三、总结在Unity3D中实现了3D照⽚墙,虽然效果出来了,但是想要实现更加美观的效果还需要⼀些努⼒。
unity3d游戏开发之UGUI 加载图片
281127194721044.png(22.8 KB, 下载次数: 0)下载附件保存到相册3 小时前上传图片是动态加载的,然后转换为sprite赋值到ugui的按钮上该文章出自【狗刨学习网】代码如下:ing UnityEngine;ing System.Collections;ing System.IO;ing UnityEngine.UI;5.6.public class UITexLoader : MonoBehaviour7.{8.9. public string texname;10. private Texture2D m_Tex;11.12.13.14. private void LoadFromFile(string path)15. {16. m_Tex = new Texture2D(1, 1);17. m_Tex.LoadImage(ReadPNG(path));18. }19.20. private byte[] ReadPNG(string path)21. {22. FileStream fileStream = new FileStream(path, FileMode.Open, System.IO.FileAcces23.24. fileStream.Seek(0, SeekOrigin.Begin);25.26. byte[] binary = new byte[fileStream.Length]; //创建文件长度的buffer27. fileStream.Read(binary, 0, (int)fileStream.Length);28.29. fileStream.Close();30.31. fileStream.Dispose();32.33. fileStream = null;34.35. return binary;36. }37.38.39. // Use this for initialization40. void Start()41. {42.43. LoadFromFile(texname);44. Sprite tempSprite = new Sprite();45. tempSprite = Sprite.Create(m_Tex, new Rect(0, 0, m_Tex.width, m_Tex.height), new0));46. GetComponent<Image>().sprite =tempSprite;47. }48.49. // Update is called once per frame50. void Update ()51. {52.53. }54.}复制代码把这个脚本绑定到UGUI的按钮上面,运行就可以把按钮上的图片动态改变了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Unity3D游戏开发之添加背景图片
每个游戏在开始前都有登陆注册界面,但是登陆注册界面不只是几个Label,几个Button
组成的,还要有背景图片,可以怎么我们在只学习了GUI的前提下,怎么添加背景图片呢?我今天主要的任务就是做登陆注册界面,登陆注册界面要想好看点就要有背景图片,在unity中添加背景图片有两种方法,一种是通过代码来完成,还有一种是手动添加,我们都
来看看吧。
先来看看效果图:
通过代码完成:
1.//声明一张图片
2.public Texture2D img;
3.
4.//通过OnGUI方法执行下面操作
5.void OnGUI()
6.{
7. string aa = "";
8.
9. //构造一个空的GUIStyle
10. GUIStyle bb = new GUIStyle();
11.
12. //设置bb正常显示时是背景图片
13. bb.normal.background = img;
14. bel(new Rect(0, 0, 1370, 780), aa, bb);
15.}
手动添加:
1、先创建一个新的摄像机,命名为Background Camera;
2、新建一个GUI Texture,命名为Background Image;
3、在Background Image的Inspector面板【狗刨学习网】中点击Layer下拉窗口,
选择“Add Layer”添加一个新的层名称为“Background Image”;
4、选中Background Image,做如下操作:
5、该GameObject的Layer值设置为之前你添加的Background Image;
6、选中Background Camera,进行如下操作:
7、选中主摄像机,将Clear Flags设置为“Depth Only”,设置Culling Mask,取
消选择“Background Image”
这样就完成了背景图片的设置。
如果添加完成背景图片后,想要在添加其他的图片,比如说按钮的图片,或者添加文字不出现,那么选中背景图片Background Image,在它的属性设置栏中,改变它的位置,只要改变Z轴就可以:
感兴趣的朋友们赶紧试试吧!。