Unity Prefabs
通过上一期的学习,我们知道为了如何向场景中添加一个物体。问题来了,如果需要对这个立方体进行修改应该怎么做呢?那我们肯定就得修改这段代码,能不能将立方体本身从我们的开发中单独提出来呢?这就涉及到我们今天要学习的一个的概念——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的更多相关文章
- 从Unity引擎过度到Unreal4引擎(最终版)
原文地址:http://demo.netfoucs.com/u011707076/article/details/44036839 前言 寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎 ...
- 转:Oculus Unity Development Guide开发指南(2015-7-21更新)
http://forum.exceedu.com/forum/forum.php?mod=viewthread&tid=34175 Oculus Unity Development Guide ...
- Unity -- 材质-Material和预设体-Prefabs
材质(Materials)用来把网格(Mesh)或粒子渲染器(Particle Renderers)贴到游戏对象上.他们在定义对象怎么被显示发挥重要组成部分.材质包括用于呈现网状或颗粒着色器的参考,所 ...
- Unity 最佳实践
转帖:http://www.glenstevens.ca/unity3d-best-practices/ 另外可以参考:http://devmag.org.za/2012/07/12/50-tips- ...
- 在Unity环境下使用抽象和接口
http://gamasutra.com/blogs/VictorBarcelo/20131217/207204/Using_abstractions_and_interfaces_with_Unit ...
- Unity进阶技巧 - 动态创建UGUI
前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...
- Gvr SDK for Unity 分析(一)
Gvr SDK概述 通过谷歌VR SDK for unity 为Android和iOS 构建虚拟现实应用程序 unity SDK在Android上支持构建应用程序for daydream 和 card ...
- Unity Standard Assets 简介之 Utility
决定写这个系列起因于刚才的偶然所见,我发现当前版本的Unity有一个 Utility 标准资源包,里面有一个 FPSCounter 脚本提供了显示游戏运行帧率的基本功能,而我几周前刚刚写过一个同样功能 ...
- unity htc vive使用
本文介绍如何在Unity中使用HTC vive设备,当前VR作为市场比较火热的热点,HTC VIVE设备作为三大供应商之一,许多人购买了该设备,却不知道如何使用,本文通过图文并茂的形式,进行手把手的讲 ...
随机推荐
- Unable to run Kiwi tests on iOS8 device
本文转载至 http://stackoverflow.com/questions/25871601/unable-to-run-kiwi-tests-on-ios8-device 5down vote ...
- IOS开发之Iphone和Ipad应用程序图标和启动动画
本文转载至 http://blog.csdn.net/yesjava/article/details/8782060 当我们用xcode开发iphone和ipad应用程序的时候,我们可以用一下表中所显 ...
- jquery ui 怎么实现tab标签切换效果
1.效果图 2.HTML 代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...
- DuiLib笔记之自定义标题栏以及响应按钮点击事件
在博文DuiLib笔记,基于WindowImplBase的基础模板的基础上,修改皮肤文件如下 <?xml version="1.0" encoding="utf-8 ...
- MARA 附加结构(增强字段)
- 7-2 jmu-python-猜数游戏(10 point(s)) 【python】
7-2 jmu-python-猜数游戏(10 point(s)) 用户从键盘输入两个整数,第一个数是要猜测的数n(<10),第二个数作为随机种子,随机生成一个1~10的整数,如果该数不等于n,则 ...
- Oracle在Java中事物管理
对于 对数据库中的数据做dml操作时,能够回滚,这一事物是很重要的 下面例子是对数据库中数据进行修改 package com.demo.oracle; import java.sql.Connecti ...
- HDFS副本设置——默认3
首先 dfs.replication这个参数是个client参数,即node level参数.需要在每台datanode上设置. 其实默认为3个副本已经够用了,设置太多也没什么用. 一个文件,上传到h ...
- DFS序+线段树(bzoj 4034)
题目链接 题目就不多说了. 本题目,可以用dfs序+线段树做:题目给定了一棵树,树上节点告诉了权值.我们可以先将这棵树进行dfs将一棵树变成线性结构:如图 变成这样后,然后就可以用线段树. 操作1:也 ...
- [ZJOI 2013] K大数查询
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3110 [算法] 整体二分 + 线段树 时间复杂度 : O(NlogN ^ 2) [代 ...