通过上一期的学习,我们知道为了如何向场景中添加一个物体。问题来了,如果需要对这个立方体进行修改应该怎么做呢?那我们肯定就得修改这段代码,能不能将立方体本身从我们的开发中单独提出来呢?这就涉及到我们今天要学习的一个的概念——Prefab。

Prefabs

Prefab是一种可以重复使用的asset,一旦一个Prefab创建出来,它就是一种存储在ProjectView的GameObject,在游戏开发中,我们可以在任意多个场景中去创建已经生成的GameObject实例对象,或者在同一个场景中创建多个。

 

不论是上面提到的哪种,我们需要做的是将创建的GameObject类型实例化就好了。所有实例化的Prefab都是与原始的Prefab相关联的,我们可以把实例化的Prefab看做原始Prefab的一个拷贝,也就是说,无论场景中存在多少个Prefab的实例,如果我们对原始的Prefab进行修改,那么所有有关它的拷贝都会被修改。

 

Prefab的创建

在使用Prefab之前,我们必须创建它,如下图所示,在Project窗口右键点击选择create,子菜单中选择Prefab即可。这样我们就创建了一个空得Prefab,接下来需要的就是把我们之前编辑好的GameObject拖拽到该空Prefab上松开鼠标即可,这个时候,空的Prefab就会变成蓝色。当然我们可以按照自己的需要修改该Prefab的名字。

【Unity开发】Prefabs

图 1

Prefab的实例化

       有了创建好的Prefab,就可以在以后的开发中直接使用了。

创建Prefab实例的一种方式是直接向场景中目标节点拖拽创建好的Prefab即可,这样就在场景中完成了实例化。

可能有人就会说,如果我要在程序运行中动态创建一个Prefab的实例,应该怎么做呢?这就涉及到我们这里要提到的第二种创建方式——通过Script(C#、JavaScript等等)动态创建Prefab的实例。

例子一——这里我们考虑一种情况,我们需要向场景中添加一个立方体,并且为这个立方体添加一些属性(比如刚体、碰撞等等)。

如果我们直接通过代码来实现,应该怎么做呢?

【Unity开发】Prefabs

图 2

如图所示,运行之后我们可以看到,一个立方体开始向下降落。表明我们已经创建成功了。

好的,那现在我们通过创建Prefab的方式来实现这个效果。方法很简单,就像前面说的那样,创建一个cube并对它进行编辑,然后在Project窗口中创建一个空的Prefab并将之前创建的cube拖拽到这个空的Prefab上完成Cube的Prefab创建。有了创建好的Prefab,接下来呢我们就在需要的时候通过代码将Prefab实例化到场景中即可。如图3所示,按照上面的步骤,我们可以得到一个立方体的Prefab(注意:动态加载Prefab需要存放在一个名为Resources的目录下,否则load会找不见)

【Unity开发】Prefabs

图 3

下图是我们使用代码来动态加载一个Prefab的代码清单。

【Unity开发】Prefabs

图 4

运行之后,我们可以看到窗口中有一个立方体(这个立方体就是我们之前创建编辑的一个Prefab的实例)向下掉落直到掉出屏幕,有了这种方式我们就可以在游戏需要的时候去动态加载一个已经创建的好的Prefab实例了。

【Unity开发】Prefabs

图 5

Prefab的编辑

       当然,我们在实际开发中也会面临Prefab需要修改的问题。这就涉及到Prefab的继承属性,Unity允许我们对已存在的Prefab进行修改,然后只要我们点击Inspector中的Apply按钮,我们所做的修改都会被该Prefab的实例所继承。(如下图所示)

【Unity开发】Prefabs

图 6

OK,关于Prefab的学习就结束了~~

Unity Prefabs的更多相关文章

  1. 从Unity引擎过度到Unreal4引擎(最终版)

    原文地址:http://demo.netfoucs.com/u011707076/article/details/44036839 前言 寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎 ...

  2. 转:Oculus Unity Development Guide开发指南(2015-7-21更新)

    http://forum.exceedu.com/forum/forum.php?mod=viewthread&tid=34175 Oculus Unity Development Guide ...

  3. Unity -- 材质-Material和预设体-Prefabs

    材质(Materials)用来把网格(Mesh)或粒子渲染器(Particle Renderers)贴到游戏对象上.他们在定义对象怎么被显示发挥重要组成部分.材质包括用于呈现网状或颗粒着色器的参考,所 ...

  4. Unity 最佳实践

    转帖:http://www.glenstevens.ca/unity3d-best-practices/ 另外可以参考:http://devmag.org.za/2012/07/12/50-tips- ...

  5. 在Unity环境下使用抽象和接口

    http://gamasutra.com/blogs/VictorBarcelo/20131217/207204/Using_abstractions_and_interfaces_with_Unit ...

  6. Unity进阶技巧 - 动态创建UGUI

    前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...

  7. Gvr SDK for Unity 分析(一)

    Gvr SDK概述 通过谷歌VR SDK for unity 为Android和iOS 构建虚拟现实应用程序 unity SDK在Android上支持构建应用程序for daydream 和 card ...

  8. Unity Standard Assets 简介之 Utility

    决定写这个系列起因于刚才的偶然所见,我发现当前版本的Unity有一个 Utility 标准资源包,里面有一个 FPSCounter 脚本提供了显示游戏运行帧率的基本功能,而我几周前刚刚写过一个同样功能 ...

  9. unity htc vive使用

    本文介绍如何在Unity中使用HTC vive设备,当前VR作为市场比较火热的热点,HTC VIVE设备作为三大供应商之一,许多人购买了该设备,却不知道如何使用,本文通过图文并茂的形式,进行手把手的讲 ...

随机推荐

  1. xcode升级到6.0以后遇到的警告错误 原帖链接http://www.cocoachina.com/bbs/simple/?t112432.html

    Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is depreca ...

  2. Pipeline(netty源码)

    精进篇:netty源码死磕6  巧夺天工--Pipeline模式揭秘 1. 巧夺天工--Pipeline模式揭秘 1.1. Pipeline模式简介 管道的发名者叫,Malcolm Douglas M ...

  3. Chef vs Puppet vs Ansible vs Saltstack: Which Works Best For You?

    Ansible vs SaltStack 谁才是自动化运维好帮手? - CSDN博客 https://blog.csdn.net/a105421548/article/details/53558598 ...

  4. 【C++基础学习】成员对象与对象数组

    第一部分 对象成员与对象数组 从一个简单的例子开始说起,首先定义一个Coordinate的类,里面有两个公有的成员变量m_iX和m_iY,分别代表横坐标和纵坐标. 接下来,定义一个对象数组cood和一 ...

  5. windows与mac共享文件

    实际操作环境是win10实体机与mac10.10虚拟机共享文件. 需要两步操作: 在win10中设置一个共享文件夹: 在mac中点击Finder——窗口左侧的列表——共享的——共享屏幕——输入用户名密 ...

  6. VVDocument+Appledoc生成文档

    在写代码的时候写上适当的注释是一种良好的习惯,方便自己或者别人阅读的方便. **VVDocument**:(Github地址:[VVDocument](https://github.com/onevc ...

  7. windows下的host文件在哪里,有什么作用?

    在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\ ...

  8. input处理函数

    input处理函数是潜在的影响你app性能的问题,他们可以阻止帧的形成,并且可以造成多余的亦或不必要的layout的工作. 避免长时间运行input handler:它们会阻塞scroll 不要在in ...

  9. swoole异步redis安装前置条件和流程

    ---恢复内容开始--- 1.redis服务 确认redis在服务器中已经安装了 2.hiredis库 第二步安装hiredis 下载位置 2.1获取 安装包https://github.com/re ...

  10. 基于候选区域的R-CNN系列网络简介

    使用候选区域方法(region proposal method)创建目标检测的感兴趣区域(ROI).在选择性搜索(selective search,SS)中,首先将每个像素作为一组.然后,计算每一组的 ...