Unity3D技术之使用小技巧
unity3D技术之gui.selectiongrid选择网格

unity3D技术之gui.selectiongrid选择网格static functionselectiongrid(position:rect,selected: int,texts:string[],xcount: int) : intstatic functionselectiongrid(position:rect,selected: int,images:texture[],xcount: int) : intstatic functionselectiongrid(position:rect,selected: int,content:guicontent[],xcount: int) : int static functionselectiongrid(position:rect,selected:int,texts:string[],xcount: int,style:guistyle) : int static functionselectiongrid(position:rect,selected:int,images:texture[],xcount: int,style:guistyle) : intstatic functionselectiongrid(position:rect,selected: int,contents:guicontent[],xcount: int,style:guistyle) : int parameters参数【文章出自狗刨学习网】positionrectangle on the screen to use for the grid.用于网格在屏幕上的矩形位置。
selectedthe index of the selected grid button被选择表格按钮的索引号。
textsan array of strings to show on the grid buttons.显示在网格按钮上的字符串数组。
unity3D技术之guilayout.horizontalscrollbar水平滚动条

unity3D技术之guilayout.horizontalscrollbar⽔平滚动条parameters参数valuethe position between min and max在最⼩最⼤之间的位置(⽂章出⾃狗刨学习⽹)sizehow much can we see?我们能看到的⼤⼩?leftvaluethe value at the left end of the scrollbar滚动条左边末端的值。
rightvaluethe value at the right end of the scrollbar滚动条右边末端的值。
stylethe style to use for the scrollbar background. if left out, the horizontalscrollbar style from the current guiskin is used.⽤于滚动条背景的样式。
如果不使⽤,该⽔平滚动条使⽤当前的guiskin⽪肤optionsan optional list of layout options that specify extra layouting properties. any values passed in here will override settings defined by the style.布局选项指定额外布局属性的⼀个可选列表。
这⾥传递任意值都将覆盖由style定义的设置。
参考:guilayout.width,guilayout.height,guilayout.minwidth,guilayout.maxwidth,guilayout.minheight,guilayout.maxheight,guilayout.expandwidth,guilayout.expandheightreturnsfloat - the modified value. this can be changed by the user by dragging the scrollbar, or clicking the arrows at the end.返回浮点型,被修改的值。
Unity3D教程:基础入门中文版

一、Unity基础本部分是你开始Unity的关键。
这里将解释Unity的界面,菜单项,使用资源,创建场景,和发布。
当你完全阅读了该部分后,你将能够理解Unity是如何工作的,以及如何使其更加有效的工作,和如何将简单的游戏放置在一起。
1.(Learning the interface)现在我们开始学习Unity,如果你还没有打开Unity,你可以通过双击位于Application->Unity文件夹中的Unity图标来运行它,当它第一次运行时你将看到如下的场景:Unity运时场,过实,图有很多需要学习的东西,让我们花费点时间来观察理解上述界面。
我们将介绍每一个接口元素。
概要主窗口的每一个部分都被称为视图(View)。
在Unity中有多种类型的视图,但是,你不需要同时看见所有的视图。
不同的布局模式(Layout modes)包含的视图是不同的。
通过单击布局下拉控件来选择不同的布局,该控件位于窗口的右上角。
选择现在,单击布局选择,并单击Animation,切换到动画布局(Animation layout)。
还可以从菜单中选择Window->Layouts->Animation来切换。
动画布局包含所有的视图,这是昀好的用来介绍它们的方法。
通过视图左上角的名称你可以迅速的分辨这些视图。
这些视图是:场景视图(Scene View)-用于放置物体游戏视图(Game View)-表示游戏在运行时的外观层次视图(Hierarchy)-当前场景中的游戏物体的列表工程视图(Project)-显示当前打开工程中所有可用的物体和资源检视视图(Instpector)-显示当前选中物体的细节和属性时间线(Timeline)-用于为当前选中物体创建基本的时间线动画场景视图(Scene View)场视图场景视图(Scene View)是一个可交互的沙盘。
你将使用它来选择并在场景中定位所有的游戏物体(GameObjects),包括玩家,摄像机,敌人等。
利用Unity3D技术实现的多人在线游戏设计与优化

利用Unity3D技术实现的多人在线游戏设计与优化Unity3D是一款强大的跨平台游戏开发引擎,被广泛应用于游戏开发领域。
在当今数字化时代,多人在线游戏已经成为游戏市场的主流,因此利用Unity3D技术实现多人在线游戏设计与优化显得尤为重要。
本文将探讨如何利用Unity3D技术来设计和优化多人在线游戏,以提升游戏体验和性能。
1. 多人在线游戏设计在设计多人在线游戏时,首先需要考虑的是游戏的核心玩法和互动方式。
通过Unity3D的强大功能,可以轻松实现多人同时在线的游戏场景。
以下是设计多人在线游戏时需要考虑的几个关键点:1.1 游戏服务器架构在设计多人在线游戏时,服务器架构是至关重要的一环。
合理的服务器架构可以有效地支持大量玩家同时在线,并确保游戏运行稳定。
常见的服务器架构包括P2P(点对点)和Client-Server(客户端-服务器)架构。
根据游戏类型和需求选择适合的服务器架构是设计多人在线游戏的首要任务。
1.2 网络通信多人在线游戏离不开网络通信,而网络通信的质量直接影响着玩家的游戏体验。
在Unity3D中,可以利用UNET(Unity Networking)或第三方插件如Photon等来实现网络通信功能。
通过合理地设计网络通信模块,可以降低延迟、提高同步性能,从而改善玩家之间的互动体验。
1.3 玩家匹配与分组在多人在线游戏中,玩家匹配与分组是一个关键问题。
通过合理地设计匹配算法和分组机制,可以让玩家更好地享受游戏乐趣。
Unity3D提供了Matchmaking服务,可以帮助开发者实现玩家匹配与分组功能,同时也可以根据实际需求进行定制化开发。
2. 多人在线游戏优化除了设计阶段,优化阶段同样至关重要。
优化可以提高游戏性能、减少资源消耗、改善用户体验。
以下是利用Unity3D技术实现多人在线游戏优化的几个关键点:2.1 网络优化在多人在线游戏中,网络优化是至关重要的一环。
通过减少网络数据传输量、合理使用压缩算法、优化网络连接等手段,可以降低延迟、提高同步性能,从而改善玩家之间的互动体验。
通过UNITY3D实现三维实时全息投影的技术方法

通过UNITY3D实现三维实时全息投影的技术方法摘要:与传统二维投影显示相比,三维投影显示不仅可以使观察者看到更加生动形象的投影效果,并且可以提供丰富的三维信息,具有良好的应用前景。
应用专业引擎Unity3D为工具,实现虚拟电力设备模型展示的设计流程以及各个环节,最终开发出基于网络的、数据精准、表现力强、交互性强的电力设备虚拟展示系统。
系统具有良好的运行效果、维护方法,说明了Unity3D引擎对构建三维电力设备进行相关虚拟全息方向的研究具有实用与参考价值。
关键字:Unity3D 设备虚拟展示全息投影1.引言全息投影技术其实就是实现真实的三维图像的记录和再现。
记录的难题早在1947年,英国匈牙利裔物理学家丹尼斯·盖伯发明了全息投影术,他因此项工作获得了1971年的诺贝尔物理学奖。
一般的三维图只是在二维的平面上通过构图及色彩明暗变化实现人眼的三维感觉,而全息立体摄影产生的全息图则包含了被记录物体的尺寸、形状、亮度和对比度等信息,能提供“视差”。
观察者可以通过前后、左右和上下移动来观察图像的不同形象——如同有个真实的物体在那里一样。
全息投影技术是全息摄影技术的逆向展示,本质上是通过在空气或者特殊的立体镜片上形成立体的影像。
不同于平面银幕投影仅仅在二维表面通过透视、阴影等效果实现立体感,全息投影技术是真正呈现3D的影像,可以从360°的任何角度观看影像的不同侧面。
全息投影是一种无需配戴眼镜的3D技术。
三维全息投影是一种全新的立体显示技术,该技术可在三维空间中显示通透而细腻的立体影像,从各个角度全方位、立体化地展示设备形象。
该技术具有超越传统的华丽而震撼的视觉冲击效果。
用户无需任何辅助设备,即可观察设备的全方位形象。
同时,该技术可以融入人机交互模块,实现用户与三维影像的实时互动,加深设备在用户心中的印象。
Unity3D是一个多平台的游戏开发工具,是一个全面整合的专业游戏引擎,具有更优秀的效果和更高的扩展空间。
unity3D学习知识点总结

1.unity简介和安装(x)2.unity基础操作unity窗口界面介绍1.Scene场景编辑窗口(Q、W、E、R、T/按住鼠标右键—旋转视角、按住鼠标右键Q、E、W、S、A、D)2.Game游戏运行窗口(运行按钮,暂停按钮,下一帧画面)3.Hierar chy 场景物体列表窗口(三角符号表示物体间的父子关系)4.Projec t 项目资源列表窗口(与文件夹对应,mete文件,移动尽量在u nity中移动而不是在文件夹中移动,可能报错)5.Inspec tor 属性编辑列表窗口(选中Hier archy物体,出现物体相关属性)6.Console 控制台输出窗口7.其他常用窗口:Layers(层)2by3(显示模式)unity菜单界面介绍1.file 文件菜单2.edit 编辑菜单3.Assets资源菜单4.Gameobject物体资源菜单pon ent 组件菜单6.Window窗口菜单7.Help 帮助菜单Scene与场景漫游1.Scene窗口各项工具Q、W、E、R按住鼠标右键Q、W、E、RPivot物体自己的中心/center所有物体加权之后的中心Global 世界坐标/local自身坐标Textur ed Wite/render Paths显示2D/3D2.快捷键与视角的移动Hierar chy与场景搭建1.Gameobject:基本组件gameobject—>create other2.Gameob ject:灯光组件3.Gameobject:物体组件4.Gameobject:其他组件5.Hierar chy层级关系与应用6.场景搭建案例Projec t与资源管理Inspec tor与游戏组件3.C#语言基础C#的值类型C#的引用类型C#的类型转换C#的逻辑语句C#的集合类型C#的面向对象特性封装、继承、多态Unity协程:和线程的区别:没有异步同步的概念,每一帧都执行(有内容的情况);协程的作用:1)延时(等待)一段时间执行代码;2)等某个操作完成之后再执行后面的代码。
unity3d中ontriggerenter和ontriggerexit的调用规律
unity3d中ontriggerenter和ontriggerexit的调用规律《Unity3D中OnTriggerEnter和OnTriggerExit的调用规律》在Unity3D中,有两个常用的触发器方法,分别是OnTriggerEnter和OnTriggerExit。
这两个方法在游戏开发中经常用来处理物体之间的碰撞和离开碰撞的情况。
在使用这两个方法时,需要注意它们的调用规律,以确保游戏逻辑的正确性。
首先让我们来了解一下OnTriggerEnter和OnTriggerExit方法的基本作用。
OnTriggerEnter方法在一个Collider(碰撞器)进入另一个Collider时被调用,而OnTriggerExit方法在一个Collider离开另一个Collider时被调用。
这两个方法可以在脚本中通过重写的方式来实现特定的功能,比如角色与物体的碰撞检测、触发特定事件等。
在实际使用中,需要注意OnTriggerEnter和OnTriggerExit方法的调用规律。
首先,在两个Collider中,必须至少有一个是触发器类型的Collider,也就是勾选了IsTrigger属性的Collider。
其次,这两个方法只被调用一次,即当一个Collider进入或离开另一个Collider时,对应的方法只会被调用一次。
另外,需要注意的是当一个Collider进入另一个Collider之后,OnTriggerExit方法不会立刻被调用。
而是要等待第一个Collider完全离开第二个Collider后,OnTriggerExit方法才会被调用。
这一点在处理游戏逻辑时尤为重要,因为有时候我们需要确保物体在离开碰撞区域后才执行特定的操作。
总的来说,在Unity3D中使用OnTriggerEnter和OnTriggerExit方法需要牢记它们的调用规律,确保在游戏开发中处理碰撞和离开碰撞的情况时能够顺利实现我们预期的游戏逻辑。
unity3d 中事件的用法
Unity3D 是一个非常流行的游戏开发引擎,它的事件系统是其中一个十分重要的功能。
事件系统可以使得游戏物体之间的通信变得更加简单和灵活,也可以帮助开发者更好地组织和管理游戏逻辑。
本文将详细介绍 Unity3D 中事件的用法,包括事件的类型、如何定义和使用事件以及在不同场景下的具体应用。
一、事件的类型在 Unity3D 中,事件主要分为两种类型:普通事件和Unity事件。
1. 普通事件普通事件是一种自定义的事件,开发者可以根据自己的需求来定义和触发。
普通事件通常通过C#代码来实现,可以用于触发游戏逻辑、UI 界面的交互、与外部系统的通信等各种情况。
2. Unity事件Unity事件是一种由 Unity 提供的内置事件,它们可以与引擎的生命周期和组件的状态相关联。
例如 Update,LateUpdate,FixedUpdate 等生命周期事件,以及 OnMouseDown,OnCollisionEnter,OnTriggerExit 等组件状态事件。
这些事件可以直接在 Inspector 窗口中进行配置和连接,非常方便。
二、定义和使用事件在 Unity3D 中,定义和使用事件主要涉及到委托(Delegate)、事件(Event)和消息传递系统。
下面将分别介绍它们的具体用法。
1. 委托委托是一种类型,它可以存储对方法的引用,使得方法可以像数据一样进行传递和使用。
在事件中,委托通常用于定义事件的类型和签名,以及向事件注册或注销监听者。
例如:```// 定义一个委托类型public delegate void MyEventHandler();// 声明一个事件public event MyEventHandler OnMyEvent;// 触发事件if (OnMyEvent != null){OnMyEvent();}```2. 事件事件是委托的一个特殊用法,它可以用于封装触发和通知的逻辑。
在Unity3D 中,事件通常以公共字段、属性或方法的形式暴露给外部代码,允许外部代码注册和注销事件的监听者。
Unity3D中相机功能使用方法介绍
学IT技能上我学院网Unity3D中相机功能使用方法介绍在Unity3D中,相机是一个能够为玩家捕获并显示游戏世界的设备。
通过操纵相机,我们可以使得我们的游戏场景以更加真实和独特的方式显示出来。
在Unity3D中默认有一个主相机Main Camera用来显示我们设计的游戏场景,其实呢,在一个游戏场景中我们是可以设置多个相机对象的,而且它们可以被设置为任意的渲染序列、任意的渲染部分和任意的渲染位置。
下面我们来讲解一些比较重要的东西吧!1、Clera Flags:决定场景的哪个部分需要清除。
当需要使用多个相机以显示不同的游戏元素时这是非常有用的。
2、Background Color:处于所有对象之后的背景颜色,设置此属性后,天空盒子(SkyBox)将失效。
3、Normalized View Port Rect:在屏幕坐标系下使用四个值来确定相机的哪些部分将显示在屏幕上。
4、Near Clip Plane:相对于相机昀近绘制点。
5、Far Clip Plane:相对于相机昀远的绘制点。
6、Field of view:沿着局部Y轴的相机视角宽度。
7、Is orthographic:打开或关闭相机的景深效果8、正交视大小(Orthographic size):在正交模式下的视口大小。
9、Depth:相机的绘制顺序,相当于ZIndex属性,具有较高深度的相机将绘制在较低深度相机的上面。
学IT技能上我学院网好了,有了上面的基础,我们就可以开始今天的正式内容了,如图是博主自己创建的一个游戏场景,游戏场景是在一个没有光照的黑暗的屋子里面,我们的游戏主角头顶上添加了一个点光源,所以当游戏主角运动的时候,其经过的场景会被主角头顶上的光源照亮,我们现在要做的就是为这个游戏场景添加一个小地图,以保证玩家在玩游戏的时候不会在黑暗的屋子里迷路。
好,现在我们开始来做小地图,我们在场景中添加一个Camera,然后设置其旋转角度使其垂直于XOZ平面,命名为TopCamera,这时候我们设置摄像机的投影方式为正交投影,相信根据前面提到的关于Camera的一些内容,大家已经猜到这个小地图的制作原理了,不错,这个小地图就是根据Normalized View Port Rect属性来制作的。
Unity3D游戏开发菜鸟快速上手指南
大家对Unity3D游戏引擎应该并不陌生,因为Unity3D在轻量级游戏开发和跨平台上面有他独特的优势,所以在当前可谓是炙手可热。
17xuee游戏学院简单介绍了Unity3D的一些基础。
并且有部分内容根据天天飞车项目经验做了简单分析。
适合没有接触过Unity3D和手游开发,并想了解其大概的同学。
1Unity3D简介1.1编辑器简介编辑器整体视图如图1.1所示。
里面包括了Unity常用的编辑窗口:图1.1 Unity编辑器界面Project视图、Hierarchy视图、Scene视图、Game视图、Inspector视图、Console视图、Profiler视图。
1.1.1Project视图Project视图可以理解为工程目录,里面罗列了工程里面的所有资源文件。
常见的资源包括:脚本、预设(Prefab)、模型、贴图、动画、Shader等。
用户可以通过右上角的搜索框,搜索工程内的文件。
1.1.2Hierarchy视图Hierarchy视图显示了当前游戏场景中,所有的游戏对象。
游戏对象是通过树形结构排布,展开后可以看到每个子节点对象。
常用的游戏对象包括:摄像机、场景物件、玩家、光源等。
1.1.3Game视图Game视图是游戏视角,即游戏最终展示给玩家的内容。
游戏视角包括两部分:1、场景中当前摄像机照射的场景;2、游戏UI界面。
1.1.4Scene视图Scene视图有点像3DMax的编辑环境,在这里可以看到当前场景中的所有游戏对象。
双击Hierarchy中的游戏对象,可以在Scene中定位到对应的物件。
在游戏运行期间,暂停游戏。
开发人员可以在Scene中找到对应的游戏对象,查看当前帧的世界场景,方便查找BUG。
1.1.5Inspector视图Inspector视图是游戏对象的属性面板。
选择一个物件后,可以在Inspector面板中查看或编辑游戏对象的属性。
游戏运行期间,修改游戏对象属性,可以马上作用到游戏对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Unity3D技术之使用小技巧 流程 1、避免Assets分支 所有的Asset都应该只有一个唯一的版本。如果你真的需要一个分支版本的Prefab、Scene或是Mesh,那你要制定一个非常清晰的流程, 来确定哪个是正确的版本。错误的分支应该起一个特别的名字,例如双下划线前缀:__MainScene_Backup。Prefab版本分支需要一个特别 的流程来保证安全(详见Prefabs一节)。
2、如果你在使用版本控制的话,每个团队成员都应该保有一个项目的Second Copy用来测试
修改之后,Second Copy和Clean Copy都应该被更新和测试。大家都不要修改自己的Clean Copy。这对于测试Asset丢失特别有用。
3、考虑使用外部的关卡编辑工具 Unity不是一个完美的关卡编辑器。例如,我们使用TuDee来创建3D Tile-Based的游戏,这使我们可以获得对Tile友好的工具的益处(网格约束,90度倍数的旋转,2D视图,快速Tile选择等)。从一个XML 文件来实例化Prefab也很简单。详见Guerrilla Tool Development。
4、考虑把关卡保存为XML,而非scene 这是一种很奇妙的技术: 1、它可以让你不必每个场景都设置一遍; 2、 他可以加载的更快(如果大多数对象都是在场景之间共享的)。 3、 它让场景的版本合并变的简单(就算是Unity的新的文本格式的Scene,也由于数据太多,而让版本合并变的不切实际)。 4、它可以使得在关卡之间保持数据更简便。
你仍就可以使用Unity作为关卡编辑器(尽管你用不着了)。你需要写一些你的数据的序列化和反序列化的代码,并实现在编辑器和游戏运行时加载关卡、在编辑器中保存关卡。你可能需要模仿Unity的ID系统来维护对象之间的引用关系。
5、考虑编写通用的自定义Inspector代码 实现自定义的Inspector是很直截了当的,但是Unity的系统有很多的缺点: 1、它不支持从继承中获益; 2、它不允许定义字段级别的Inspector组件,而只能是class类型级别。举个例子,如果没有游戏对象都有一个ScomeCoolType字段,而你想在Inspector中使用不同的渲染,那么你必须为你的所有class写Inspector代码。
你可以通过从根本上重新实现Inspector系统来处理这些问题。通过一些反射机制的小技巧,他并不像看上去那么看,文章底部(日后另作翻译)将提供更多的实现细节。
场景组织 6、使用命名的空Game Object来做场景目录 仔细的组织场景,就可以方便的找到任何对象。 7、把控制对象和场景目录(空Game Objec)放在原点(0,0,0) 如果位置对于这个对象不重要,那么就把他放到原点。这样你就不会遇到处理Local Space和World Space的麻烦,代码也会更简洁。
8、尽量减少使用GUI组件的offset 通常应该由控件的Layout父对象来控制Offset;它们不应该依赖它们的爷爷节点的位置。位移不应该互相抵消来达到正确显示的目的。做基本上要防止了下列情况的发生:
父容器被放到了(100,-50),而字节点应该在(10,10),所以把他放到(90,60)[父节点的相对位置]。这种错误通常放生在容器不可见时。
9、把世界的地面放在Y=0 这样可以更方便的把对象放到地面上,并且在游戏逻辑中,可以把世界作为2D空间来处理(如果合适的话),例如AI和物理模拟。
10、使游戏可以从每个Scene启动 这将大大的降低测试的时间。为了达到所有场景可运行,你需要做两件事: 首先,如果需要前面场景运行产生的一些数据,那么要模拟出它们。 其次,生成在场景切换时必要保存的对象,可以是这样: myObject = FindMyObjectInScene(); if (myObjet == null) { myObject = SpawnMyObject(); }
美术 11、把角色和地面物体的中心点(Pivot)放在底部,不要放在中间 这可以使你方便的把角色或者其他对象精确的放到地板上。如果合适的话,它也可能使得游戏逻辑、AI、甚至是物理使用2D逻辑来表现3D。
12、统一所有的模型的面朝向(Z轴正向或者反向) 对于所有具有面朝向的对象(例如角色)都应该遵守这一条。在统一面朝向的前提下,很多算法可以简化。
13、在开始就把Scale搞正确 请美术把所有导入的缩放系数设置为1,并且把他们的Transform的Scale设置为1,1,1。可以使用一个参考对象(一个Unity的Cube)来做缩放比较。为你的游戏选择一个世界的单位系数,然后坚持使用它。
14、为GUI组件或者手动创建的粒子制作一个两个面的平面模型 设置这个平面面朝向Z轴正向,可能简化Billboard和GUI创建。 15、制作并使用测试资源 1、为SkyBox创建带文字的方形贴图; 2、一个网格(Grid); 3、为Shader测试使用各种颜色的平面:白色,黑色,50%灰度,红,绿,蓝,紫,黄,青; 4、为Shader测试使用渐进色:黑到白,红到绿,红到蓝,绿到蓝; 5、黑白格子; 6、 平滑的或者粗糙的法线贴图; 7、 一套用来快速搭建场景的灯光(使用Prefa);
Prefabs 16、所有东西都使用Prefab 只有场景中的“目录”对象不使用Prefab。甚至是那些只使用一次的唯一对象也应该使用Prefab。这样可以在不动用场景的情况下,轻松修改他们。(一个额外的好处是,当你使用EZGUI时,这可以用来创建稳定的Sprite Atlases)
17、对于特例使用单独的Prefab,而不要使用特殊的实例对象 如果你有两种敌人的类型,并且只是属性有区别,那么为不同的属性分别创建Prefab,然后链接他们。这可以:
1、在同一个地方修改所有类型 2、在不动用场景的情况下进行修改
如果你有很多敌人的类型,那么也不要在编辑器中使用特殊的实例。一种可选的方案是程序化处理它们,或者为所有敌人使用一个核心的文件/Prefab。使用一个下拉列表来创建不同的敌人,或者根据敌人的位置、玩家的进度来计算。
18、在Prefab之间链接,而不要链接实例对象 当Prefab放置到场景中时,它们的链接关系是被维护的,而实例的链接关系不被维护。尽可能的使用Prefab之间的链接可以减少场景创建的操作,并且减少场景的修改。
19、如果可能,自动在实例对象之间产生链接关系 如果你确实需要在实例之间链接,那么应该在程序代码中去创建。例如,Player对象在Start时需要把自己注册到GameManager,或者GameManager可以在Start时去查找Player对象。
对于需要添加脚本的Prefab,不要用Mesh作为根节点。当你需要从Mesh创建一个Prefab时,首先创建一个空的 GameObject作为父对象,并用来做根节点。把脚本放到根节点上,而不要放到Mesh节点上。使用这种方法,当你替换Mesh时,就不会丢失所有你 在Inspector中设置的值了。
使用互相链接的Prefab来实现Prefab嵌套。Unity并不支持Prefab的嵌套,在团队合作中第三方的实现方案可能是危险的,因为嵌套的Prefab之间的关系是不明确的。
20、使用安全的流程来处理Prefab分支 我们用一个名为Player的Prefab来讲解这个过程。 用下面这个流程来修改Player: 1 复制Player Prefab; 2 把复制出来的Prefab重命名为__Player_Backup; 3 修改Player Prefab; 4 测试一切工作正常,删除__Player_Backup; 不要把新复制的命名为Player_New,然后修改它。 有些情况可能更复杂一些。例如,有些修改可能涉及到两个人,上述过程有可能使得场景无法工作,而所有人必须停下来等他们修改完毕。如果修改能够很快完成,那么还用上面这个流程就可以。如果修改需要花很长时间,则可以使用下面的流程:
· 第一个人:
1、 复制Player Prefab; 2、把它重命名为__Player_WithNewFeature或者__Player_ForPerson2; 3、在复制的对象上做修改,然后提交给第二个人;
· 第二个人: 1、在新的Prefab上做修改; 2、复制Player Prefab,并命名为__Player_Backup; 3、把__Player_WithNewFeature拖放到场景中,创建它的实例; 4、把这个实例拖放到原始的Player Prefab中; 5、如果一切工作正常,则可使删除__Player_Backup和__Player_WithNewFeature;
扩展和MonoBehaviourBase 21、扩展一个自己的Mono Behaviour基类,然后自己的所有组件都从它派生 这可以使你方便的实现一些通用函数,例如类型安全的Invoke,或者是一些更复杂的调用(例如random等等)。
22、为Invoke, StartCoroutine and Instantiate 定义安全调用方法 定义一个委托任务(delegate Task),用它来定义需要调用的方法,而不要使用字符串属性方法名称,例如: public void Invoke(Task task, float time) { Invoke(task.Method.Name, time); }
23、为共享接口的组件扩展 有些时候把获得组件、查找对象实现在一个组件的接口中会很方便。 下面这种实现方案使用了typeof,而不是泛型版本的函数。泛型函数无法在接口上工